# em 單位用在設定距離時會受到字體大小影響 ###### tags: `CSS` em 是一種相對的的數值單位,是以文字大小為依據,而且會受到上一層父層容器的「文字大小」影響。 [Codepen範例](https://codepen.io/J_u_d_y/pen/xxyXGxJ?editors=1100) 1 em 預設是 16px,但隨著容器包裹越多層,內層的文字大小會以上一層容器的大小,去計算尺寸倍率來得出最後的文字實際大小。 ![](https://i.imgur.com/vzSejOL.png) ## 直接子層的文字尺寸算法 最外層的文字是 1em,所以身為直接子層的 01文字設定 `font-size:1em`時,大小會跟外層相同。 而 01、02、03 文字位階相同,所以計算尺寸時都是以自己的 em 尺寸再去乘以最外層 1em。 例如: - 02 文字`font-size: 1.5em`,實際尺寸就會是 `1.5 * 1 *16` = 24px。 - 03 文字同位階,同樣 `font-size: 1.5em` = 24px。 ## 子層再多包一層的文字尺寸算法 但是 04 和 05 被包裹在 03 裡面,所以他們的上一層是以 03 的尺寸為依據, 04 文字雖然設定 `font-size: 1em` ,實際文字大小計算: (自己的em)`*` (03文字尺寸) = `1*(1.5 * 1 *16)`= 24px 05 文字則是 = `3*(1.5 * 1 *16)`= 72px ## margin 若用 em 當作單位,實際距離也會受到文字大小影響 以上圖為例,全部元素都一樣設定 `margin-top: 1em` 但實際呈現出來,02文字的上距,卻比05文字的上距小。 用 em 指定距離時,會以字體大小為依據,例如: - 「02文字」實際文字大小是 24px,設定 `margin-top: 1em` 換算後實際的上距會是 `margin-top: 24px`。 - 「05文字」實際文字大小是 72px,設定 `margin-top: 1em` 換算後實際的上距會是 `margin-top: 72px` 。 ### `em`單位的倍率特性,如果元素結構上包了很多層,使用時就要比較注意是以何者為計算依據。 參考文章: [六角學院:實際展示 EM 與 REM 的差異](https://www.hexschool.com/2016/01/02/2016-08-08-em-vs-rem/)