很多初學者認為 CSS 分離只是「把 style 寫到單獨 .css 文件,HTML 里用 class 引用」。其實分離的核心是變更隔離:修改樣式不動 HTML,修改結構不改 CSS,兩者低耦合。
<!-- 惡夢級維護 -->
<font color="red" size="5" face="微軟雅黑">標題</font>
<table border="1" cellpadding="5" bgcolor="#f0f0f0">...</table>
<div style="margin-left:20px; background:url(...) repeat-x; border:1px solid red">...</div>
<link rel="stylesheet" href="style.css">
// style.css
.title { color: red; font-size: 24px; font-family: "Microsoft YaHei"; }
.data-table { border-collapse: collapse; background: #f0f0f0; }
.data-table td { padding: 5px; border: 1px solid #ddd; }
優點:複用、集中維護。缺點:HTML 仍需寫 class="title",耦合在「類名」上。
<!-- HTML 表達「是什麼」 -->
<h1 class="page-title">產品介紹</h1>
<table class="product-spec">...</table>
// CSS 表達「長什麼樣」
.page-title { ... }
.product-spec { ... }
類名描述業務語義而非視覺(.red-big-text ❌,.page-title ✅)。換皮膚時只改 CSS,HTML 不動。
「HTML 里總得寫 class/id 引用 CSS,這不算完全分離」
這是誤解。分離 ≠ 零依賴,而是單向依賴:
div > table > tr > td { } 這種強結構選擇器).btn--primary、.card__title--highlighth1 { } → .page-title { }.header .nav .list .item { } → .nav__item { }.grid、.flex)只管佈局,不管顏色邊框:root { --color-primary: #0066cc; --spacing-md: 16px; }真正的分離,是改需求只改一處:換色改變量,換佈局改佈局類,換文案改模板,互不干擾。