# Day 55:CSS 選擇器語法、層疊順序、Normal Flow、Position、Margin Collapsing、HTML/CSS vs JavaScript 除錯差異 **Published by:** [雞蛋糕的前端修煉屋](https://paragraph.com/@gcake/) **Published on:** 2026-02-07 **URL:** https://paragraph.com/@gcake/day-55 ## Content 今日學習主題CSS 選擇器語法與層疊優先級Normal Flow 排版機制Block vs Inline 元素特性Position 定位與 z-index 堆疊Margin Collapsing 規則HTML/CSS vs JavaScript 除錯差異CSS 選擇器與層疊順序從常見陷阱開始問題情境:為什麼 HELLO 配上以下 CSS 會顯示紅色而非藍色?a { color: red; } b { color: blue; } 答案揭曉:因為 b 是元素選擇器,選中的是 標籤(如 粗體),而非 class="b"! developer.mozilla核心概念 1:元素選擇器 vs 類別選擇器元素選擇器(Element Selector)直接使用 HTML 標籤名稱,不需要任何前綴符號: udn.realityripple/* 選取所有 標籤 */ a { color: red; } /* 選取所有

標籤 */ p { font-size: 16px; } 類別選擇器(Class Selector)在 class 名稱前必須加上點(.)符號: developer.mozilla/* 選取所有 class="menu" 的元素 */ .menu { background: blue; } /* 選取所有 class="btn-primary" 的元素 */ .btn-primary { padding: 10px; } 對比表格選擇器類型語法範例選取目標元素選擇器elementnamea, div, pHTML 標籤本身類別選擇器.classname.menu, .btn含有該 class 的元素核心概念 2:HTML class 屬性的多類別語法空格是分隔符號在 HTML 的 class 屬性中,空格用來分隔多個類別名稱: udn.realityripple

Home 類別名稱本身不能有空格單一類別名稱內部不能包含空格,需要多個單字時使用連字符號: 選擇多個類別的 CSS 語法/* 選中所有 class="primary" 的元素 */ .primary { color: red; } /* 選中所有 class="button" 的元素 */ .button { padding: 10px; } /* 選中「同時擁有 primary 和 button」的元素(中間無空格) */ .primary.button { border: 1px solid; } /* 選中「primary 裡面的 button」(中間有空格) */ .primary .button { margin: 5px; } 核心概念 3:CSS 層疊順序(Cascade Order)層疊的運作原理CSS 像油漆工在牆上一層層塗油漆,後塗的會覆蓋先塗的。 developer.mozilla優先權判斷三步驟當多條 CSS 規則衝突時,瀏覽器按照這個順序判斷: developer.mozilla優先級(Specificity):選擇器越精準,優先權越高來源順序(Source Order):優先級相同時,後面的覆蓋前面的重要性(!important):強制覆蓋所有規則(不建議濫用)優先級計算表選擇器類型優先級值範例說明Inline style1-0-0-0
最高ID0-1-0-0#header高Class / 偽類 / 屬性0-0-1-0.menu, :hover, [type="text"]中Element / 偽元素0-0-0-1a, div, ::before低w3schools實例解析 1:優先級相同HELLO .a { color: red; } /* 優先級:0-0-1-0 */ .b { color: blue; } /* 優先級:0-0-1-0 */ 結果:藍色 原因:兩個選擇器優先級相同,.b 在後面所以覆蓋 .a developer.mozilla實例解析 2:優先級不同HELLO a.b { color: blue; } /* 優先級:0-0-1-1 (1個元素+1個類別) */ .a { color: red; } /* 優先級:0-0-1-0 (1個類別) */ 結果:藍色 原因:a.b 優先級較高,不管 CSS 出現順序 developer.mozilla原始題目完整解析題目:HELLO a{ color:red } b{ color:blue } 拆解過程:HTML 解讀:這是一個 標籤,同時擁有兩個類別:a 和 bCSS 解讀:a{ color:red } 是元素選擇器,選中所有 標籤 ✓b{ color:blue } 是元素選擇器,選中所有 標籤(如 粗體) ✗結果:只有第一條規則套用,顯示紅色正確寫法:a{ color:red } /* 選中 標籤 */ .b{ color:blue } /* 選中 class="b" 的元素 */ 這時兩條規則都會套用,.b 優先級較高,最終顯示藍色。易錯提醒1. 類別選擇器忘記加點/* ✗ 錯誤:這是選 標籤,不是 class="menu" */ menu { color: red; } /* ✓ 正確:這才是選 class="menu" */ .menu { color: red; } 2. 混淆元素與類別b { color: blue; } /* 選 標籤 */ .b { color: blue; } /* 選 class="b" */ 3. HTML class 順序不影響結果
CSS 規則的出現順序才會影響層疊結果,HTML 中 class 的順序無關。4. 多類別選擇器的空格差異.a.b { } /* 同時擁有 a 和 b 類別的元素 */ .a .b { } /* a 類別元素裡面的 b 類別元素 */ Normal Flow:元素排列的預設規則**Normal Flow(正常流)**是瀏覽器排版的預設模式,所有「佔空間」的元素都在這個流程裡排隊。在 normal flow 中,元素只有兩種排列方式:block(區塊級) 或 inline(行內級)。 docs3.w3cubBlock 元素:垂直堆疊的排版框排列規則Block 元素會「獨佔一整行」,一個接一個垂直往下堆疊。 udn.realityripple
第一個區塊

第二個區塊

第三個區塊
視覺結果:每個 block 元素自動換行,就算內容很短也會佔滿父元素的寬度。 udn.realityrippleBlock 元素的特性特性說明寬度預設佔滿父元素 100% 寬度高度由內容撐起,可設定 height可設定尺寸width、height 都有效可設定留白margin、padding 四個方向都有效換行前後都會自動換行常見的 Block 元素
- 通用容器

- 段落

~

- 標題