大家好,我是 Eric。
昨天我們介紹完 CSS 中與字型有關的樣式,在了解這些樣式屬性後,其實我們已經看得懂超過一半以上的 Twenty Twenty 佈景主題樣式。
今天,我們再來補上剩下的一部份:空間。
基本語法:
選擇器 {
margin: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
padding: 0;
padding-top: 0;
padding-right: 0;
padding-bottom: 0;
padding-left: 0;
}
記得我們在前一章曾經提到 box-sizing
這項屬性值嗎?事實上,在 HTML 的世界中,每項元素都是以方塊的形式呈現在頁面中。當我們掌握了方塊的基本概念後,我們就能更容易理解 margin
與 padding
。用一句話來概括:
margin 代表框線以外的邊界,padding 則是框線到子層級內容的間距。
在定義 margin
與 padding
時,除了用單一屬性值同時指定四邊的邊界與框線間距外,也可以透過下列方式個別指定:
/** 四邊全指定,順序為上、右、下、左 */
margin: 10px 20px 10px 20px;
padding: 10px 20px 10px 20px;
/** 透過重複的方式,來指定四邊,順序為縱向、橫向 */
margin: 10px 20px; //與上面的樣式相同
padding: 10px 20px; //與上面的樣式相同
除了指定固定數值外,margin
也接受 auto
的屬性值。使用 auto
這個屬性值,會計算該方向邊界的最大值。白話來說,margin-left: auto;
會將元素置右對齊;反之,margin-right: auto
則可以有讓元素置左對齊的效果。以我們公司網站的樣式為例:
.content-wrap {
width: 75%;
margin: 0 auto;
}
代表具有 content-wrap
這個類型 (class) 的元素,其寬度會是視窗的 75% 寬,而元素會置中對齊於上層元素 (預設是整個視窗)。
我們從 Twenty Twenty 的 style.css 中,看到這種樣式廣泛地使用在各種元素中,例如 style.css 的第 57 行。這一行定義整份 HTML 文件與 <body>
的邊界與框線間距,避免部分瀏覽器會預設將 <body>
增加無法預期的間隔:
/* style.css Line 57 */
html,
body {
border: none;
margin: 0;
padding: 0;
}
當我們在將設計師的平面稿,轉換成當代網站設計的 HTML 格式時,我們必須要同時考慮 padding
與 margin
兩種間隔。而這些間隔的細部調校,左右了網站是否有設計感。因此不管是前端工程師,或是設計師,都應該要對這兩種間距有所了解。
除了透過設定邊界與框線間距來製作網站元素的間隔以外,還有一種方式,可以製造兩個元素之間的空間,那就是透過 position
這種定位方式。
屬性樣式 | 屬性值 | 說明
-------+-------+-------
position | relative/absolute/fixed | 定位方式,relative
代表相對位置,與其他同層級元素會互相推擠;absolute
代表絕對位置,會根據上層元素的位置定位;fixed
則會使元素固定於視窗的特定位置上。
top | px/em/rem/% | 元素頂部與上層元素的距離。
left | px/em/rem/% | 元素左側與上層元素的距離。
right | px/em/rem/% | 元素右側與上層元素的距離。
bottom | px/em/rem/% | 元素底部與上層元素的距離。
z-index | {整數} | 如果同時有多個元素使用 absolute
或是 fixed
時,可以決定元素排序的方式。
關於 position
的實作,我們可以參考 style.css 的第 1395 行:
/* style.css Line 1395 */
.overlay-header #site-header {
background: transparent;
margin: 0;
position: absolute;
left: 0;
right: 0;
top: 0;
z-index: 2;
}
.admin-bar.overlay-header #site-header {
top: 32px;
}
這裡的樣式確保在開啟 overlay-header
的情況下,頁首 (#site-header
) 的位置仍維持在頂端。而由於使用者登入後,如果啟用工具列,工具列的高度是 32px 高,因此在 admin-bar
這個類型的頁面底下,#site-header
就會被指定 top: 32px;
,才能確保樣式符合預期。
(仔細想想,其實 position
更適合在版面配置的章節介紹。)
今天說明了在當代網站開發中,相當重要的「間隔」。雖然用了比其他章節還要少的篇幅介紹,但坦白說,在佈景主題開發過程中,最難做好的其實就是如何規劃這些間距。就像前面所說的,間距的細節,體現了設計的精緻度。
如同 HTML 篇章提到 WordPress 對 HTML 的編碼標準,WordPress 對 CSS 也有制定類似的標準。下一章,將會說明 CSS 的編碼標準,同時簡單介紹將 CSS 編碼過程模組化的語言:SCSS/SASS。