兼容性
为新 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 纳入层叠
如果普通工具类应覆盖库的普通样式,请将其 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); }}在轮播现有标记中,一张幻灯片可保留组件表面,另一张则加入局部工具类:
<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 声明也会优先于普通工具类;重要声明会反转层叠层顺序。这些是原生层叠规则,不是 Master 专属的优先级系统。层叠层提供逐步诊断方法。
Master 管理的样式表默认保留原生选择器。如果启用原生裁剪,请在你能控制的样式表中通过 @preserve native 保护厂商、CMS 和外部注入的选择器,或将这些来源排除在裁剪范围之外。第三方小组件使用的选择器未必出现在应用扫描的标记中。



