添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Flexbox 的基本寫法
首先要掌握 Flexbox 排版的原則,
就是在 HTML 中要建立稱為「 Flex Container 」的父元素,
並在父元素中插入稱為「 Flex Item 」的子元素。

下面就實際來撰寫,請先在 HTML 中建立一個 < div > 標籤,
將他套用「 container 」類別,當作父元素;
接著在父元素的 < div > 標籤內再插入幾個 < div > 標籤,
套用「 item 」類別,當作子元素。

  • 本例包含一個父元素 div 標籤和四個子元素 div 標籤
  • 在此先建立子元素要套用的類別「.item」
    (為了方便辨識,替「.item」設定藍色背景與留白)
  • 用瀏覽器開啟 html 檔案,會發現四個套用「.item」類別的子元素會如圖從上到下垂直排列。
  • 接著只要做一點小修改,就可以把這些方塊變成水平排列了。
    HTML 不用更改,請在 CSS 檔案中建立父元素要套用的「.container」類別,
    並加上「 display: flex; 」。

  • 修改後,套用「.item」的子元素也會受到父元素的「display: flex;」屬性影響,變成水平排列。
  • 在父元素中描述「 display: flex; 」之後,子元素就會自動並排,
    接下來若在父元素中增加屬性,就可以控制子元素的排列方法,包括改變順序、改變方向、換行等。
    以下將分別示範,請注意大部分都是修改父元素(「 container 」類別)的描述內容。

    用「flex-direction」屬性設定子元素的排列方向
    利用 flex-direction 屬性 可以設定子元素要往哪個方向排列,水平或垂直都可以。

    flex-direction 屬性可以使用的值

    row(預設值)|由左往右排列子元素
    row-reverse|由右往左排列子元素
    column|由上往下排列子元素
    column-reverse|由下往上排列子元素

  • 套用了「row-reverse」的子元素,會從右側視窗開始,由右往左水平排列。
  • 用「flex-wrap」屬性將子元素換行
    使用 flex-wrap 屬性 可以設定讓子元素排成一行或多行。
    排成多行的狀況,是當子元素超過父元素的寬度時,會自動換行變成多行。

    flex-wrap 屬性可設定的值

    nowrap(預設值)|子元素不換行,排列成一行
    wrap|子元素自動換行,由上往下排列
    wrap-reverse|子元素自動換行,由下往上排列

  • 套用「wrap」的設定後,會在排列到父元素的邊緣時,自動排到下一行。
  • 用「justify-content」屬性設定水平對齊方式
    目前子元素都是採用預設的對齊方式,如果父元素有足夠空間,
    可利用 justify-content 屬性 設定水平對齊方式,自行決定要如何對齊。

    justify-content 屬性可以使用的值

    flex-start(預設值)|靠左對齊:從行頭開始排列
    flex-end|靠右對齊:從行尾開始排列
    center|置中對齊
    space-between|左右對齊:把最初與最後的元素放在左右兩端,再以均等間隔排列元素
    space-around|分散對齊:讓所有子元素(包含最初與最後的元素)都以均等的間隔排列

  • 子元素會對齊畫面的右邊。
  • 用「align-items」屬性設定垂直對齊方式
    同樣的,也可以使用 align-items 屬性 ,設定垂直方向的對齊方式。
    元素仍會水平排列,但會改變垂直位置。

    align-item 屬性可以使用的值s

    stretch(預設值)|延伸:會根據父元素高度或內容最多的子元素高度,將所有元素往垂直方向填滿
    flex-start|靠上對齊:從父元素的起始位置開始排列
    flex-end|靠下對齊:從父元素的終點開始排列
    center|置中對齊:對齊垂直置中的位置
    baseline|基線對齊:對齊內容的基線

  • vh 是以 Viewport(瀏覽器顯示區域)的高度為基準的單位。
  • 使用「height」設定高度,高度設定為「100vh」,因此是在整個顯示區域的垂直中央位置排列元素。
  • 用「align-content」屬性設定多行對齊
    當子元素橫跨多行時,可使用 align-content 屬性 設定垂直方向的對齊方式。
    不過要注意,當父元素設定「flex-wrap: nowrap;」屬性(不換行)時,
    子元素會變成一行,則 align-content 的設定就會無效。

    align-content 屬性可以使用的值

    stretch(預設值)|延伸:會根據父元素的高度延伸填滿
    flex-start|靠上對齊:從父元素的起始位置開始排列
    flex-end|靠下對齊:從父元素的終點開始排列
    center|置中對齊:對齊垂直置中的位置
    space-between|上下對齊:把最初與最後的元素放在上下兩端,再以均等間隔排列元素
    space-around|分散對齊:所有的子元素都等距排列

  • 利用「flex-wrap: wrap;」屬性讓方塊自動換行、上下對齊。
  • 活用 CSS 格線的排版方式
    使用 CSS 格線時,和 flexbox 一樣,需要有父元素和子元素。
    要使用稱為「 格線容器(Grid Container) 」的父元素包夾整體,
    然後在父元素中置入要水平排列的「 格線項目(子元素) 」。
    格線項目之間的空隙,則稱為「 格線間距(Grid Gap) 」。

    以下舉個例子,是利用 CSS 格線,把 6 個方塊排成 3 欄 2 行的磚牆式版面。

    Point
    -----
    如果要水平排列元素,必須先用父元素包夾要排列的子元素。
    

    CSS 格線的寫法
    下面就實際來撰寫,方法和 Flexbox 的範例很類似,請先在 HTML 中建立一個 < div > 標籤,
    將他套用「container」類別,當作父元素;
    接著在父元素的 < div > 標籤內再插入六個 < div > 標籤,
    套用「item」類別,當作子元素。

    接著請在 CSS 檔案中建立父元素要套用的格線容器「.container」,
    並且加上一行「display: grid;」屬性,接著就可以編排 CSS 格線版面。
    接著再建立子元素的「.item」類別,在此為了方便辨識,也將子元素加上藍色背景色。

  • 目前只會垂直排列格線項目。
  • 用「grid-template-columns」屬性設定格線項目(子元素)的寬度
    目前子元素是呈現垂直上下排列的狀態,接下來要透過幾個屬性,調整成等距排列的方塊。
    首先要用 grid-template-columns 屬性設定每個格線項目的寬度,
    這樣就會變成水平排列。如果想要指定「在同一行內需要多個格線項目」,
    就用半形空格隔開需要的格線項目數量,並指定每個項目的寬度。
    例如希望一行排列 3 個格線項目、每個項目的寬度為 200px 時,
    就設定為「200px 200px 200px」。

  • 格線項目會水平排列、三個一行
  • 用「gap」屬性設定格線項目(子元素)之間的空隙寬度
    前面的範例有點難辨識範圍,我們可以在格線項目之間再插入空隙,
    方法是利用 gap 屬性設定空隙的寬度。
    指定的寬度只會套用在子元素彼此之間的空隙,
    所有子元素上下左右四邊仍會貼齊父元素格線容器的外框。

  • 在格線項目之間加上了寬度為 10px 的空隙。
  • 認識「fr」:CSS 格線可以使用的單位
    在使用 CSS 格線時,可以使用一個特別的單位「fr」。
    「fr」是指「fraction(比例)」,意思是可以用比例來設定父元素對應子元素的大小。
    假如用「px」設定寬度時,寬度是固定的;
    使用「fr」來設定寬度就可以讓內容依畫面的寬度自動伸縮,非常方便。

  • 用「px」設定時,寬度是固定的,如果畫面較寬,右邊會出現空白。
  • 用「px」設定時,寬度是固定的,如果畫面較窄,右邊會被裁切。
  • 我們重新用「fr」這個單位設定格線項目的寬度,也就是 grid-template-columns 屬性
    只要設定成「1fr 1fr 1fr」,就能以 1:1:1 的比例來顯示格線項目。
    若要改變大小,就調整數值。

  • 設定成「fr」就會依畫面的寬度自動縮放。畫面較寬時,格線項目也會擴大。
  • 畫面寬度變窄時,寬度會自動縮小。
  • 用「grid-template-rows」屬性設定格線項目(子元素)的高度
    使用 grid-template-rows 屬性可以設定格線項目的高度。
    假如有多行,就用半形空格隔開,需要幾列就寫幾次。
    例如要排 2 列、高度皆為 200px 時,請描述為「200px 200px」(把 200px 寫 2 次)。
    設定完成後,就做出磚牆式版面了!

  • 指定了寬和高,就能把相同大小的方塊排成磚牆狀。
  • 了解人的視線如何移動
    使用者瀏覽畫面時,視線流動的方式其實有一定的規則。
    如果能按照視覺動線來安排元素,就可以讓版面發揮更好的效果。

    據說,如果是使用者首次造訪的網站,或是圖片較多的網站,通常會以「Z 字型動線」來瀏覽整個畫面;
    而如果是使用者經常造訪的網站或是資料量較多的網站,則是常用「F 字型動線」來搜尋要看的目標。

    決定資料的優先順序
    利用「Z 字型動線」及「F 字型動線」掌握使用者的視線流動後,
    請先思考這個網頁最想強調的部分,然後再開始排版。
    如果想要傳達的內容太多,或是排版太過雜亂,會無法傳達重點,容易導致使用者跳離。

    思考排版順序
    根據前面的視覺動線,大部分使用者都是從畫面的左上方開始瀏覽網頁的,
    因此左上方就是最重要的位置,建議要放置最重要的資訊,或是最希望使用者馬上注意到的元素。

    至於優先順序較低的元素,只要方在網頁的下方或右側即可。

    Point
    -----
    建議使用 Flexbox 或 CSS 格線排版,就能組合出整齊又富有彈性(可自動調整)的版面。
    

    評估每個元素所佔的面積
    如果是最重要的資訊,只要放大面積就能提高注目度。
    例如在首頁置入較大的主視覺影像。

    反之,如果是不重要的資料,就縮小面積。
    這樣就能完成有強弱對比,容易閱讀的版面。

    Point
    -----
    排版時,要思考優先順序,再安排元素。