« Return to Thread: .css() px vs. em

Re: .css() px vs. em

by Robert Biggs :: Rate this Message:

Reply to Author | View in Thread

To have consistent font size across fonts, browsers and OSs and to be able to use variable lengths for font resizing, try the following percentage based method. It will use percentages that result in pixel lengths. This should solve your problem:

body { font-size: 13px; }
body * { line-height: 1.22em; }
table, td { font-size: inherit; font: 100%; }

/*
Use the following percentages for these pixel sizes:
63%              8px            
--------------------
70%              9px            
--------------------
77%             10px            
--------------------
85%             11px            
--------------------
92%             12px            
--------------------
100%            13px            
--------------------
107%            14px            
--------------------
114%            15px            
--------------------
122%            16px            
--------------------
129%            17px            
--------------------
136%            18px            
--------------------
144%            19px            
--------------------
152%            20px            
--------------------
159%            21px            
--------------------
167%            22px            
--------------------
174%            23px            
--------------------
182%            24px            
--------------------
189%            25px            
--------------------
197%            26px            
*/

Luke Lutman wrote:
Here it is as a plugin (I don't have IE handy, but it the IE part of the
code works in FireFox):

Example:
$('#example').px('font-size'); -> '12px'

Plugin:
(function($){
       
        var $px = $(document.createElement('div')).css({
                position: 'absolute'
        });

        $.fn.px = function(prop) {
                var val;
                if($.browser.msie) {
                        $px
                        .clone()
                        .css('width', this.css(prop))
                        .appendTo(this[0])
                        .each(function(){
                                val = $(this).width() + 'px';
                        })
                        .remove();
                } else {
                        val = this.css(prop);
                }
                return val;
        };

})(jQuery);

Luke

Luke Lutman wrote:
> I've run into the same problem with IE :-(
>
> I did more or less what Dave suggested (untested, of course!):
>
> var $tmp = $('#some-element')
>      .append('<div style="position: absolute; width: ' +
> $('#some-element').css('font-size') + ';" />')
>      .find(':last-child')
>
> var fontSizeInPx = $tmp.width();
>
> $tmp.remove();
>
> This would work for other units (i.e. in, pt) and other properties
> (text-indent, line-height) too.
>
> Some things to watch out for:
> * the element you want to measure must be able to have children (i.e.
> not <br />, )
> * this method makes the browser to two extra re-flows (I think?)
> * make sure the appended div doesn't pick-up any funny business from the
> cascade.
>
> Luke
>
> Dave Methvin wrote:
>>>  Firefox is returning the value in pixels while IE6 is returning
>>> the value in ems. Is this a bug?
>>  
>> It's just IE being IE. Other browsers have getComputedStyle which tells
>> you the dimensions in pixels. IE has currentStyle; although that does
>> tell you the current style (taking the CSS cascade into effect) it
>> returns whatever dimensions were given in the style rule. jQuery's
>> .css() method uses whatever it's dealt by the browser.
>>  
>> I think I've seen IE hacks where you can put a box around a character
>> and then measure the box in pixels to get the font size, but my
>> Google-fu is weak at the moment.
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> jQuery mailing list
>> discuss@jquery.com
>> http://jquery.com/discuss/
>
>
> _______________________________________________
> jQuery mailing list
> discuss@jquery.com
> http://jquery.com/discuss/


_______________________________________________
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/

 « Return to Thread: .css() px vs. em