Day.4 「CSS 基礎中的基礎!」 —— CSS 盒模型 box-model & 距離單位

Day.4 「CSS 基礎中的基礎!」 —— CSS 盒模型 box-model & 距離單位

「CSS 基礎中的基礎!」 —— CSS 盒模型 box-model & 距離單位

人是視覺動物

當網頁架構用得差不多了,想自己安排布局,會開始想辦法把網頁變得更漂亮。
Google Chrome 很好用,有提供開發者工具給我們除錯,點開 elements 標籤最下面會有個方形的圖案。

盒模型 box-model

這就是我們今天的主角 —— CSS 的基礎盒模型 box-model

什麼是 CSS?

CSS 是 Cascading Style Sheets 的簡寫,中文翻譯為階層式樣式表。
名字內有階層兩個字,顧名思義,他可以使用多個選擇器組合,來達到階層式的管理樣式。

如何使用 CSS?

先教兩個最簡單基本的 CSS 使用方法。
最簡單的 CSS 使用方法

  • <head> 標籤內添加 <style> 標籤,如紅色框,標籤內使用你要套用 CSS 樣式的標籤名,如橘色框,在裡面撰寫屬性值,如紅色框內的橘色框

  • 或著直接在標籤內添加 style 屬性,並在裡面賦予屬性值,如綠色框

盒模型

盒模型能幫助我們更加了解如何操控網頁並進行排版。
每個標籤都有獨立的盒模型,看盒模型我們可以觀察到有三個英文單字,四個顏色

  • 紅色:margin,外邊距,可以想成與下一個標籤的距離
  • 橘色:border,邊框,就是內容的外框
  • 綠色:padding,內邊距,可以想成內容與外框的留白距離
  • 藍色:內容

距離單位

在學習盒模型語法時,必須先了解 CSS 的距離單位。

不管在哪都固定大小的單位

  • px 是絕對單位,為螢幕中最基礎單位,1px 代表 1 個點,如下圖:字的大小 24px,固定在視窗內佔 24 位元的大小
  • rem 是相對單位,每個元素都依據根元素的 px 值乘以倍數,如下圖:字的大小 1.5rem,固定比祖先大 1.5 倍的大小,瀏覽器內建字體原始大小為 16px。

取決於父元素單位大小的單位

  • em 是相對單位,每個子元素都依據父元素的 px 值乘以倍數,如下圖:字的大小 1.5em,比老爸大 1.5 倍。
  • % 是相對單位,每個子元素都依據父元素的 px 值乘以百分比,如下圖:字的大小 150%,比老爸大 150 %。

取決於視窗大小的單位

  • vh 是相對單位,每個元素都依據視窗的(像素高度 / 100)乘以倍數,如下圖:字的大小 5vh,視窗的 1 / 20 的大小。
  • vw 是相對單位,每個元素都依據視窗的(像素寬度 / 100)乘以倍數,如下圖:字的大小 5vw,視窗的 1 / 20 的大小。

圖片為各種單位的示意圖

盒模型通用語法

可以看到盒模型在marginborderpadding,都可以在四個方位設定距離

而設定的語法也很簡單直白,在此用margin做示範:

  • margin-top: 上距,上外邊距
  • margin-right: 右距,右外邊距
  • margin-bottom: 下距,下外邊距
  • margin-left: 左距,左外邊距

一行程式碼簡化的語法

  • margin: 上距 右距 下距 左距,四個值的順序不能錯,分別設定
  • margin: 上距 水平距 下距,三個值的順序不能錯,分別設定左右
  • margin: 垂直距 水平距,兩個值的順序不能錯,分別設定上下左右
  • margin: 距離,一個值你也很難錯,四個方向一起設定

以上 margin 也可以提替成 border 來設定 border 或 padding 來設定 padding

Margin 的特色

因為 Margin 毛最多,所以先來說 Margin,搞定 Margin,後面就輕鬆了!

上下相隔的距離會重疊
上下相隔的距離會重疊

左右相隔的距離不會重疊
左右相隔的距離不會重疊

行內元素的垂直 margin 沒有效果。
行內元素的垂直 margin 沒有效果

