1-5. 網頁排版流程思維總整理
思維總整理
- 網頁的設計:先設計好區塊式的框架 > 接著再擺放圖文內容。
- 這一節介紹:設計框架的方法與選擇的技巧。
第一階段
基本區塊編排法
block
- 區塊預設由上而下排版
- 屬於 block 區塊框架的元素預設由上而下排版。
- 特性 and 分類
-
※這是段落式區塊的預設特性!寬度預設100%,
就算寬度變小,也仍然佔躆段落整個寬度,
左右多出來的部份為 margin。 - 寬高 and 邊界距離
-
- 預設:寬度width: 100%、 高度height: 0。
- 可運用 padding、margin 推動距離。
- padding:框架內部的留白邊界。
- margin:與前後物件的距離。
- 補充說明
- position 預設為 static,表示沒有定位的能力,
不能使用 left、right、top、bottom、z-index屬性。
第二階段
左右分欄浮動法
float
- 左右分欄 Float 浮動排版
- 當區塊需要左右分欄排版時,
傳統的設計就是 float 浮動。 - 特性 and 分類
-
※需要左右排列、或特別需要移到最右側時
- 浮動的分類:
浮動靠左 float:left; 浮動靠右 float:right; - 浮動會有後遺症!
下方物件就算不浮動了,也會往上找空間浮。 - 解決方法一:父管子
如果子元素皆為浮動設計,
或者是最後一個子元素是浮動設計,
那麼由 父元素設定
overflow:hidden; 或 overflow:auto;,
但前提是父元素不能設定固定高度 height。
或者是運用
父元素::after { content:''; display:block; clear:both; } - 解決方法二:弟管兄
當同一層前面物件(兄)是浮動設計,而後面物件(弟)不浮動了, 那麼由後面物件(弟)設定
clear:both; 或是 clear:left; 或是 clear:right;。
- 浮動的分類:
- 寬高 and 邊界距離
-
- 設定浮動之後的物件 (類似浮貼效果)
寬度為 auto 沒有設定,
由內容撐開,或是由CSS指定設計。 - 可運用 padding、margin 推動距離。
- padding:框架內部的留白邊界。
- margin:框架本身外部佔用的外邊界。
- 設定浮動之後的物件 (類似浮貼效果)
- 補充說明
- position 仍然是 static,表示沒有定位的能力,
不能使用 left、right、top、bottom、z-index屬性。
第三階段
特別定位編排法
position
- 精準對位排版 Position
-
- 當物件需要固定在視窗中,希望不因捲動畫面而被移動,設定為 固定性定位 fixed。
- 當物件要相對父層且精準對位時,並且同層物件 (兄弟之間) 的位置互相不影響不推動,設定為 絕對性定位 absolute。
- 當物件要相對父層時,父層也需有 定位能力 ,至於是哪一種定位,則依父層本身的需求判斷,可能是 fixed,可能是 absolute,如果父層本身本來是不需要定位的,那麼就選擇 relative 相對性定位。
- 特性 and 分類
-
【主動式需求】:
- 固定定位 position: fixed; 浮動出來, 固定在畫面中, 不被視窗捲動而移走。 top、bottom、left、right的定位是相對到視窗邊緣的距離, 如果是負值就會超出視窗。
- 絕對定位 position: absolute; 浮動出來, 不影響不推動同一層前後物件的位置, top、bottom、left、right的定位是相對到有定位能力的父層元素邊緣的距離(如果父層沒有位能力, 則依續往外層找到有定位能力的祖先層)。
【被動式需求】:
- 相對定位 position: relative; 不完全浮動出來, 會推動同一層前後物件的位置, 還沒有設定上下左右定位時, 呈現的位置不會改變, top、bottom、left、right的定位是相對於自己, 對於方向感容易混淆者建議這裡就不要設定上下左右了。
- 靜態定位 position: static; 這是網頁元素 position 的預設,是沒有定位能力的,不能使用 left、right、top、bottom、z-index屬性。
【另外還有一個特殊需求】:
- 粘性定位 position: sticky; 一開始沒有固定位置,會隨著畫面移動,移到指定位置時則改為固定定位,但,瀏覽器的支援度並不高,暫時不建議使用。
- 寬高 and 邊界距離
-
- 設定為 fixed、 absolute 定位的物件 (類似完全浮出的效果) 寬度為 auto 沒有設定,由內容撐開,或是由CSS指定設計。
- 可運用 padding、margin 來設定內外保留的邊界距離。
- 但主要是以 left、right、top、bottom、z-index 來定位。
- 補充說明
-
- 要設定 left、right、top、bottom、z-index 時,必須讓物件擁有定位能力,也就是必須設定 position 為 fixed 或 absolute 或 relative。
- w3schools 介紹 position 定位
- RUNOOB 介紹 position 定位
第四階段
彈性框架編排法
flex
- Flex Box 彈性框架的排版
-
- 這不是一個預設的顯示特性,而是必須設定才有的框架。
- Flex Box 是一個彈性、豐富且強大的排版功能。
- 由父層框架來管理子層物件。
- 父層物件擁有控制子元素:方向的管理、水平各種對齊、垂直各種對齊…等排版。
- 當以上傳統排版無法達成目標時,可以考慮這種排版。
- 特性 and 分類
-
※特性:框的等高、垂直對齊、方向控制。
- 父層元素設定 display: flex;
- 父層管理子元素的方向 flex-direction: ... 。
- 父管子的水平對齊 justify-content: ... 。
- 父管子的內容垂直對齊 align-items: ... 。
- 父管子的框架垂直對齊 align-content: ... 。
- 寬高 and 邊界距離
-
- 父層物件的寬度依元素本身的顯示模式 display 來決定。
- 子元素受制於父元素,寬度依設定結果不一樣。
- 補充說明
第五階段
網格佈局編排法
grid
- Grid 網格佈局排版
-
- 這不是一個預設的顯示特性,而是必須設定才有的框架。
- 這是一個基於二維網格智能性的佈局系統。
- 具有強大的功能來控制框及其內容的大小和位置。
- 由父層框架來管理子層物件。
- 這是一個突破性特殊的排版方式。
- 特性 and 分類
-
網格佈局的功能提供了一種機制,可以使用預測的大小調整行為,將佈局的可用空間劃分為列和行。
- 寬高 and 邊界距離
- 網格佈局是CSS的新佈局模型,
具有強大的功能來控制框及其內容的大小和位置。
與以單軸為導向的 “彈性框架編排” 不同,
「網格佈局」針對二維佈局進行了優化。 - 補充說明
-
- 進一步詳細的介紹請前往講義 1-8
- W3C 介紹 grid 網格佈局排版
- w3schools 介紹 grid 網格佈局排版
- RUNOOB 介紹 grid 網格佈局排版
- 但 Grid 是新功能. 瀏覽器的支援度並不高, 參看 Can I Use: [display: grid]、 [grid-area] 。
練習參考範例
【PART-1】依據思維總整理的第一、二階段,由外而內先設計第一層及局部第二三層。
看範例結果
【PART-2】加上思維總整理的第三階段,設計需要特別定位的物件(分析是否需要特別定位)。
看範例結果
【PART-3】加上思維總整理的第四階段,讓設計更彈性、更方便。
看範例結果
【PART-4】Social Platform 社群平台的連結換上 ICON 圖片。 看範例結果
以下是基礎課程中的練習檔案/網站,建議多參考多練習:
單頁基本範例的練習(複習): 參考範例__關於網頁設計(棕色版)、 參考範例__關於網頁設計(藍色版)
網站基本版型風格的練習範例: 參考網站__Timothy Hotel、 參考網站__締思膳食茗茶館 (建議:CH03之後,運用 BS5 來練習)
overflow 的探討
測試1 ---- overflow: visible; ---- 如果有超出的部份則一定顯示 (這是預設)
測試2 ---- overflow: scroll; ---- 如果有超出則水平,垂直皆出現捲軸
測試3 ---- overflow: auto; ---- 如果有超出的部份出現捲軸
測試4 ---- overflow: hidden; ---- 子元素浮動,父元素固定高度, 則超出部份被隱藏
測試5 ---- overflow: hidden; ---- 子元素浮動,父元素沒有固定高度, 則父元素可以配合包含子元素
margin 的三心二意
測試:
以下綠色區域只是 <p> 段落區塊,除了背景顏色只設定「margin: 20px」。
結果:
段落元素區塊的 display : block 並且沒有浮動,margin 是彼此的距離。
段落文字區域段落文字區域段落文字區域段落文字區域段落文字區域
段落文字區域段落文字區域段落文字區域段落文字區域段落文字區域
段落文字區域段落文字區域段落文字區域段落文字區域段落文字區域
測試:
以下第二層淡藍色區域是 <span> 設定
「 display: inline-block; width: 18%; height: 50px; margin: 1%;」。
以下淡粉紅色區域只是 <div> 區塊,除了背景顏色只設定「overflow: hidden」,
以下第二層洋紅色區域是 <div> 區塊,設定
「height: 100px; width: 23%; float: left; margin: 1%;」。
結果:
如果 display 是 inline 或 inline-block 的元素時,margin 是元素外圍強佔的外邊界。
內層區塊的 display 是 block,但設定了浮動,所以 margin 是區塊元素強佔的外邊界。
以下淡粉紅色區域只是 <div> 區塊,除了背景顏色只設定「overflow: hidden」,
以下第二層洋紅色區域是 <div> 區塊,設定 「height: 100px; width: 23%; float: left; margin: 1%;」。
內層區塊的 display 是 block,但設定了浮動,所以 margin 是區塊元素強佔的外邊界。
測試:
以下淡藍色區域只是 <header> 區塊,除了背景顏色沒有任何設定,
深藍色區域是 <div> 區塊,除了顏色只設定「margin: 50px;」
結果:
左右部份沒有問題,但是上下部份好像怪怪的?
內層區塊的 margin 與外層區塊的 margin 似乎產生了合併現象,
感覺上好像是外層區塊將 margin 搶去做了?
深藍色區域是 <div> 區塊,除了顏色只設定「margin: 50px;」
內層區塊的 margin 與外層區塊的 margin 似乎產生了合併現象,
感覺上好像是外層區塊將 margin 搶去做了?
參考:
W3C官網原文說明,這是 margin 的 Collapsing 狀況,
margin 的 Collapsing 狀況只有在沒有浮動的上下區塊框之間才會產生, 浮動時不會, 左右之間也不會。
當同一層第一個子元素設定 margin-top 時,會與上一層(父層)的 margin 區合併。
當同一層最後一個子元素設定 margin-bottom 時,會與上一層(父層)的 margin 區合併。
前提:外層框無 padding 的設定。
margin 的 Collapsing 狀況只有在沒有浮動的上下區塊框之間才會產生, 浮動時不會, 左右之間也不會。
當同一層第一個子元素設定 margin-top 時,會與上一層(父層)的 margin 區合併。
當同一層最後一個子元素設定 margin-bottom 時,會與上一層(父層)的 margin 區合併。
前提:外層框無 padding 的設定。
連續影像之間為什麼有距離
如果原始碼只有 <img> 為什麼左右有距離? 看結果
如果原始碼只有 <img> 為什麼上下有距離? 看結果
認識行高的影響!
認識文字的行高
如下範例,藍色背景區域表示一個 <p> 段落區塊,測試行高的設定。
測試測試測試測試測試 ----- line-height: normal;
測試測試測試測試測試 ----- line-height: 1rem;
測試測試測試測試測試 ----- line-height: 1; 表示 1 倍高
測試測試測試測試測試 ----- line-height: 2rem;
測試測試測試測試測試 ----- line-height: 2; 表示 2 倍高
測試測試測試測試測試 ----- line-height: 5rem;
測試測試測試測試測試 ----- line-height: 5; 表示 5 倍高
同時有圖文時 line-height 行高在哪裡?
測試測試
預設 line-height 就不是 1 , 並且 inline 元素的 vertical-align 是 baseline
測試測試
設定 line-height 為 5 , 並且 inline 元素的 vertical-align 仍然是 baseline
測試測試
設定 line-height 為 normal , 並且 inline 元素的 vertical-align 仍然是 middle 垂直置中