34

I have sort of a strange situation. I'm trying to style a disabled input button because I have an annoying hover turning the text to white. This makes it confusing to the user because its acting like a normal button.

I have tried a few things, mainly css and a few jQuery things. I would like to keep this in css if at all posable.

This is my html, sorry it is in a larvel form helper.

{{ Form::submit('Change', array_merge($design_project->is_locked ? ['disabled' => 'disabled'] : [], ['class' => 'btn btn-blue span3'])) }}

and this is what the browser generates

<input disabled="disabled" class="btn btn-blue span3" type="submit" value="Change">

and I was working on something like this

.btn:hover input[disabled], .btn:active input[disabled], .btn:focus input[disabled]{
  color:green
}

Any help would be wonderful!

2
  • 1
    Can you post the generated HTML, please? Commented Aug 26, 2013 at 13:38
  • @Vector Does the text change its color to green if you hover over the button? Commented Aug 26, 2013 at 13:43

3 Answers 3

66

Use this CSS (jsFiddle example):

input:disabled.btn:hover,
input:disabled.btn:active,
input:disabled.btn:focus {
  color: green
}

You have to write the most outer element on the left and the most inner element on the right.

.btn:hover input:disabled would select any disabled input elements contained in an element with a class btn which is currently hovered by the user.

I would prefer :disabled over [disabled], see this question for a discussion: Should I use CSS :disabled pseudo-class or [disabled] attribute selector or is it a matter of opinion?


By the way, Laravel (PHP) generates the HTML - not the browser.

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you, this worked perfectly for me. Me and my silly spaces! :)
Are there any reasons for preference between using [disabled] and :disabled ? (which is also chainable → css-tricks.com/almanac/selectors/d/disabled )
@FrankNocke Indeed, :disabled seems to be more preferable, see my edit.
19

Let's just say you have 3 buttons:

<input type="button" disabled="disabled" value="hello world">
<input type="button" disabled value="hello world">
<input type="button" value="hello world">

To style the disabled button you can use the following css:

input[type="button"]:disabled{
    color:#000;
}

This will only affect the button which is disabled.

To stop the color changing when hovering you can use this too:

input[type="button"]:disabled:hover{
    color:#000;
}

You can also avoid this by using a css-reset.

4 Comments

Why was this downvoted? It's a perfectly valid solution for modern browsers.
thanks mate. i was about to start thinking that my whole CSS career is a lie :)
@thesaadarshad I just received an upvote on my answer on this question. By accident I also saw your answer, which I downvoted for a reason I can't remember anymore. I made an edit to be able to revert the downvote. +1!
:disabled doesn't seem to work in IE9. [disabled] works.
1

A space in a CSS selector selects child elements.

.btn input

This is basically what you wrote and it would select <input> elements within any element that has the btn class.

I think you're looking for

input[disabled].btn:hover, input[disabled].btn:active, input[disabled].btn:focus

This would select <input> elements with the disabled attribute and the btn class in the three different states of hover, active and focus.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.