可以使用負值,讓元素重疊,注意 在同個層級,右邊會壓過左邊,下面會壓過上面
margin 負值,同層級下,右邊蓋住左邊

父子元素 Margin 外邊距重疊

父元素包著子元素,同時都有使用 margin 時,垂直 margin 會取最大的 margin 值
![垂直 margin 會重疊]](https://i.imgur.com/quUpAkb.png)

但當父元素有設定 padding 或 border 時,就不會重疊了。
設定 padding 或 border ,margin 就不會重疊了

還有屬於不同的 BFC 元素,如:子元素使用 float 浮動元素

什麼是 BFC? BFC 是 Block formatting context 簡寫,簡單的說就是定位的方式改變。想更瞭解可以看MDN 官方文件

這個部分要等到認識更多 CSS 才比較好解釋。
簡單說,就是脫離老爸的控制(脫離文檔流)

什麼是脫離文檔流? 簡單說,原本每個元素都是一個個盒模型,依次排列在網頁上面,看起來像流水般由上而下依序排下來,稱之為「文檔流」。而脫離文檔流,顧名思義就是脫離出來的意思。

Border 的特色

可以設定邊框的寬度樣式顏色
此外還可以使用 border-radius 來設定外圍的圓滑程度。

1
2
border: 寬度 樣式 顏色;
border-radius: 圓滑程度;

寬度、樣式、顏色上網查,比較容易理解易學,就不多加琢磨了。

稍微介紹圓滑程度border-radius

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 這個是沒有字母的最基本型態 */
.border { border: 10px solid #f88; }
/* 當設定一個值,四個角都會依據設定值為半徑做弧度 */
.a { border-radius: 20px; }
/* 當設定為 % 數,會依照內容寬度乘以百分比為半徑做弧度 */
.b { border-radius: 50%; }
/* 當有兩個值,第一個值對應的是左上與右下,第二個值對應的是右上與左下 */
.c { border-radius: 0 50%; }
/* 當有三個值,第一個值對應左上,第二個值對應的是右上與左下,第三個值為右下 */
.d { border-radius: 0 100% 50%; }
/* 當有四個值,就順時針從右上開始分別對應值 */
.e { border-radius: 0 25% 50% 100%; }
/* 當要做特別形狀時,參數會更麻煩 */
.f { border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; }

上面的英文字母分別對應形狀

想做特別的圓弧形?

Padding 的特色

Padding 就相對單純許多。
可以設定內容留白的寬度,與 margin 語法差不多,顏色則取自內容的背景色,背景顏色也是很簡單易學的語法,可以上網查,更進階的漸層背景顏色、多重背景、濾鏡背景,如果未來有時間會補充。
在行內元素狀態下,padding 水平會正常,但垂直就跟 margin 一樣會失效。如圖:
行內元素 垂直 padding 失效
此外值得一提的是,margin 是元素之間的距離,所以不能算在元素內,padding 則是在元素內留白的距離,算是元素的一份子,常見的例子就是按鈕。

想要把元素推到中間置中?

盒模型還有 auto 這個值

除了寫數字值外,我們也可以請瀏覽器幫忙我們計算

  • auto 是讓瀏覽器決定自動調整的距離單位,通常用在水平置中自動推移

添加 auto 的作用

怎麼設定的大小跟我想像的不一樣?

這裡要介紹一個現在很多人都會使用的盒模型語法box-sizing: border-box

以往的網頁切版充滿了數學計算,
因為 border 與 padding 要另外計算,如下圖content-box
寬度總共 border10×2+padding10×2+width100 = 140px
想要把總寬度變 100px 就要往回扣 width

但把 CSS 全域設成 box-sizing: border-box;
就可以設定寬度 100px ,瀏覽器會幫我們計算,
可以更直覺性的設定內容的寬高!
content-box 與 border-box 的差異

至於 widthheight 基礎語法,這個語法也很簡單,主要難是在判斷對的時機使用,這要多做才知道哪些情況要使用。

總結

沒想到如此基礎的 盒模型,也有很多重要觀念,明天將介紹 CSS 如何更精準的套用樣式。