相容性
為新 CSS 功能保留可用的備援方式、驗證瀏覽器行為,並安排第三方樣式在階層串接中的位置。
本頁目錄
Master CSS 產生 CSS;瀏覽器決定能套用哪些屬性、值與選擇器。先建立可用的基礎,在有助改善體驗時加入較新的功能,並檢查既有樣式如何參與階層串接。
這些範例假設已完成安裝,且應用程式已載入 @import '@master/css';。
#確認瀏覽器的基礎需求
預設集使用串接層、OKLCH 色彩與 light-dark() 產生自適應值。為增強功能提供備援方式,不會免除這些基礎需求。請依需支援的瀏覽器,確認瀏覽器基礎需求與廠商前綴。
類別被辨識,不代表保證瀏覽器相容。Master 只會為部分屬性輸出相容前綴,不會為每個新功能提供 polyfill。同樣地,工具回傳 unknown,表示該項檢查尚未驗證此 CSS,並非證明它無效或可安全發布。
#加入功能,保留備援方式
#原生宣告
即使無法自動調整大小,筆記欄位也應維持可編輯。先給予一般 textarea 尺寸並允許垂直調整,再加入 field-sizing: content 作為增強。這個原生屬性可依內容調整控制項大小;最小與最大高度則將它限制在實用範圍內。
field-sizing: content 檢查中……
具備備援方式的筆記欄位
<div class="w-full (max-width:28rem) mx-auto"> <label for="project-note" class="block mb-xs text-sm fg-text-strong">Project notes</label> <textarea id="project-note" name="note" rows="3" class="block w-full p-sm r-md b(1) b-solid b-line-divider bg-surface-inset text-sm fg-text-strong (resize:vertical) (min-height:6rem) (max-height:12rem) outline(2):focus-visible outline-solid:focus-visible outline-offset(3) (field-sizing:content)@supports(field-sizing:content)">Plan the next release. Review the draft. Check the examples. Test with a keyboard. Verify the small screen. Publish when ready.</textarea></div>產生的 CSS
@layer theme { :root, :host { --color-zinc-5: oklch(96.5% .0011 265); --color-zinc-100: oklch(15% .0016 265) } :root, :host { --color-surface-inset: light-dark(var(--color-zinc-5), var(--color-zinc-100)); --color-line-divider: light-dark(oklch(0% 0 none / .12), oklch(100% 0 none / .12)); --color-text-strong: light-dark(var(--color-zinc-100), var(--color-white)) } :root, :host { --color-white: oklch(100% 0 none) } :root, :host { --font-size-sm: .875rem; --text-sm: var(--font-size-sm); --text-sm--line-height: 1.5; --text-sm--letter-spacing: 0; --radius-md: .375rem; --spacing-xs: .5rem; --spacing-sm: .75rem }}@layer utilities { .text-sm { font-size: var(--text-sm); line-height: var(--text-sm--line-height, normal); letter-spacing: var(--text-sm--letter-spacing, normal) } .bg-surface-inset { background-color: var(--color-surface-inset) } .b-line-divider { border-color: var(--color-line-divider) } .r-md { border-radius: var(--radius-md) } .b-solid { border-style: solid } .b\(1\) { border-width: calc(1 * 1px) } .fg-text-strong { color: var(--color-text-strong) } .block { display: block } .mx-auto { margin-inline: auto } .mb-xs { margin-bottom: var(--spacing-xs) } .outline-offset\(3\) { outline-offset: calc(3 * 1px) } .p-sm { padding: var(--spacing-sm) } .w-full { width: 100% } .\(max-height\:12rem\) { max-height: 12rem } .\(max-width\:28rem\) { max-width: 28rem } .\(min-height\:6rem\) { min-height: 6rem } .\(resize\:vertical\) { resize: vertical } .outline-solid\:focus-visible:focus-visible { outline-style: solid } .outline\(2\)\:focus-visible:focus-visible { outline-width: calc(2 * 1px) } @supports (field-sizing:content) { .\(field-sizing\:content\)\@supports\(field-sizing\:content\) { field-sizing: content } }}(field-sizing:content) 提供原生宣告。其 @supports(field-sizing:content) 後綴會將宣告置於 CSS 功能查詢內。查詢不符合時,基礎樣式與一般 textarea 行為仍會保留。
增強功能改變尺寸,不影響筆記存取
筆記、寬度與限制相同。沒有增強功能時欄位可捲動;有增強功能時會先增高,到達最大高度後才捲動。
文字說明
- 共用基礎. 兩個文字區域具有相同六行內容、寬度、內距與高度限制。控制項始終可編輯、可垂直調整大小,且可捲動。
- 查詢不符合. 欄位使用一般初始大小。部分行位於可見區域之外,但仍能透過捲動讀取。
- 查詢符合. field-sizing: content 宣告讓欄位隨筆記增高。最大高度會停止繼續增高;更長的筆記則改為捲動。
預覽會檢查目前瀏覽器的語法支援,也請在目標瀏覽器測試實際編輯行為。若要在支援的瀏覽器檢查備援方式,可暫時移除條件式類別:欄位應停止自動增高,但仍可透過捲動讀取所有文字。這是在隔離增強功能,並非模擬舊瀏覽器。
使用產生的 CSS 檢查輸出的條件。條件記錄了類別語法;原生 CSS 可表達更複雜的功能查詢。
增強功能從可用的備援方式開始
@supports 控制增強功能。備援方式仍是條件之外的一般宣告。
文字說明
兩條分支由同一個基礎出發。不支援的瀏覽器維持原狀;支援的瀏覽器加入條件式增強功能。
#新的選擇器
依選擇器提供的增強功能也適用相同做法。此處 :has(:checked) 會在核取方塊勾選時,讓標籤出現藍色邊框。即使不支援該選擇器,原生核取方塊仍會記錄選擇:
選取狀態與可選的強調效果
<label class="flex items-center gap-sm w-fit mx-auto p-sm r-md b(1) b-solid b-line-divider bg-surface-raised text-sm fg-text-strong b-blue-60:has(:checked)"> <input type="checkbox" name="updates" class="m(0) shrink(0) (accent-color:currentColor)"> <span>Send me release notes</span></label>產生的 CSS
@layer theme { :root, :host { --color-zinc-90: oklch(24.6% .0022 265); --color-zinc-100: oklch(15% .0016 265); --color-blue-60: oklch(51.83% .2687 266.1) } :root, :host { --color-surface-raised: light-dark(var(--color-white), var(--color-zinc-90)); --color-line-divider: light-dark(oklch(0% 0 none / .12), oklch(100% 0 none / .12)); --color-text-strong: light-dark(var(--color-zinc-100), var(--color-white)) } :root, :host { --color-white: oklch(100% 0 none) } :root, :host { --font-size-sm: .875rem; --text-sm: var(--font-size-sm); --text-sm--line-height: 1.5; --text-sm--letter-spacing: 0; --radius-md: .375rem; --spacing-sm: .75rem }}@layer utilities { .text-sm { font-size: var(--text-sm); line-height: var(--text-sm--line-height, normal); letter-spacing: var(--text-sm--letter-spacing, normal) } .items-center { align-items: center } .bg-surface-raised { background-color: var(--color-surface-raised) } .b-line-divider { border-color: var(--color-line-divider) } .r-md { border-radius: var(--radius-md) } .b-solid { border-style: solid } .b\(1\) { border-width: calc(1 * 1px) } .fg-text-strong { color: var(--color-text-strong) } .flex { display: flex } .shrink\(0\) { flex-shrink: 0 } .gap-sm { gap: var(--spacing-sm) } .m\(0\) { margin: calc(0 * 1px) } .mx-auto { margin-inline: auto } .p-sm { padding: var(--spacing-sm) } .w-fit { width: fit-content } .\(accent-color\:currentColor\) { accent-color: currentColor } .b-blue-60\:has\(\:checked\):has(:checked) { border-color: var(--color-blue-60) }}讓基礎樣式獨立於新選擇器。不要讓必要控制項或內容依賴增強功能。選擇器拼法與組合方式,請參閱選擇器。
#將第三方 CSS 納入階層串接
若一般 utility 應覆寫函式庫的一般樣式,請將該 CSS 匯入較早的 defaults 層。在 Master 整合處理的應用程式 CSS 進入點中,於這些匯入之前宣告串接層順序。
若專案已使用 Swiper 核心、導覽與分頁樣式,請透過此進入點載入,不要另外在其他地方匯入未分層副本:
@layer theme, base, defaults, components, utilities;@import 'swiper/css' layer(defaults);@import 'swiper/css/navigation' layer(defaults);@import 'swiper/css/pagination' layer(defaults);@import '@master/css';@layer components { .swiper-slide { background-color: var(--color-surface-raised); }}在輪播既有標記中,一張投影片可保留元件表面,另一張則加入區域 utility:
<div class="swiper-slide">Default surface</div><div class="swiper-slide bg-blue-60 fg-white">Featured slide</div>utilities 中的一般背景宣告會優先於 components,後者又高於 defaults。調整 HTML 類別名稱順序,不會改變結果。
加入更強覆寫前,請先在瀏覽器開發者工具檢查競爭宣告。同一作者來源與脈絡中,一般未分層樣式優先於一般已分層樣式。廠商 CSS 的 !important 宣告也會優先於一般 utility;重要宣告會反轉串接層順序。這些是原生階層串接規則,不是 Master 專屬優先系統。串接層提供逐步診斷方式。
Master 管理的樣式表預設保留原生選擇器。若啟用原生修剪,請在你可控制的樣式表中,透過 @preserve native 保護廠商、CMS 與外部注入的選擇器,或將這些來源排除於修剪範圍。第三方小工具使用的選擇器,不一定會出現在應用程式掃描的標記中。



