Powered by Blogger.

Friday, July 23, 2010

How to make textarea same width with textbox in Chrome cross-browsers

Thanks to the *brilliant* CSS box model, very simple tasks have become a nightmare.

I've been struggling lately to do a very simple thing which is to make a textbox (ie. <input type="text" /> ) and a textrea same width so that they align nicely.

The problem with making a textbox and textarea same width is that all browsers add 1px padding to textboxes that can't be removed, in other words setting the padding to 0px won't remove that 1px padding, a common trick to get rid of padding is to float the element but unluckily this doesn't work with textboxes, well, this means we have extra 2px in the width of the textbox that we simply can't get rid of. Now this won't be a problem if the same thing applies to textreas as well but unfortunately this is not the case, in most browsers (IE, Safari and Chrome) setting the padding of a textrea to 0px *unfortunately* works. One exception to this is FireFox which applies the 1px non-removable padding to textareas as well, this is why the problem doesn't exist with FireFox, but should we ignore IE, Safari and Chrome and assume everybody is using FireFox? I guess not, it makes more sense to make it work in those browsers and find a hack for FireFox and actually this is what I did.


Having had a look on mozilla's website, I came across those two extensions to CSS, -moz-padding-start and
-moz-padding-end.

So, to make a textbox and a textrea same width cross-browsers use this code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <style type="text/css">
    *
    {
        padding: 0px;
        margin: 0px;
    }
    #textbox
    {
        width: 500px;
        -moz-padding-start: 1px;
        -moz-padding-end: 1px;
    }
    #textarea
    {
        width: 500px;
        padding: 1px;
    }
    </style>
    </head>
    <body>
    <input type="text" id="textbox" /><br />
    <textarea id="textarea"></textarea>
    </body>
    </html>

Adding 1px to the textrea makes the text looks nicer than with no padding at all (with 0px padding, the text sticks to the border which is not visually appealing). In FireFox we will have 2px padding for the textarea and 2px left and right padding for the textbox but visually speaking it almost looks the same (try to view the code in FireFox).

This code was tested with IE, Safari, Chrome, FireFox and SeaMonkey (which uses the same rendering engine like FF) and it worked perfectly. Note that this hack is not perfect, for example Opera will display the textarea 2px wider than the textbox. For me I don't care about Opera very much (not so many people use it), besides it's only 2px, so, it's not something that will make your site unusable or something, there could probably be a hack for Opera too but again I'm not interested in Opera, so for me it's not worth the time. It probably won't work with other less popular browsers too, I tested it with the ones I care about (2 extra pixels in a not popular browser is not a big deal, I can live with that).

In terms of rendering engines (aka layout engines), this will work with Trident based browsers (Internet Explorer), WebKit based browsers (Safari, Google Chrome and other browsers) and Gecko based browsers (FireFox, SeaMonkey and other browsers).

Finally, this won't work if the visual styles are not enabled in Windows XP or Vista (with the exception of FireFox and the other browsers that are based on the same engine), but as very few people (almost none) disable the visual styles so I'm not so worried about that one too.

Finally, if you're a control freak and you want it to work in every browser then your last resort is javascript (I was working on that but gave up on it after I came up with this simple hack), but even this won't work if javascript is disabled in the browser. 


by Wal

No comments:

Post a Comment

  ©Template by Dicas Blogger.

TOPO