借 Lea verou 的話:css
當某些值相互依賴時,應該把它們的相互關係用代碼表達出來。html
一般狀況下,咱們會但願字號和其餘尺寸可以跟父元素的字號創建關聯,此時em
就很好的表達了這種關係。less
在CSS Values and Units Module Level 3中,有一個相對長度單位em
:翻譯
em unit
Equal to the computed value of the font-size property of the element on which it is used.code
翻譯:htm
em
等價於元素font-size
的計算值blog
那麼問題來了,若是元素的font-size
用的是em
單位呢?MDN指出:繼承
For most font-relative units (such as
em
andex
), the font size is relative to the parent element's font size.element
翻譯:get
font-size
屬性的em
和ex
單位值相對於父元素的字號
這其實意味着,font-size
的em
和%單位的做用是同樣的。
到這裏爲止em
的用法已經清楚了:
font-size
,若是經過em
顯示指定元素的font-size
,做用等於%,相對於父元素的font-size
計算。em
單位,em
等價於元素font-size
的計算值注意兩點,
font-size
默認會繼承,可是諸如替換元素(諸如button
、input
),不會繼承,規範上大意是說,替換元素的樣式超出了 CSS 的範疇。line-height
用em
時,直觀來看,等價於用數字,可是繼承的時候會出現問題,因此line-height
一般推薦用數字而不是用em
。好比:
.green { line-height: 1.1; border: solid limegreen; } .red { line-height: 1.1em; border: solid red; } h1 { font-size: 30px; } .box { width: 18em; display: inline-block; vertical-align: top; font-size: 15px; }
<div class="box green"> <h1>Avoid unexpected results by using unitless line-height.</h1> length and percentage line-heights have poor inheritance behavior ... </div> <div class="box red"> <h1>Avoid unexpected results by using unitless line-height.</h1> length and percentage line-heights have poor inheritance behavior ... </div> <!-- The first <h1> line-height is calculated from its own font-size (30px × 1.1) = 33px --> <!-- The second <h1> line-height results from the red div's font-size (15px × 1.1) = 16.5px, probably not what you want -->
結果如圖: