CSS的7種新型長度單位

介紹一些你們之前可能很少見過CSS長度單位。他們每個都是度量的單位,類似 pixel 和 em 這樣的。

rem

em被定義為相對於當前對象內文本的字體大小。如果你給body設置了font-size字體大小,那麼body的任何子元素的1em就是等於body設置的font-size。

如果你用em一層一層級聯得定義嵌套元素的字體大小又會花生什麼事情呢?在下面這一小段代碼里我們應用了和上面一樣一樣的CSS,每一個div都從它上一級父元素繼承了字體大小,並且逐漸得增加。

雖然在某些地方這正是我們想要的,但是通常情況下我們還是希望就依賴單一的相對度量單位就好。這時候嘛,我們就可以使用 rem 了。 『r』是「root」的縮寫,意思就是1rem等於根元素的字體大小;大部分情況下,根元素就是<html>元素了。

Advertisements

html { font-size: 14px;}div { font-size: 1.2rem;}

這樣在上面的那三個嵌套的div的字體大小都是 1.2*14px = 16.8px 了。

適用於網格布局

Rems 不僅僅只是在設置字體大小上很方便。再炒個栗子,你可以用基於html根元素字體大小的rem作為整個網格布局或者UI庫的大小單位,然後在其他特定的地方用em單位。這樣將會給你帶來更多的字體大小和伸縮的可控性,

.container {width: 70rem; // 70 * 14px = 980px}

概念上來說,這個方法的思想就是讓你的界面根據你的內容進行縮放。但是,這樣做並不是對所有的情況都有意義。

Advertisements

vh and vw

響應式Web設計離不開百分比。但是,CSS百分比並不是所有的問題的最佳解決方案。CSS的寬度是相對於包含它的最近的父元素的寬度的。但是如果你就想用視口(viewpoint)的寬度或者高度,而不是父元素的,那該腫么辦? 這就是 vhvw 單位為我們提供的。

1vh 等於1/100的視口高度。栗子:瀏覽器高度900px, 1 vh = 900px/100 = 9 px。同理,如果視口寬度未750, 1vw = 750px/100 = 7.5 px。

可以想象到的,他們有很多很多的用途。比如,我們用很簡單的方法只用一行CSS代碼就實現同屏幕等高的框。

.slide { height: 100vh;}

假設你要來一個和屏幕同寬的標題,你只要設置這個標題的font-size的單位為vm,那標題的字體大小就會自動根據瀏覽器的寬度進行縮放,以達到字體和viewport大小同步的效果,有木有?!

vmin and vmax

vhvm 依據於視口的高度和寬度,相對的,vminvmax則關於視口高度和寬度兩者的最小或者最大值。比如,瀏覽器的寬度設置為1100px,高度設置為700px, 1vmin = 1px, 1vmax = 11px。如果寬度設置為800px,高度設置為1080px, 1vmin就等於8px, 1vmax則未10.8px。

那麼問題來了,我們應該在什麼場景下使用這兩個單位呢?

假設有一個元素,你需要讓它始終在屏幕上可見。只要對其高度和寬度使用vmin單位,並賦予其低於100的值就可以做到了。再來個栗子,可以這樣定義一個至少有兩個邊觸摸到屏幕的方形:

.box { height: 100vmin; width: 100vmin;}

如果你要讓這個方形框框始終鋪滿整個視口的可見區域(四邊始終觸摸到屏幕的四邊)

.box { height: 100vmax; width: 100vmax;}

結合使用這些單位可以為我們提供一個新穎有意思的方式來靈活地利用我們視口的大小。

ex and ch

exch 單位,類似於 emrem, 依賴於當前的字體和字體大小。 但是,不同的是,這兩貨是基於字體的度量單位,依賴於設定的字體。

ch 單位通常被定義為數字0的寬度。你可以在Eric Meyers的博客里找到關於它的一些有意思的討論,例如將一個等寬字體的字母」N」的寬度設置為40ch,那麼在另一種類型的字體里它卻可以包含40個字母。這個單位的傳統用途主要是盲文的排版,但是除此之外,肯定還有可以應用他的地方。

ex 定義為當前字體的小寫x字母的高度或者 1/2 的 1em。 很多時候,它是字體的中間標誌。

x-height; the height of the lower case x

這些單位有很多用途,大部分用於版式的微調。比方說,sup 元素(上角文字標),可以通過position:relative;bottom: 1ex;實現 。類似的方法,你可以實現一個下角文字標。瀏覽器默認的方式是利用

上標和下標特定垂直對齊規則,但是如果你想更細粒度更精確得控制,你可以像下面這樣做:

sup { position: relative; bottom: 1ex;}sub { position: relative; bottom: -1ex;}

-------------------------------------------

www.qietu.com 切圖網,專註於前端開發。

qq:6135833 前端學習諮詢

Advertisements

你可能會喜歡