CSS 釋疑


font-family:通用字型

Serif襯線體,例如 Times New Roman、細明體。
Sans-serif無襯線體,例如 Arial、正黑體。1
Monospace等寬體,例如 Courier。
Cursive手寫體,例如 Comic Sans。
Fantasy藝術體,例如 Impact。

position

position 樣式有四種設定值:static、relative、absolute、fixed。


static(靜態的)

自動將元素排列在前一個元素之後,通常,前一個元素的 display 是 block,就排在下方,是 inline 的話,就擺在後面。

也因為自動排列的關係,所以 position 為 static 的狀況下,設定 left 與 top 是沒有作用的。或者說,所謂靜態的,就是無法動態改變位置的意思。


relative(相對的)

可用 left 與 top 設定位置。以父元素的原點為起點,不過讓人很難理解的是,它先照 static 的規則,將元素排在前一個元素後面,才來就定位置:

position:relative;
left:15px;
top:15px;
position:relative;
left:15px;
top:15px;
position:relative;
left:15px;
top:15px;
position:relative;
left:30px;
top:30px;

第一個線框中,紅、黃兩者都是 (15,15),但後面的黃色區塊被前面的紅色區塊給擠了下來。

第二個線框,黃色區塊改為 (30,30),如果扣除紅色區塊的話,黃色區塊確實是 (30,30) 沒錯,只是被紅色區塊給卡了下來。


absolute(絕對的)

可用 left 與 top 設定位置,起點為父元素的原點,而且這次沒有後一個元素要被前一個元素卡下來的問題。

例如,紅色區塊是 (15,15),黃色區塊是 (30,30) 的話,顯示結果如下:

position:absolute;
left:15px;
top:15px;
position:absolute;
left:30px;
top:30px;

兩者都是 (15,15) 的話,表示位置相同,因此疊在一起:

position:absolute;
left:15px;
top:15px;
position:absolute;
left:15px;
top:15px;

由於 absolute 好理解多了,所以請再跟 relative 比較看看,absolute 要與 relative 結果一致的話,left 與 top 分別是:

position:absolute;
left:15px;
top:15px;
position:absolute;
left:15px;
top:95px;
position:absolute;
left:15px;
top:15px;
position:absolute;
left:30px;
top:110px;

藉由 absolute 這直覺的 (left,top) 位置設定,了解到 relative 那詭異的位置排列模式,原來只是被前一個元素給卡了下來而已;如果扣除前一個元素的話,確實是照所指定的 (left,top) 距離就定位置。


fixed(固定的)

可用 left 與 top 設定位置,起點以視野所見的頁面最左上角為原點,而且拉動捲軸會自動調整位置,永遠固定在所見頁面的那個位置。

如果你無法體會什麼是固定位置的話,請按我一下,然後上下移動捲動看看。


Flexbox

設定區塊的排列行為,這樣式能設定更多細節,像是由下往上排列,排列的時候按劃分的占用格數由右往左堆上去,堆的時候不填滿而是按各自大小散落分布,為不同螢幕解析度的手機設計網頁時,是最好的解決方案!

這樣式分為兩部分:外部的容器(container)、內部的項目(items)。


Flex container

displayflex|inline-flex
flex-directionrow|row-reverse|column|column-reverse (排列方向)
flex-wrapnowrap|wrap|wrap-reverse (換行方式)
flex-flowflex-direction flex-wrap
justify-contentflex-start|flex-end|center|space-between|space-around (水平對齊)
align-itemsflex-start|flex-end|center|baseline|stretch (垂直對齊)
align-contentflex-start|flex-end|center|space-between|space-around|stretch (多行對齊)

Flex items

order[n] (順序)
flex-grow[n=0] (伸展量)
flex-shrink[n=1] (‎收縮量)
flex-basis[px] (初始長度)
flexflex-grow flex-shrink flex-basis
align-selfauto|stretch|center|flex-start|flex-end|baseline|initial|inherit (依元件對齊)

Grid

用劃分格線的方式,來布置區塊。比起只能一行一行照指定順序排列下去的 Flexbox,Grid 能夠跨格,一次占用多行,產生更多樣的布局。

先將容器設定為 display:grid,然後搭配 grid-template-columns 設定水平格線、grid-template-rows 設定垂直格線。


依占比填滿格數

1:1:1 columns

1 2 3 4 5

像這樣重複 3 次 1fr,可以改寫成 repeat(3,1fr)

1:2 columns

1 2 3 4 5

1:2 columns / 1:2:3 rows

1 2 3 4 5


依尺寸劃格數

1 2 3 4 5


格子的最小尺寸和最大尺寸

1 22 333 4444 55555


依格線劃格數

1 2 3 4 5

可以想像每個格子有框線,然後由左往右和由上往下,數第幾條線到第幾條線,來設定 x-x-start 和 x-x-end。


間距

1 2 3 4 5