line-height:normal是怎樣計算的?
line-height:normal不同瀏覽器值不同?具體是怎樣的?
這是 CSS 里最難的知識點……就算你翻爛 W3C 文檔都沒用,依然理解不了。W3C 只會告訴你這個值是字體自己的特性,但是原理到底是怎樣的,你無從得知。
我推薦你看這篇文章,原理講得很清楚:深入理解 CSS:字體度量、line-height 和 vertical-align
我保證大部分人看完這篇文章,就再也不想碰 vertical-align 了,而且依然理解不了 line-height。
因為你需要有一些「字體設計」的常識才能理解這篇文章。
這個知識點往大了說就是對 IFC 的理解。
前端為什麼只講 BFC(Block Formatting Context) 不講 IFC(Inline Formatting Context)?因為大部分前端不懂啊。
面試官甚至根本就不問 IFC(連他自己都不懂怎麼敢問你啊)。
衍生問題:為什麼 & 下面會無緣無故多出幾像素?JS Bin
衍生問題2:為什麼把 font-size 變小之後,p 元素反而變高了?JS Bin
這個問題涉及的知識點太細了,我一般不敢問面試者。
如果我的答案激起了你對「字體設計」的興趣,你可以看看《Helvetica》這部電影。
關於經典字體Helvetica的故事
然後關注一下知乎上的字體設計師,翻翻他們的回答。
如果我的答案讓你退縮,也不要緊,因為很多人都跟你一樣退縮了(這樣說你是不是就好受一些 : )
從實際角度出發,我建議還是別了解 IFC 了,太難用了,直接用 FFC(Flex Formatting Context)吧。
P.S. 你問 CSS,我卻把你帶到了字體設計領域,估計又有人要說我裝逼了
你給前端新人教這麼多知識幹啥!他的大腦裝得下嗎?
我的回答:你的大腦容量小不代表別人大腦容量也小。
Values
- normal
- &
The used value of the property is this number multiplied by the element"s font size. Negative values are illegal.
- &
The specified length is used in the calculation of the line box height. Negative values are illegal.
- &The computed value of the property is this percentage multiplied by the element"s computed font size.
- inheritTakes the same specified value as the property for the element"s parent.
簡而言之:line-height不允許負值,給定值之後會根據font-size計算行高,line-height指定的行高是行高最小值,設置height可以增大行高
line-height的計算:以px為例,line-height減font-size再除以二,即為font的上下間距
normal的情況為默認值,瀏覽器會計算出「合適」的行高,多數瀏覽器(Georgia字體下)取值為1.14,即為font-size的1.14倍,如果未設定font-size,那既是基準值16px的1.14倍
單獨討論這個取值是沒什麼意義的,因為normal和具體的數值相比,會因為字體的不同而不同如果是項目需要,還是給定一個值好一些http://css-class.com/test/css/text/linebox-line-height-011.htmlCSS/Properties/line-height
CSS line-height propertyVisual formatting model details,w3文檔原話:
normal
Tells user agents to set the used value to a "reasonable" value based on the font of the element. The value has the same meaning as
意思就是設置為normal的時候具體的數值取決於當前元素所用的字體,推薦是1到1.2之間。
然後我寫了一個頁面測了一下,確實是對於不同的字體用的值不一樣,上面是宋體,下面是默認的字體:
JS Bin
推薦閱讀:
※全局樣式加 float:left 導致 div{margin:0 auto;} 不起作用,為什麼?
※各大網站的 CSS 布局對行級元素是不是有些濫用?
※請問怎麼通俗的理解css中的行框和行內框?
※為什麼排版引擎解析 CSS 選擇器時一定要從右往左解析?
※如何寫一個類似 LESS 的編譯工具?
TAG:CSS |