现代 CSS:级联层、容器查询与逻辑属性
现代 CSS:级联层、容器查询与逻辑属性
这篇笔记还在编辑中,内容可能会继续补充、调整或重写。
现代 CSS 改变了哪些工程选择
预处理器、CSS-in-JS 和框架插件曾用于弥补平台能力不足。随着原生嵌套、Custom Properties、Cascade Layers、Container Queries 和逻辑属性成熟,选型时应先判断浏览器平台是否已经解决问题,再决定是否增加编译或运行时抽象。
Cascade Layers
@layer 显式控制不同样式来源的级联顺序,降低选择器权重竞赛:
@layer reset, tokens, base, components, utilities, overrides;
@layer components {
.button {
background: var(--color-action);
}
}
层级顺序应在入口统一声明。第三方样式、组件样式和工具类进入哪个层,需要成为设计系统契约的一部分。
Container Queries
媒体查询根据视口适配,容器查询根据组件所在空间适配。可复用卡片不再需要知道自己位于侧栏、弹窗还是主内容区:
.task-list {
container-type: inline-size;
}
@container (min-width: 40rem) {
.task-card {
grid-template-columns: 1fr auto;
}
}
容器建立会影响布局和尺寸计算,需通过真实嵌套场景验证,而不是给每个元素都开启容器。
逻辑属性
使用 margin-inline-start、padding-block、inset-inline-end 等逻辑属性,可以让布局适应横向或纵向书写模式及 RTL。它们解决的是方向语义,不只是替换 left 和 right 的代码风格。
渐进增强
通过 Baseline、浏览器兼容数据和真实用户分布确定支持范围。对非关键视觉增强可以使用 @supports 渐进启用;关键交互则要提供可用的降级方案。
实践任务
- 用级联层组织 reset、Token、组件和工具样式。
- 让同一个卡片仅根据容器宽度切换布局。
- 把页面切换为 RTL,修复物理方向属性导致的问题。
- 在最低支持浏览器中验证降级结果。
验收标准
- 级联顺序不依赖不断提高选择器权重
- 组件能在不同容器中独立响应
- RTL 下布局、图标和焦点顺序仍然正确
- 支持范围来自兼容数据和用户数据
- 关闭增强能力后关键任务仍可完成