跳轉到

建立 2025-02-25 更新 2026-09-11

CSS 基本語法與選擇器(Syntax & Selectors)

CSS 規則告訴瀏覽器:選誰、改什麼、改成多少。選錯人,後面寫再漂亮也不會作用在你以為的元素上。

基本語法

選擇器 {
  屬性: ;
}
p {
  color: #c62828;
  font-size: 16px;
}
  • 選擇器 p:所有 <p>
  • 屬性 color:要改的特徵
  • #c62828:改成什麼
  • 每條宣告以 ; 結尾;最後一條分號可省略,但建議都寫

註解

CSS 註解只有 /* ... */,沒有 //。註解不會影響樣式,適合標註暫時關掉的規則。

基本選擇器(Basic Selectors)

選擇器 語法 選到誰
元素(類型) p { } 所有 <p>
類別 class .title { } class="title"
ID #header { } id="header"(一頁應唯一)
群組 h1, h2, h3 { } 多個選擇器共用同一組規則
萬用 * { } 所有元素(少用,效能與可讀性都較差)
<h1 class="title">這是標題</h1>
<p id="intro">這是導言</p>
.title { color: #264de4; }
#intro { background: #fff8e1; }

class 與 id

視覺樣式請優先用 class。id 優先權很高,之後很難覆蓋,也常留給 JavaScript 或頁內錨點。

組合選擇器(Combinators)

選擇器 語法 意義
後代(空格) nav a nav 裡所有 <a>,不論多深
子元素 > ul > li 只選直接子元素
相鄰兄弟 + h1 + p 緊接在 h1 後面的第一個 p
一般兄弟 ~ h1 ~ p h1 後面所有同層 p
<div class="card">
  <p>直接子元素</p>
  <div>
    <p>更裡面的段落</p>
  </div>
</div>
<h1>標題</h1>
<p>標題後第一段</p>
<p>標題後第二段</p>
.card > p { font-weight: 700; }   /* 只影響第一個 p */
h1 + p { font-size: 1.125rem; } /* 導言放大 */
h1 ~ p { color: #444; }

屬性選擇器(Attribute Selectors)

語法 意義
[type] 具有 type 屬性
[type="text"] 值完全等於 text
[class~="note"] class 清單中含 note
[href^="https"] https 開頭
[href$=".pdf"] .pdf 結尾
[href*="docs"] 包含 docs
[class\|="btn"] 等於 btn 或以 btn- 開頭
input[type="email"] { border-color: #264de4; }
a[href$=".pdf"]::after { content: " (PDF)"; }

偽類與偽元素(Pseudo-classes / Pseudo-elements)

完整說明見 偽類及偽元素。這裡只要會選狀態與結構:

寫法 用途
a:hover 滑鼠停在連結上
input:focus-visible 鍵盤聚焦時顯示外框
li:nth-child(2) 父層的第 2 個子元素
p:first-child 身為長子的 p
p::before 在內容前插入產生內容
a:hover { color: #d32f2f; }
li:nth-child(odd) { background: #f5f5f5; }
.badge::before { content: "★ "; }

現代選擇器(建議一併學會)

選擇器 用途
:not(.active) 排除某條件
:is(h1, h2, h3) 分組,優先權取列表中最高者
:where(h1, h2, h3) 同上,但優先權為 0,方便覆蓋
:has(img) 選「裡面有圖片」的元素
article:has(img) {
  display: grid;
  grid-template-columns: 160px 1fr;
  gap: 1rem;
}

:where(.prose) :is(h1, h2, h3) {
  line-height: 1.3;
}

CSS 巢狀(Nesting)

現代瀏覽器已支援在規則裡再寫規則,減少重複選擇器:

.card {
  padding: 1rem;
  &:hover { box-shadow: 0 8px 24px rgb(0 0 0 / 12%); }
  h2 { margin-top: 0; }
}

總結

類型 例子 何時用
基本 p .btn #app 最常用
組合 nav > a h1 + p 依結構縮小範圍
屬性 input[required] 表單、連結類型
狀態 :hover :focus-visible 互動回饋
現代 :is() :has() 少寫重複、依內容選父層

選擇器越精準越好,但不要為了「只選這一個」就堆一長串。優先權細節請接 層疊與優先權