2010-09-01 23 views
32

我打电话$("#foobar").css("line-height")并恢复“正常”。如何将其转换为像素量?在CSS规范中定义“正常”还是浏览器特定?jQuery/CSS:“正常”的行高== ==?px

+0

您正在使用哪种浏览器/平台?现场演示可能也有帮助(http://jsbin.com和http://jsfiddle.net都很好)。按照预期,Firefox 3.6.8和Chrome 6.0.472.51测试版(在Ubuntu 10.04上)都返回像素值。在SO'$('div.container').css('line-height');'返回11.2px(FF)。 – 2010-09-01 00:59:40

+1

在Windows XP上的Chrome返回'normal' – Robert 2010-09-01 01:38:13

回答

5

正常实际上被称为abnormalseveral instances,因为存在相当大的浏览器不一致性。

声明的line-height:正常不仅 从浏览器有所不同的浏览器,这是我 此前预计,事实上,量化 这些差异是整个 点,但也从一个字体 面变化另一个,并且也可以在给定的面内变化 。

+7

我认为它值得提供一个链接回到埃里克迈耶的网站为您的报价来源,一个迷人的阅读:http://meyerweb.com/eric/thoughts/2008/05/ 06/line-height-abnormal/ – 2010-09-01 01:14:45

+0

-1,因为这不会接近回答问题。良好的信息,但应该是一个评论。 – 2012-04-26 14:02:41

+2

@MartinJespersen我不会删除答案,即使现在阅读它,我仍然认为我的答案是正确的,因为'normal'是浏览器特定的,因此,跨浏览器不一致,不应该转换为像素。这表示我非常感谢您花时间提供关于downvote的反馈,谢谢! :) – Frankie 2012-04-26 19:34:26

6

normalline-height的有效设置,因此对于那些将返回该值的浏览器并没有真正的解决方法。

或者,您可以使用.css('height'),因为它只会计算元素的内部部分,而不是padding/border/margin。如果你有一个多行元素,或者一个元素不仅仅是文本,它会带来一点创意。

http://jsfiddle.net/xVBfb/

编辑:周围的工作的一个例子是具有

<span id='def' style='line-height:inherit;display:none;'>&nbsp;</span>

的元素中,然后找到行高你可以只使用#def的.height()因为它总是只有一行,因此也就是父元素的行高。


浏览器在Windows XP是,除非明确规定,否则在返回的jsfiddle一个normal浏览器的一个例子。 Firefox返回一个像素数。 normal是每个w3规格的初始值。 http://www.w3.org/TR/CSS2/visudet.html#propdef-line-height

+0

显然你提供的解决方法似乎是最好的选择。感谢那。 – inhan 2013-10-29 20:13:05

12

this page,看来最近的浏览器使用line-height: normal相同的值:1.14,ID EST的font-size财产与1.14系数。

试图与几个浏览器(在Windows XP):

  • 的Chrome 21.0.1180.75
  • 火狐14.0.1
  • 的Safari 5.1.7
  • 歌剧11.64
  • IE 7
  • IE 8

编辑

我错了,line-height取决于font-familyfont-size,您的浏览器,也许你的操作系统...

更多阅读Eric Meyers' website

+0

note:line-height:1em; == font-size:* any * px; – 2013-01-16 12:22:12

+0

那么这是否意味着“line-height:1.14em”是等价但明确的陈述? – 2013-06-12 14:54:44

+0

我以为,但事实并非如此。 'line-height'取决于'font-family','font-size',你的浏览器,也许你的操作系统......你会在[Eric Meyers的网站]上找到一些阅读(http://meyerweb.com/埃里克/想法/ 2008/05/06 /行高-异常/) – zessx 2013-06-12 15:14:46

2

精确计算像素中的法线高度很困难。虽然,根据MDN它大约1.2em。

如果您已经:

body{ 
    font-size: 16px; 
} 

所以,你的网站有正常的字体大小为16像素,然后正常的line-height将大致24px。这意味着您可以计算正常的字体大小像素值乘以1.516px * 1.5 == 24px

注意:由于px值和em值之间存在差异,所以我没有乘以1.2。

0

然而,这是很久以前写的,但帮助我在​​我的任务中写下临时解决方案。我正在复制这些代码,而不是其他人可以使用的代码。

$('#lineHeightInc') 
.click(function() { 
    var box = GetSelectedBox(); 
    var ct = box.data('LineHeight'); 
    if (isNaN(ct)) 
     ct = 0; 
    ct++; 
    box.css('line-height', (parseFloat(box.css('font-size')) * 1.61 + ct) + 'px'); 
    box.data('LineHeight', ct); 
}); 

$('#lineHeightDic') 
.click(function() { 
    var box = GetSelectedBox(); 
    var ct = box.data('LineHeight'); 
    if (isNaN(ct)) 
     ct = 0; 
    ct--; 
    box.css('line-height', (parseFloat(box.css('font-size')) * 1.61 + ct) + 'px'); 
    box.data('LineHeight', ct); 
});