如何選擇最好的 CSS 單元來創建更好的網站佈局

已發表: 2018-06-04

CSS 單元是創建站點佈局時要考慮的最基本方面之一。 這些單元將定義您的設計如何在各種設備上進行交互。

但是當涉及到 CSS 單元時,有很多選項可供選擇,而且所有選項都不相同。 CSS 單位不僅限於字體,因此作為前端開發人員,您還應該了解這些單位如何影響佈局。

在本文中,我將向您展示不同的 CSS 單元是如何工作的,以便您可以使用它們來創建更好的佈局和網站設計。

CSS 單元的類型

CSS 單元可以分為以下幾類:

  • 絕對單位
  • 字體相對單位
  • 視口相對單位

絕對單位

某些單位取決於某些絕對值,不受任何屏幕尺寸或字體的影響。 這些單位顯示可能會因不同的屏幕分辨率而異,因為它們取決於屏幕的 DPI(每英寸點數)。

這些單位是:

  • 像素(像素)
  • 以英寸來算)
  • 厘米(厘米)
  • 毫米(毫米)
  • 個人電腦(派卡斯)
  • pt(點)

像素

像素是最常用和接受的單位。 它被認為是許多其他單位的測量基礎。 它提供了各種設備中最一致的結果。

以下示例中的box元素的高度為 150 像素,寬度為 150 像素,並且在所有屏幕尺寸上都將保持相同。

.box{
height:150px;
width:150px;
}

所有其他絕對單位,如英寸(英寸)、厘米(厘米)和毫米(毫米)都是現實世界的測量單位,很少有現實世界的 CSS 用例。

但是,了解它們與像素的關係仍然很好,所以這是它們的比較方式:

  • 1 英寸 = 96 像素
  • 1 厘米 = 37.8 像素
  • 1 毫米 = 3.78 像素

而 pc (picas) 和 pt (points) 與英寸直接相關。

  • 1 英寸 = 72 磅
  • 1 英寸 = 6 個

所有絕對單位之間的關係可以這樣證明:
飛輪css單位佈局單位比較

雷姆

除了像素,所有其他絕對單位幾乎沒有屏幕 CSS 的用例,但由於它們是現實世界的測量單位,它們可以有效地用於打印 CSS。 (如果您想知道像素,它們在打印 CSS 中也可以正常工作!)

字體相對單位

有一些單位取決於文檔的字體大小或字體系列或其父級元素。 這包括以下單位:

  • 時間
  • 雷姆
  • 前任
  • ch

Em是相對長度單位; 它取決於父元素或文檔的字體大小。 默認情況下,如果未定義font-size ,則1em等於16px

Em 從其直接父級的字體大小繼承大小。 比如說,如果一個父元素有font-size:18px ,那麼1em將被測量為所有子元素的18px

這裡我們有一個 div .post和三個孩子, .post-item ,帶有一個標題和一些文本。

<div class="post">
<div class="post-item">
<h2>Title</h2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s
  </div>
<div class="post-item">
<h2>Title</h2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s
  </div>
<div class="post-item">
<h2>Title</h2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s
  </div>
</div>

現在父.post有一個font-size:20px和子元素.post div有自己的font-size:1.2empadding:0.75emmargin:0.75em ,所以計算的填充和邊距將是 18px (20px *1.2em*0.75em)。

html{
font-size:20px;
}

.post{
font-size:20px;
}

.post div{
font-size:1.2em;
}

.post-item{
background:pink;
padding:0.75em;
margin:0.75em;
}

.post-item h2{
font-size:1.5em;
margin:0.5em 0;
}

.post-item p{
margin:0;
font-size: 1em;
}

如您所見,子元素從父元素繼承值。
飛輪 css 單元佈局
使用 em 的好處是,如果您決定按比例更改每個元素的font-sizepaddingmargin ,那麼您只需要更改父元素的字體大小,所有其他元素都會相應地調整。

對於像 px 這樣的絕對單位,情況並非如此,您必須單獨調整每個元素。

但是,如果嵌套元素在 em 中也有自己的font-size ,則這種繼承性質可能有點難以管理。

與之前的演示一樣,如果您將標題和段落包裝在另一個div中的一個子項中,您會看到奇怪的結果。

