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 />, <img />)
> * 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/

Reply via email to