宣告與值
可用的 class 形式、原生值解析、單位、重要性與固定 utility。
本頁目錄
class 以已註冊的 utility 或原生宣告開頭,後面可加選擇器、條件與重要性標記。本頁定義這些宣告形式、值解析與拒絕規則。完整教學請見語法教學,原生屬性的意義則請查閱 CSS 參考。
下方具名形式假設已透過 @import '@master/css' 載入預設集。專案定義可以新增或替換 utilities,原生宣告則不需要已註冊的 utility。
可用形式
| 形式 | 範例 | 意義 |
|---|---|---|
| 靜態 utility | flex | 已註冊名稱;此例為 display: flex |
| Token utility | p-md | 已註冊前綴與 token 鍵;此例為 padding: var(--spacing-md) |
| 函式 utility | p(12) | 帶參數的已註冊函式;此例為 padding: calc(12 * 1px) |
| 原生宣告 | (padding:1rem) | 一個完整 CSS 屬性與值 |
這些是不同語法形式,不是可互換的拼寫。靜態、token 與函式 utilities 都可能包含多個宣告:truncate、text-sm 與 grid-cols(2) 都是組合樣式。原生開頭則恰好包含一個宣告,可使用 CSS 簡寫屬性。
產生的 CSS
@layer theme { :root, :host { --spacing-md: 1rem }}@layer utilities { .flex { display: flex } .p-md { padding: var(--spacing-md) } .p\(12\) { padding: calc(12 * 1px) } .\(padding\:1rem\) { padding: 1rem }}每種形式都接受後綴。在 p(12):hover@sm! 中,開頭是 p(12),:hover 是選擇器,@sm 是條件,! 則標記重要性。後綴只影響自己的 class。完整契約請見選擇器與條件。
原生宣告
以完整屬性名稱撰寫 (property:value)。Master CSS 會先讀取括號配對完整的開頭,再解析後綴。單獨名稱後的冒號會開始選擇器:flex:hover 選取已註冊的 flex utility,display:block 並不是 (display:block) 的替代形式。
結束邊界
字串、註解、跳脫、巢狀括號與方括號,以及未加引號的 url() token,都依循 CSS 組成值邊界。引號字串中的 ) 不會關閉開頭:
<span class="(content:')')::before"></span>引號內的括號仍屬於值
第一個右括號是引號內的值文字。下一個才結束宣告;::before 從宣告外開始。
文字說明
- 在 (content:')')::before 中,content 是屬性,')' 是引號包住的值。
- 字串內的 ) 會保留。下一個 ) 才結束原生宣告頭部。
- ::before 後綴指向偽元素,生成的宣告為 content: ')';。
開頭內的其他 CSS 結構也保留各自邊界:
| Class | 值的邊界 |
|---|---|
(width:calc(1px+(2px*3))) | 巢狀括號屬於計算式 |
(grid-template-columns:[start]|1fr|[end]) | 方括號包住 Grid 線名稱 |
(background-image:url(/ | 大括號屬於未加引號的 URL token |
產生的 CSS
@layer utilities { .\(background-image\:url\(\/a\{b\.svg\)\) { background-image:url(/a{b.svg) } .\(grid-template-columns\:\[start\]\|1fr\|\[end\]\) { grid-template-columns: [start] 1fr [end] } .\(width\:calc\(1px\+\(2px\*3\)\)\) { width: calc(1px + (2px * 3)) } .\(content\:\'\)\'\)\:\:before::before { content: ')' }}值內仍適用 CSS 跳脫規則。未加引號的 URL 若含括號,請改用引號 URL 或 CSS 跳脫,維持 token 合法。
無效開頭
格式錯誤的開頭不會產生規則,也不會改以 utility 或其他 class 形式重試。
| 拒絕的 class | 原因 |
|---|---|
(display:block | 缺少結束括號 |
(color:red)(display:block) | 一個 class 內有兩個開頭 |
(color:red;display:block) | 超過一個宣告 |
(display:block;) | 頂層分號,即使出現在結尾也不接受 |
(width:calc(1px]) | 分隔符不配對 |
(width:) | 一般屬性的值為空 |
(color:{red}) | 將大括號區塊作為一般屬性值 |
(width:calc(((…1px…)))) 巢狀 65 層 | 括號巢狀深度超過 64 層 |
自訂屬性可以有空值或配對完整的大括號區塊:(--slot:) 與 (--state:{open}) 都合法。(--slot:!important) 是值為空的重要自訂屬性,(width:!important) 則無效。
輸出與瀏覽器合法性
語法合法的屬性名稱,即使工具沒有列出,也能輸出宣告。原生值不限於預設集,但仍必須是目標瀏覽器中該屬性的合法值。例如 (font-size:48) 會輸出 font-size: 48,不會自動取得 px,而這個非零無單位長度是無效 CSS。請用 (font-size:48px) 表達該長度。(field-sizing:content) 這類原生屬性不需要註冊 utility。
產生的 CSS
@layer utilities { .\(field-sizing\:content\) { field-sizing: content } .\(font-size\:48px\) { font-size: 48px }}Master CSS 會輸出特定相容宣告,例如在 backdrop-filter 旁加入 -webkit-backdrop-filter,但不會加入廠商專屬選擇器,也不會替瀏覽器功能補上 polyfill。請檢查生成 CSS,並透過相容性選擇瀏覽器需求與備援設計。
產生的 CSS
@layer utilities { .\(backdrop-filter\:blur\(16px\)\) { -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px) } .\(background-color\:\#000\)\:\:-webkit-scrollbar::-webkit-scrollbar { background-color: #000 }}值的編碼
空白、字串與底線
即使值包含 CSS 引號,HTML 空白仍會分隔 class。class 值內未加引號的 | 會編碼一個空白;引號字串內的管線符號則維持原樣。逗號與斜線等 CSS 標點應保留在原位。
<div class="(color:rgb(30|60|90/80%)) (content:'a|b')::before"></div>產生的 CSS
@layer utilities { .\(animation-name\:slide_in\) { animation-name: slide_in } .\(color\:rgb\(30\|60\|90\/80\%\)\) { color: rgb(30 60 90/80%) } .\(color\:red\)_a a { color: red } .\(content\:\'a\|b\'\)\:\:before::before { content: 'a|b' }}色彩值會成為 rgb(30 60 90 / 80%),content 字串則保留為 'a|b'。CSS 字串中需要真正空白時,請使用 \000020 這類 CSS 跳脫:(content:'New\000020collection')::before 會產生「New collection」。六位數跳脫可避免 HTML class 中出現終止空白。
原生開頭內的底線是字面字元,例如 slide_in。開頭結束後,_ 會開始後代選擇器:(color:red)_a 指向後代連結。已註冊 utility 名稱不能包含 _,但含底線的 token 鍵仍可透過 var(--name) 參照。
函式與明確變數
CSS 函式仍是原生屬性的值。Master CSS 會正規化 calc(100%-2rem) 中的算術空白,涵蓋最多 64 層巢狀括號與 1px-2px-3px 這類連續減法;更深的內容則保留原樣。計算由瀏覽器執行。Master CSS 不會從單獨字詞推論 token,也不會把 CSS 函式當作 utility 呼叫求值。
產生的 CSS
@layer theme { :root, :host { --color-red-60: oklch(60.94% .2501 29.2) } :root, :host { --color-red: var(--color-red-60) }}@layer utilities { .\(color\:var\(--color-red\)\) { color: var(--color-red) } .\(width\:calc\(100\%-2rem\)\) { width: calc(100% - 2rem) } .\(width\:calc\(100\%-var\(--spacing-md\)\)\) { width: calc(100%-var(--spacing-md)) }}原生色彩值保留原意:(color:red)、(color:#175fe9) 與 (color:rgb(23,95,233)) 都提供 CSS 值,fg-red 則選取主題 token。var() 參照必須明確撰寫;(font-family:mono) 指定的是 CSS 字型家族 mono,不是 --font-mono。token 解析、模式與衍生值請見變數與模式。
數字與單位
原生宣告會保留單位,不會將 rem 轉成像素,也不會依屬性推論單位。小數前的零可以省略:(opacity:.5) 與 (opacity:0.5) 提供相同數值。
| 原生值 | 解讀方式 |
|---|---|
(margin:1rem) | 相對於根元素字級的長度 |
(width:50%) | 依屬性的情境解析百分比 |
(rotate:30deg) | 明確指定的角度 |
(animation-duration:200ms) | 明確指定的時間;.2s 表達相同時長 |
(opacity:.5) | 無單位數值 |
(background-image:image-set(url(a.png)|1x,url(b.png)|2x)) | 以每個 CSS 像素的點數指定原生影像解析度 |
屬性是否接受數字、長度、百分比或其他型別,由 CSS 值與單位規則決定。p(12) 則不同:預設集的函式會明確將引數乘以 1px。
負值
原生負值寫在值內,例如 (margin-top:-2rem)。直接數值引數使用 mt(-8)。負值 token class 則在完整 class 前加上 -:-mt-sm。負值 token 形式需要數值型 token 與支援負值的 utility;padding 不支援負值,因此 -p-sm 會被拒絕。
產生的 CSS
@layer theme { :root, :host { --spacing-sm: .75rem }}@layer utilities { .-mt-sm { margin-top: calc(var(--spacing-sm) * -1) } .mt\(-8\) { margin-top: calc(-8 * 1px) } .\(margin-top\:-2rem\) { margin-top: -2rem }}引數驗證不會重新定義 CSS 屬性對值的限制。
已註冊的 utility
token 名稱
token 前綴由 utility 定義註冊,不會從屬性縮寫推論。p-md 讀取 --spacing-md;fg-red 與 bg-red 都讀取 --color-red,但設定不同屬性。不會自動產生 padding-md 這類完整屬性名稱的對應形式,也沒有 p-4 這類隱含數值尺度:所選命名空間中必須存在該鍵。
靜態名稱優先於拼法相同的 token class。例如,即使專案定義了 --container-full,w-full 仍是 width: 100%;即使存在 --radius-pill,pill 仍是全圓角半徑。名稱相同的靜態 utility 與函式會各自獨立註冊。
完整的前綴與命名空間對應請見 token 家族索引,註冊與取代規則請見 utility 定義。主題 token說明如何定義專案值並設定作用範圍。
固定拼法保留自己的定義
兩個父元素皆寬 240px。自訂 --container-full 為 12rem(根元素字級 16px 時為 192px);w-full 仍是固定的 100% utility。
文字說明
- 設定定義 @theme { --container-full: 12rem; }。預設集已將完整固定名稱 w-full 註冊為 width: 100%。
- 因此 w-full 填滿 240px 的父元素。明確的 (width:var(--container-full)) class 讀取 --container-full,讓第二個區塊寬 192px。
- token 仍可透過明確的 var() 參照使用;定義它不會取代固定的 w-full 註冊。
直接數值
m(4)、b(1) 與 grow(1) 這類預設函式接受一個靜態數字。長度函式輸出乘以 1px 的運算;grow()、shrink() 與 order() 直接傳遞數值,其中 order() 要求整數。零、小數與負值引數是否可用,依各參數宣告的型別決定。
單位與動態運算式不屬於數值引數:m(1px) 與 b(var(--x)) 不會生成規則。這類值請使用 (margin:1rem) 或 (border-width:var(--x))。直接數值提供完整函式清單、參數型別與生成宣告。
組合樣式可協調多個屬性或伴隨值:text-sm 包含字級、行高與字距,animate-fade 則提供動畫簡寫。查找與覆寫規則分別見文字 token與動態效果 token。
自訂屬性
(--name:value) 頭部會在符合選擇器的元素上宣告 CSS 自訂屬性。它可使用與其他宣告相同的選擇器與條件,不會註冊 utility 或主題 token。
<div class="(--progress:40%) (--progress:60%):hover (width:var(--progress))">Progress</div>產生的 CSS
@layer utilities { .\(--progress\:40\%\) { --progress: 40% } .\(width\:var\(--progress\)\) { width: var(--progress) } .\(--progress\:60\%\)\:hover:hover { --progress: 60% }}var(--progress) 使用一般 CSS 解析與繼承規則。未解析的變數或替換後不相容的值,可能讓引用該值的宣告失效;請視需要使用 CSS 變數備援值。語法教學說明如何固定 class,並另外提供動態值。
組合與重要性
分開的 class 表達獨立決策,例如 b(1) b-solid b-line-control。原生簡寫仍受支援;這項撰寫偏好不會改變 CSS 語法。需要相同選擇器與條件的每個 class 都要分別加上後綴。
<ul class="block>li:hover@md (font-size:14px)>li:hover@md text-center>li:hover@md">…</ul>在相同串接層、條件與選擇器中,組合樣式排在單一宣告 utility 之前,接著才是原生宣告。單一宣告 utility 先依屬性家族與涵蓋範圍排序,再依值的來源排序;同一屬性中,token 會排在固定值或直接數值之前。HTML class 的順序不會決定結果:
產生的 CSS
@layer theme { :root, :host { --spacing-md: 1rem }}@layer utilities { .m-md { margin: var(--spacing-md) } .mx-auto { margin-inline: auto } .mt\(0\) { margin-top: calc(0 * 1px) } .p-md { padding: var(--spacing-md) } .p\(12\) { padding: calc(12 * 1px) } .\(padding\:1rem\) { padding: 1rem }}此處原生 padding 排在兩個 utility 之後,而 mt(0) 與 mx-auto 會覆寫 m-md 的對應部分。完整排序契約見串接層。若要選擇元件 class、@utility 組合樣式或 CSS mixin,請見重複使用樣式。
重要性
結尾的 ! 會將該 class 的宣告標為重要。括號值內尾端的原生 !important 效果相同;同時撰寫兩者也只會輸出一次。字串內的 '!important' 仍是內容文字。
產生的 CSS
@layer utilities { .text-center\! { text-align: center !important } .\(color\:red\!important\) { color: red !important } .\(color\:red\!important\)\! { color: red !important } .\(content\:\'\!important\'\)\:\:before::before { content: '!important' }}重要性套用到組合樣式內每個宣告
末端一個 ! 會標記全部三個宣告;省略號略去 token 參照。它不會將鄰近 HTML class 或主題 token 定義標為重要。
文字說明
- text-sm 使用主要 token 與伴隨參照,寫入 font-size、line-height 與 letter-spacing。
- text-sm! 將三個生成宣告都標為 !important。相依宣告仍是一般主題 token。
固定 utility 查找表
預設集提供 292 個固定、單一宣告的 utility,每個只設定表列的屬性:flex-col 不會啟用 flex 排版,b-none 不會重設邊框寬度,pill 也不會設定尺寸。包含多個宣告的 truncate 組合樣式另列於截斷。
| 類別, 宣告 | CSS |
|---|---|
block | display: block |
inline | display: inline |
inline-block | display: inline-block |
flow-root | display: flow-root |
flex | display: flex |
inline-flex | display: inline-flex |
grid | display: grid |
inline-grid | display: inline-grid |
contents | display: contents |
list-item | display: list-item |
table | display: table |
inline-table | display: inline-table |
table-caption | display: table-caption |
table-cell | display: table-cell |
table-column | display: table-column |
table-column-group | display: table-column-group |
table-header-group | display: table-header-group |
table-footer-group | display: table-footer-group |
table-row | display: table-row |
table-row-group | display: table-row-group |
hidden | display: none |
static | position: static |
relative | position: relative |
absolute | position: absolute |
fixed | position: fixed |
sticky | position: sticky |
visible | visibility: visible |
invisible | visibility: hidden |
isolate | isolation: isolate |
box-border | box-sizing: border-box |
box-content | box-sizing: content-box |
italic | font-style: italic |
oblique | font-style: oblique |
uppercase | text-transform: uppercase |
lowercase | text-transform: lowercase |
capitalize | text-transform: capitalize |
underline | text-decoration-line: underline |
overline | text-decoration-line: overline |
line-through | text-decoration-line: line-through |
flex-row | flex-direction: row |
flex-row-reverse | flex-direction: row-reverse |
flex-col | flex-direction: column |
flex-col-reverse | flex-direction: column-reverse |
flex-wrap | flex-wrap: wrap |
flex-nowrap | flex-wrap: nowrap |
flex-wrap-reverse | flex-wrap: wrap-reverse |
items-normal | align-items: normal |
items-start | align-items: start |
items-end | align-items: end |
items-flex-start | align-items: flex-start |
items-flex-end | align-items: flex-end |
items-center | align-items: center |
items-baseline | align-items: baseline |
items-stretch | align-items: stretch |
content-normal | align-content: normal |
content-start | align-content: start |
content-end | align-content: end |
content-flex-start | align-content: flex-start |
content-flex-end | align-content: flex-end |
content-center | align-content: center |
content-baseline | align-content: baseline |
content-stretch | align-content: stretch |
content-between | align-content: space-between |
content-around | align-content: space-around |
content-evenly | align-content: space-evenly |
self-auto | align-self: auto |
self-normal | align-self: normal |
self-start | align-self: start |
self-end | align-self: end |
self-flex-start | align-self: flex-start |
self-flex-end | align-self: flex-end |
self-center | align-self: center |
self-baseline | align-self: baseline |
self-stretch | align-self: stretch |
justify-normal | justify-content: normal |
justify-start | justify-content: start |
justify-end | justify-content: end |
justify-flex-start | justify-content: flex-start |
justify-flex-end | justify-content: flex-end |
justify-center | justify-content: center |
justify-between | justify-content: space-between |
justify-around | justify-content: space-around |
justify-evenly | justify-content: space-evenly |
justify-stretch | justify-content: stretch |
object-cover | object-fit: cover |
object-contain | object-fit: contain |
object-fill | object-fit: fill |
object-none | object-fit: none |
object-scale-down | object-fit: scale-down |
object-center | object-position: center |
object-top | object-position: top |
object-bottom | object-position: bottom |
object-left | object-position: left |
object-right | object-position: right |
m-auto | margin: auto |
mt-auto | margin-top: auto |
mr-auto | margin-right: auto |
mb-auto | margin-bottom: auto |
ml-auto | margin-left: auto |
mx-auto | margin-inline: auto |
mxs-auto | margin-inline-start: auto |
mxe-auto | margin-inline-end: auto |
my-auto | margin-block: auto |
mys-auto | margin-block-start: auto |
mye-auto | margin-block-end: auto |
top-auto | top: auto |
right-auto | right: auto |
bottom-auto | bottom: auto |
left-auto | left: auto |
inset-auto | inset: auto |
ix-auto | inset-inline: auto |
ixs-auto | inset-inline-start: auto |
ixe-auto | inset-inline-end: auto |
iy-auto | inset-block: auto |
iys-auto | inset-block-start: auto |
iye-auto | inset-block-end: auto |
w-auto | width: auto |
h-auto | height: auto |
size-x-auto | inline-size: auto |
size-y-auto | block-size: auto |
min-w-auto | min-width: auto |
min-h-auto | min-height: auto |
min-size-x-auto | min-inline-size: auto |
min-size-y-auto | min-block-size: auto |
basis-auto | flex-basis: auto |
max-w-none | max-width: none |
max-h-none | max-height: none |
max-size-x-none | max-inline-size: none |
max-size-y-none | max-block-size: none |
w-full | width: 100% |
w-fit | width: fit-content |
w-max | width: max-content |
w-min | width: min-content |
h-full | height: 100% |
h-fit | height: fit-content |
h-max | height: max-content |
h-min | height: min-content |
size-x-full | inline-size: 100% |
size-x-fit | inline-size: fit-content |
size-x-max | inline-size: max-content |
size-x-min | inline-size: min-content |
size-y-full | block-size: 100% |
size-y-fit | block-size: fit-content |
size-y-max | block-size: max-content |
size-y-min | block-size: min-content |
min-w-full | min-width: 100% |
min-w-fit | min-width: fit-content |
min-w-max | min-width: max-content |
min-w-min | min-width: min-content |
min-h-full | min-height: 100% |
min-h-fit | min-height: fit-content |
min-h-max | min-height: max-content |
min-h-min | min-height: min-content |
min-size-x-full | min-inline-size: 100% |
min-size-x-fit | min-inline-size: fit-content |
min-size-x-max | min-inline-size: max-content |
min-size-x-min | min-inline-size: min-content |
min-size-y-full | min-block-size: 100% |
min-size-y-fit | min-block-size: fit-content |
min-size-y-max | min-block-size: max-content |
min-size-y-min | min-block-size: min-content |
max-w-full | max-width: 100% |
max-w-fit | max-width: fit-content |
max-w-max | max-width: max-content |
max-w-min | max-width: min-content |
max-h-full | max-height: 100% |
max-h-fit | max-height: fit-content |
max-h-max | max-height: max-content |
max-h-min | max-height: min-content |
max-size-x-full | max-inline-size: 100% |
max-size-x-fit | max-inline-size: fit-content |
max-size-x-max | max-inline-size: max-content |
max-size-x-min | max-inline-size: min-content |
max-size-y-full | max-block-size: 100% |
max-size-y-fit | max-block-size: fit-content |
max-size-y-max | max-block-size: max-content |
max-size-y-min | max-block-size: min-content |
basis-full | flex-basis: 100% |
basis-fit | flex-basis: fit-content |
basis-max | flex-basis: max-content |
basis-min | flex-basis: min-content |
order-first | order: -999999 |
order-last | order: 999999 |
pill | border-radius: calc(infinity*1px) |
b-solid | border-style: solid |
b-dashed | border-style: dashed |
b-dotted | border-style: dotted |
b-double | border-style: double |
b-none | border-style: none |
bt-solid | border-top-style: solid |
bt-dashed | border-top-style: dashed |
bt-dotted | border-top-style: dotted |
bt-double | border-top-style: double |
bt-none | border-top-style: none |
br-solid | border-right-style: solid |
br-dashed | border-right-style: dashed |
br-dotted | border-right-style: dotted |
br-double | border-right-style: double |
br-none | border-right-style: none |
bb-solid | border-bottom-style: solid |
bb-dashed | border-bottom-style: dashed |
bb-dotted | border-bottom-style: dotted |
bb-double | border-bottom-style: double |
bb-none | border-bottom-style: none |
bl-solid | border-left-style: solid |
bl-dashed | border-left-style: dashed |
bl-dotted | border-left-style: dotted |
bl-double | border-left-style: double |
bl-none | border-left-style: none |
bx-solid | border-inline-style: solid |
bx-dashed | border-inline-style: dashed |
bx-dotted | border-inline-style: dotted |
bx-double | border-inline-style: double |
bx-none | border-inline-style: none |
bxs-solid | border-inline-start-style: solid |
bxs-dashed | border-inline-start-style: dashed |
bxs-dotted | border-inline-start-style: dotted |
bxs-double | border-inline-start-style: double |
bxs-none | border-inline-start-style: none |
bxe-solid | border-inline-end-style: solid |
bxe-dashed | border-inline-end-style: dashed |
bxe-dotted | border-inline-end-style: dotted |
bxe-double | border-inline-end-style: double |
bxe-none | border-inline-end-style: none |
by-solid | border-block-style: solid |
by-dashed | border-block-style: dashed |
by-dotted | border-block-style: dotted |
by-double | border-block-style: double |
by-none | border-block-style: none |
bys-solid | border-block-start-style: solid |
bys-dashed | border-block-start-style: dashed |
bys-dotted | border-block-start-style: dotted |
bys-double | border-block-start-style: double |
bys-none | border-block-start-style: none |
bye-solid | border-block-end-style: solid |
bye-dashed | border-block-end-style: dashed |
bye-dotted | border-block-end-style: dotted |
bye-double | border-block-end-style: double |
bye-none | border-block-end-style: none |
outline-solid | outline-style: solid |
outline-dashed | outline-style: dashed |
outline-dotted | outline-style: dotted |
outline-double | outline-style: double |
outline-none | outline-style: none |
text-left | text-align: left |
text-center | text-align: center |
text-right | text-align: right |
text-start | text-align: start |
text-end | text-align: end |
text-justify | text-align: justify |
overflow-auto | overflow: auto |
overflow-hidden | overflow: hidden |
overflow-clip | overflow: clip |
overflow-visible | overflow: visible |
overflow-scroll | overflow: scroll |
overflow-x-auto | overflow-x: auto |
overflow-x-hidden | overflow-x: hidden |
overflow-x-clip | overflow-x: clip |
overflow-x-visible | overflow-x: visible |
overflow-x-scroll | overflow-x: scroll |
overflow-y-auto | overflow-y: auto |
overflow-y-hidden | overflow-y: hidden |
overflow-y-clip | overflow-y: clip |
overflow-y-visible | overflow-y: visible |
overflow-y-scroll | overflow-y: scroll |
whitespace-normal | white-space: normal |
whitespace-nowrap | white-space: nowrap |
whitespace-pre | white-space: pre |
whitespace-pre-wrap | white-space: pre-wrap |
whitespace-pre-line | white-space: pre-line |
whitespace-break-spaces | white-space: break-spaces |
select-none | user-select: none |
select-text | user-select: text |
select-all | user-select: all |
select-auto | user-select: auto |
pointer-none | pointer-events: none |
pointer-auto | pointer-events: auto |
vertical-baseline | vertical-align: baseline |
vertical-top | vertical-align: top |
vertical-middle | vertical-align: middle |
vertical-bottom | vertical-align: bottom |
vertical-text-top | vertical-align: text-top |
vertical-text-bottom | vertical-align: text-bottom |
vertical-sub | vertical-align: sub |
vertical-super | vertical-align: super |
container-inline | container-type: inline-size |
container-size | container-type: size |
container-normal | container-type: normal |
wrap-anywhere | overflow-wrap: anywhere |
wrap-break-word | overflow-wrap: break-word |
wrap-normal | overflow-wrap: normal |
ellipsis | text-overflow: ellipsis |
start 與 end 保留原生語意,與 flex-start、flex-end 不同。邏輯軸中,x 表示行內軸,y 表示區塊軸;t、r、b、l 則是實體邊。固定 utility 接受選擇器、條件與 !,並在使用時輸出 CSS。