<div class="post-item">
<div>
<h2>Title</h2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s
  	</div>
</div>

因為post-item有一個嵌套的div ,base size 會從 24px 變成 28.8px (20px*1.2em*1.2em), h2 font-sizemargin會變成 43.2px (20px*1.2em*1.2em) *1.5em) 和 14.4px (20px*1.2em*1.2em*0.5em),分別。
飛輪 css 單元佈局

雷姆

Rem 在這些類型的情況下非常有用,因為它們總是引用根元素的字體大小,而不是父元素。

如果您採用前面的示例並將.post div的單位從 em 更改為 rem,您將看到所有子元素都自行修復。

.post div{
  font-size:1.2rem;
}

一旦單位從 em 更改為 rem,它的基本元素就會從父 div 更改為具有front-size:20px的根元素。

因此,計算將是 20px*1.2rem*value 並且h2p都將具有一致font-sizemargin ,無論它們的父級如何。
飛輪 css 單元佈局

前任

Ex 相對於當前字體的 x 高度,很少使用。 x 高度測量值不一致; 有時它來自字體本身,有時瀏覽器自己計算。

像 em 和 rem 一樣,它取決於字體,但主要區別在於,當您更改font-family時 ex 也會發生變化,而其他兩個則不然。

.box{
width:150ex;
height:150ex;
}

通道

Ch 與 ex 類似,但不依賴於 x 高度; 而不是零 (0) 字符的寬度。 它也隨著font-family改變。

.box{
width:150ch;
height:150ch;
}

視口相對單位

有幾個單位取決於視口的高度和寬度大小,例如:

  • vh(視口高度)
  • vw(視口寬度)
  • vmin(視口最小值)
  • vmax(視口最大值)

Vh

Vh(視口高度)測量為1vh ,等於視口高度的 1%。 這個單元對於創建全高元素非常有用。 Vh 對百分比的反應類似,但不依賴於父元素的高度。

您可以在任何地方使用 vh,但 vh 最常見的用例是製作全高元素。 在此示例中, full-height類將創建一個藍色容器,該容器將是視口的 100% 高度。

.full-height{
height:100vh;
background:blue;
}

大眾

Vw(視口寬度)與 vh 類似,但它考慮的是視口的寬度,而不是高度。 1vw 等於視口寬度的 1%。 如果您想基於排版創建響應式視口,這些單元會非常有用。

在這個例子中, h1font-siz是視口寬度的 6%,所以如果視口寬度為 1000px,則字體大小為 60px,如果視口為 500px,則字體大小為 30px。

h1{
font-size:6vw;
}

最小

Vmin 是根據視口寬度或高度的最小值計算的,以較小者為準。 假設您的視口大小為 1000 像素高 x 800 像素寬。 1vmin將等於 8px。

Vmax

Vmax 的計算與vmin正好相反,其中最大值被視為視口。

就像前面的 1000 像素高 x 800 像素寬的視口示例一樣, 1vmax將等於 10 像素。

現在讓我們探索如何有效地使用vminvmax 。 使用我們之前的示例,假設我們現在想要基於視口大小而不是固定值具有流體填充和邊距。

在此代碼片段中,我將填充設置為3vmax並將邊距設置為1.5vmin

.post-item{
background pink;
padding:3vmax;
margin:1.5vmin;
}

填充和邊距將根據視口大小而變化。
飛輪 css 單元佈局

百分比(%)單位

百分比(%)單位不屬於上述任何特定類別,但可以歸類為相對單位。 它是相對於其父元素的。

百分比主要與元素的高度和寬度相關聯,但可以在任何允許使用 CSS 長度單位的地方使用。

百分比是創建響應式或流暢佈局的最有用的單位之一。 Bootstrap、foundation 和 Bulma 等流行框架使用百分比作為其基本佈局。

這裡full-width類將是其父元素的 100% 寬度。

.full-width{
width: 100%;
}

結論

我已經介紹了幾乎所有可用的 CSS 單元。 根據您的目標,有些目標會比其他目標更適合。 “作為一名前端開發人員,了解你的選擇總是很好的,因為你永遠不知道下一個項目可能需要哪一個。

那麼,您最常使用哪些單位來獲得所需的結果? 在下面的評論部分讓我知道!