Helping ordinary people create extraordinary websites!
 

Styling Disabled Buttons / Disabled Text Boxes in CSS

by Akash Mehta


As your forms grow in complexity, you’ll probably find a need to temporarily disable an input – either a button, a text box, or some other element. This is quite easy in HTML – the disabled attribute comes to the rescue. But just how do you style those fields, and convey that they are temporarily disabled?

Let’s consider this standard input field:

<input type="text" value="Text." disabled />

Pretty standard stuff. Your web browser will automatically style it a little, but mostly just prevent the user from editing without any real visual hints. But let’s add some basic CSS to convey the state of the input, and to standardise it across our site and on most platforms. If we add the following CSS:

input[disabled] {
	border: 1px solid #999;
	background-color: #ddd;
}

But wait – our demo uses inline styles, but your browser might not have just styled that properly if we used a full CSS declaration. We don’t set a value for the disabled attribute – it’s a minimized attribute. To get IE to play nicely with it (and for XHTML), we’ll have to set the value to “disabled”:

watch the wrestler in HD

<input type="text" value="Text." disabled="disabled" />

If possible, just for total compatibility, we can also add a “disabled” class that IE6 will respect and apply styles for correctly.

<input type="text" value="Text." disabled="disabled" class="disabled" />

We can then change the CSS selector we’re using:

input[disabled="disabled"], input.disabled

And we’re done! This works across every major browser – IE6+ and FF1.0+ tested, and Safari 3 / Opera 9.5 should be fine as well. The Sitepoint CSS reference has further information on compatibility, available here.

Finally, if you want to see how Firefox styles disabled fields by default, load up your resource://gre/res/forms.css file (you’ll have to copy and paste it to your address bar). There are a number of lengthy selectors with just a few rules, but here’s the big one, way down the bottom:

button[disabled]:active, button[disabled],
input[type="reset"][disabled]:active,
input[type="reset"][disabled],
input[type="button"][disabled]:active,
input[type="button"][disabled],
select[disabled] > input[type="button"],
select[disabled] > input[type="button"]:active,
input[type="submit"][disabled]:active,
input[type="submit"][disabled] {
  padding: 0px 6px 0px 6px;
  border: 2px outset ButtonFace;
  color: GrayText;
  cursor: inherit;
}

GrayText is actually a system color – it’s defined by the CSS 2.1 specification and supported on and off in various browsers. These “special” color keywords are supposed to match the local system styles – on a Windows machine, for instance, Firefox would use the color: GrayText rule to style text in disabled fields with the same color that the local Windows system uses. A list of options is available on the CSS reference as well.





Showcase Your Tutorials

Related Posts
» Four CSS Tricks Every PHP / Web Developer Should Know
» Wordpress Comment Styling Round Up
» Grunge Tables with Photoshop and XHTML (Part 4)
» Forcing client side cross-domain HTTP requests with JavaScript
» Styling Your Online Resume
 


This post has 10 Responses so far.
  1. Permana Jayanta Says:
    August 30th, 2008 at 6:26 pm

    I’m beginner in CSS .. and i just know now that we even can style disable input text .. thank for the info ..

  2. Heather Says:
    September 18th, 2008 at 8:39 am

    This method does not work for radio & checkbox buttons. Do you know of a way we can manipulate styles for those elements (in both IE & FF)?

  3. Bobby Web Guy Says:
    February 19th, 2009 at 1:06 pm

    Great post, css is so powerful, thanks for the advanced tutorial.

  4. Sean Says:
    March 17th, 2009 at 5:41 am

    Can not work in IE, are u really try this before in IE browser?

  5. Stretch Says:
    April 13th, 2009 at 10:48 am

    Best info out there on dealing with the differences in browsers. Thanks for sharing!

  6. Yura zaripov Says:
    April 17th, 2009 at 4:45 am

    For using this in IE you can using jquery. Sample: $(“input[disabled]“).css(“color”,”grey”);

    or javascript.

  7. games Says:
    August 10th, 2009 at 8:18 am

    In my opinion css is great, thanks for the post.

  8. Pablo Says:
    September 29th, 2009 at 10:42 am

    It’s very interesting, but it’s not working for me on IE8.

    It works very well on FF 3.5, but IE doesn’t apply the styles for textboxes (background color for example).

    Anyone has a clue why this happens?

    Thanks.

  9. mickael Says:
    January 11th, 2010 at 7:13 am

    Thank you for this very useful list, I am not sure it is cross browsers, but for my own website, I extended that to: input[type="text"][readonly], and hopefully it worked with Firefox 3.5.7

  10. kjell Says:
    January 15th, 2010 at 4:54 pm

    tnx for the post! Was useful to me

Leave a Reply



GET OUR NEWSLETTERS