CSS 逻辑属性与属性值模块 第一版

W3C 工作草案,

查看更多关于本文件的信息
本版本:
https://www.w3.org/TR/2025/WD-css-logical-1-20251204/
最新发布版本:
https://www.w3.org/TR/css-logical-1/
编辑草案:
https://drafts.csswg.org/css-logical-1/
历史版本:
历史记录:
https://www.w3.org/standards/history/css-logical-1/
反馈:
CSSWG 问题库
规范内标注
编辑者:
(Microsoft)
Elika J. Etemad / fantasai (Apple)
为本规范建议编辑修改:
GitHub 编辑页面
测试套件:
https://wpt.fyi/results/css/css-logical/

摘要

本模块引入了逻辑属性与属性值,使内容作者能够通过逻辑(而非物理)方向和尺寸映射来控制布局。本模块为[CSS2]中定义的特性定义了逻辑属性与属性值。这些属性是其对应物理属性的与书写模式相关的等价属性。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等媒介上渲染效果的语言。

本文档状态

本节描述了本文档在发布时的状态。 当前W3C出版物列表及最新本技术报告版本可见 W3C 标准与草案索引。

本文档由CSS工作组 作为推荐规范进程下的 工作草案 发布。 作为工作草案发布不代表 W3C 及其成员的认可。

本文档为草稿文档 并可随时被更新、替换或废弃。 不适合作为正式引用文献,仅作工作进展之用。

请通过 在 GitHub 提交 issue(推荐),并在标题中注明规范代码 "css-logical",如: “[css-logical] …评论摘要…”。 所有 issue 和评论都会存档。 也可发送反馈至(有存档)公共邮件列表 www-style@w3.org

本文档受 2025年8月18日 W3C 过程文档 约束。

本文档由遵循 W3C 专利政策 的小组制定。 W3C 维护了一份与小组成果相关的专利公开公示名单; 该页面还包括专利公开的相关说明。 若个人知悉某专利且其本人认为包含必要声明,须依据 W3C 专利政策第 6 节 进行披露。

1. 引言

注意:有关写作模式的介绍请参见 [css-writing-modes-4]; 本模块假定已了解其相关术语。

由于不同的书写体系有不同的书写方向, 存在多种写作模式: 从左到右,从上到下; 从右到左,从上到下; 从下到上,从右到左; 等等。 像页面或行的“开始”这样的逻辑概念,会与如“行顶部”或“段落左侧”这样的物理概念有不同的映射方式。 布局的某些方面实际上是与书写方向相关的, 因此当页面转换为不同体系时会发生变化; 也有些本质上是相对于页面的物理朝向。

例如, 在英语中,列表、标题和段落通常左对齐; 但实际上它们是start对齐的,因为在阿拉伯语中这些结构则是右对齐的, 多语言文档就需要兼顾不同的书写体系。

下例说明用逻辑语法可以帮助你编写适用于不同书写体系的代码:

下方代码在兼容浏览器中的渲染效果
<blockquote dir="auto">Quotation in English</blockquote>
<blockquote dir="auto">اقتباس في العربية</blockquote>
blockquote {
    text-align: start; /* 拉丁文字左对齐,阿拉伯语右对齐 */
    margin-inline-start: 0px; /* 拉丁文字为margin-left,阿拉伯语为margin-right */
    border-inline-start: 5px solid gray; /* 拉丁文字为border-left,阿拉伯语为border-right */
    padding-inline-start: 5px; /* 拉丁文字为padding-left,阿拉伯语为padding-right */
}

有些场景既需要逻辑属性,也需要物理属性。例如页面上按钮的阴影要保证一致, 那么其偏移要基于视觉层面和物理方向来决定,不应随书写体系变化。

由于CSS最初只以物理坐标作为定位控制, 本模块引入文本流向相关的等效属性, 使CSS样式声明可以用流向相关术语来表达。 本规范定义了等效属性的映射和级联关系, 一些等价于CSS2.1的新属性和值, 以及用于推导这些语法的基本原则。 未来的CSS规范预计会在属性和值的定义中包含两套坐标, 因此本模块不再持续跟踪新增CSS特性的流向相关变体。

CSS Writing Modes抽象盒模型术语 一节 定义了流向相关和物理术语之间的映射方式。 这种映射关系依赖于 used valueswriting-modedirectiontext-orientation, 用来控制流向相关关键词和属性的解释方式。

英文常规排版中物理术语与流向相关术语的对应关系
垂直中文排版中物理术语与流向相关术语的对应关系

注意:由于它与 text-orientation: upright 互动, useddirection 取决于 计算值 writing-modetext-orientation

测试

逻辑属性通用测试


不稳定事项 由于实现本模块部分内容实际上是 Web 浏览器实现CSS Writing Modes 的前提条件(以便正确实现 HTML 默认样式), CSSWG 已决议 § 2 流向相关属性值:block-start、block-end、inline-start、inline-end§ 4 流向相关盒模型属性 中的必备特性允许实现和发布。 (更多背景见 FPWD 公告。)

但仍有若干重要开放问题:

对上述开放问题欢迎评论、建议与用例提交到 Github,或推特 @csswg、邮件 www-style@w3.org。

1.1. 属性值定义

本规范遵循 CSS2中属性定义规范CSS 属性值定义语法 来描述 [CSS-VALUES-3]。 本规范未定义的属性值类型详见 CSS Values & Units [CSS-VALUES-3]。 与其他 CSS 模块组合时,这些值类型的定义可能被扩展。

除各自定义的专有属性值外, 本规范中所有属性 也都接受CSS全局关键字作为属性值。 为便于阅读,本文未再次显示全局关键字。

2. 流向相关属性值:block-startblock-endinline-startinline-end

许多 CSS 属性历史上支持方向关键字值, 即物理属性值(如 topbottomleftright)。 本规范新增了方向关键字值的流向相关形式:block-startblock-endinline-startinline-end

属性的作用可能是一维也可能是二维。 若上下文只限于其中一维, 则流向相关关键字可简写 (为 startend)。

本规范重新定义 CSS2 级属性以同时接受流向相关方向关键字。 这些值可替代对应的物理值使用。 对于允许多个关键字属性, 不允许将流向相关值和物理值混用 (除非日后规范另有说明)。

注意: 新版CSS规范往往首选或补充流向相关行相关属性值, 而非仅有物理值。 一般来说,这些相对值的映射将采用包含块的writing-mode,如果影响的是自身,则用盒子的writing-mode。 无论采用哪种映射,应在规范中明确指出使用何种writing-mode。

2.1. caption-side 属性的逻辑属性值

名称: caption-side
新值: inline-start | inline-end
计算值: 指定关键字
测试

仅当实现支持 leftright 关键字的 caption-side 时,上述两个新值才需要添加。 leftright 本身被定义为行相关关键字。

已有的 topbottom 值现被指定为对应 block-startblock-end 边。

此属性的映射采用 caption 包含块的writing-mode(即 表包装盒)决定。

2.2. floatclear 属性的流向相关属性值

名称: float, clear
新值: inline-start | inline-end
计算值: 指定关键字
测试

这些属性的映射以元素的包含块的 writing-mode为准。

注意:这些属性在CSS2中是一维的, 但计划扩展为二维, 因此采用未简化的流向相关关键字。

2.3. text-align 属性的流向相关属性值

名称: text-align
新值: start | end
计算值: 指定关键字

这些属性值在 [css-text-3] 中有规范性定义。

3. 流向相关的页面分类

在 CSS 中,所有页面都被用户代理分类为左页或右页。[CSS2] 但在跨页布局中,哪一页排在最前,取决于页面进程是左到右还是右到左。

为便于将分页控制赋予跨页布局的前侧或后侧页面, 而不是单纯的左侧或右侧, 本模块为 page-break-afterpage-break-before 属性 [CSS2] 引入了以下附加关键字:

recto
在左到右页面进程中等价于 right, 在右到左页面进程中等价于 left
verso
在左到右页面进程中等价于 left, 在右到左页面进程中等价于 right

这些值按指定值计算, 在 [css-break-3] 有进一步定义。

虽然作者通常使用物理定位方式放置页码, 但页眉的内容通常依赖于跨页布局的前后页顺序。 因此也引入了如下流向相关页面选择器以便流向相关的页面选择:

:recto
在左到右页面进程中等价于 ':right', 在右到左页面进程中等价于 ':left'。
:verso
在左到右页面进程中等价于 ':left', 在右到左页面进程中等价于 ':right'。

流向相关页面选择器与 ':left' 和 ':right' 页面选择器具有相同的特异性。

4. 流向相关盒模型属性

许多格式化效果中, 被影响的轴或方向是通过属性名体现的, 而不是其属性值中。 各此类属性的方向或轴映射类型 (流向相关或者物理) 被称为其映射逻辑。 以往所有属性均以物理方式编码; 本规范引入了与CSS2中物理盒模型属性等价的 流向相关新CSS属性。

注意: 新版CSS规范常常优先或者补充性地定义流向相关行相关属性, 而不是只有物理属性

每组并行的流向相关属性与物理属性 (不考虑简写属性) 通过设置盒各个边或各维度的等效样式有关,形成一个逻辑属性组。 例如,padding-* 属性构成一个逻辑属性组margin-* 构成另一个逻辑属性组border-*-style 又构成另一个逻辑属性组, 等等。 (每个长属性最多只能属于一个逻辑属性组。)

在每个逻辑属性组中, 对应的流向相关物理属性 通过元素自身的计算 writing mode 配对。 虽然每个属性的指定值彼此独立, 但配对属性共享计算值。 此共享值通过级联两组声明获得; 即,两个配对属性的计算值 取决于CSS级联中优先级较高声明所对应属性的指定值[CSS-CASCADE-3]

注意,这要求实现保持 CSS 声明块内声明的相对顺序, 而这在以往的 CSS 级联中并非必须。 也要求在级联配对writing-modedirectiontext-orientation属性前先行计算, 以便将同一流向相关物理声明进行联合级联并计算逻辑属性组计算值

例如,给定如下规则:
p {
  margin-inline-start: 1px;
  margin-left: 2px;
  margin-inline-end: 3px;
}

在一个 writing-mode 计算值为 horizontal-tbdirection 计算值为 ltr 的段落中, margin-left 的计算值为 2px, 因为对于此writing-modedirectionmargin-inline-startmargin-left共享一个计算值, 且margin-left声明位于margin-inline-start声明之后。 但如果计算的 directionrtl, 那么margin-left的计算值就是 3px, 因为margin-inline-endmargin-left共享一个计算值, 且margin-inline-end声明位于margin-left之后。

[CSSOM] 以返回计算值为目标的API (如 getComputedStyle()) 必须为该配对的每个单独属性返回相同的值。

注意:对每个流向相关属性映射为其物理等效形式时采用元素自身的writing mode, 可以简化级联计算,并为作者提供直接可理解的模型。 但在许多场景中这也会造成困惑, 例如详见 这次讨论。 作者在更改某元素的writing mode时,可能需要用嵌套元素获得正确的映射效果。

每个属性均从父元素对应属性继承。 例如,即使inline-start margin 在rtl盒中为其右边距,margin-inline-start 仍继承自父元素的 margin-inline-start, 而不管这在父元素上其实就是其左边距。

除非另有规定, 同时涵盖逻辑和物理长属性的简写属性 (如 all 简写属性) 会最后设置其物理长属性。 例如,all: inherit 会把所有 margin 属性都设置为 inherit, 但由于物理长属性最后被设置, 子元素的边距最终会继承父元素的物理长属性。

测试

4.1. 逻辑高度与逻辑宽度: block-size/inline-sizemin-block-size/min-inline-size, 和 max-block-size/max-inline-size 属性

名称: block-sizeinline-size
属性值: <'width'>
初始值: auto
适用元素: heightwidth
继承性:
百分比: 同对应的物理属性
计算值: heightwidth
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: size
测试

这些属性对应于 heightwidth 属性。 属性的映射依赖于元素的 writing-mode

名称: min-block-sizemin-inline-size
属性值: <'min-width'>
初始值: 0
适用元素: heightwidth
继承性:
百分比: 同对应的物理属性
计算值: min-heightmin-width
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: min-size
测试

这些属性分别对应 min-heightmin-width 属性。 映射依赖于元素的 writing-mode

名称: max-block-sizemax-inline-size
属性值: <'max-width'>
初始值: none
适用元素: heightwidth
继承性:
百分比: 同对应的物理属性
计算值: max-heightmax-width
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: max-size
测试

这些属性分别对应 max-heightmax-width 属性。 映射依赖于元素的 writing-mode

4.2. 流向相关的外边距: margin-block-startmargin-block-endmargin-inline-startmargin-inline-end属性,以及margin-blockmargin-inline简写

名称: margin-block-startmargin-block-endmargin-inline-startmargin-inline-end
属性值: <'margin-top'>
初始值: 0
适用元素: margin-top
继承性:
百分比: 同对应的物理属性
计算值: 同对应的 margin-* 属性
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: margin
测试

这些属性对应 margin-topmargin-bottommargin-leftmargin-right 属性。 映射关系依赖于元素的 writing-modedirectiontext-orientation

名称: margin-blockmargin-inline
属性值: <'margin-top'>{1,2}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法
测试

这两个简写属性分别设置margin-block-startmargin-block-end以及margin-inline-startmargin-inline-end。 第一个值表示start边的样式, 第二个值表示end边的样式。 如果只指定一个值,则应用于startend两边。

4.3. 流向相关的定位偏移: inset-block-startinset-block-endinset-inline-startinset-inline-end属性,以及inset-blockinset-inlineinset简写

topleftbottomright 这些物理属性、 它们的inset-block-startinset-block-endinset-inline-startinset-inline-end这些流向相关属性, 以及inset-blockinset-inlineinset这三个属性, 统称为inset 属性

名称: inset-block-startinset-block-endinset-inline-startinset-inline-end
属性值: <'top'>
初始值: auto
适用元素: 定位元素
继承性:
百分比: 同对应的物理属性
计算值: 同对应的toprightbottomleft属性
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: inset
测试

这些属性对应 topbottomleftright 属性。 映射关系依赖于元素的 writing-modedirectiontext-orientation

名称: inset-blockinset-inline
属性值: <'top'>{1,2}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法

这两个简写属性分别设置inset-block-startinset-block-end,以及inset-inline-startinset-inline-end。 第一个值为start边样式, 第二个值为end边样式。 若只给定一个值,则应用于startend两边。

名称: inset
属性值: <'top'>{1,4}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法
测试

简写属性用于设置 toprightbottomleft 等属性。 属性值会按照子属性 的方式分配,类似于 margin

4.4. 流向相关的内边距: padding-block-startpadding-block-endpadding-inline-startpadding-inline-end属性,以及padding-blockpadding-inline简写

名称: padding-block-startpadding-block-endpadding-inline-startpadding-inline-end
属性值: <'padding-top'>
初始值: 0
适用元素: padding-top
继承性:
百分比: 同对应的物理属性
计算值: 同对应的 padding-* 属性
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: padding
测试

这些属性分别对应 padding-toppadding-bottompadding-leftpadding-right 属性。 映射关系依赖于元素的 writing-modedirectiontext-orientation

名称: padding-blockpadding-inline
属性值: <'padding-top'>{1,2}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法
测试

这两个简写属性分别设置padding-block-startpadding-block-end,以及padding-inline-startpadding-inline-end。 第一个值表示start边的样式, 第二个值表示end边的样式。 如果只设置一个值,则该值同时应用于startend两边。

4.5. 流向相关的边框

4.5.1. 流向相关的边框宽度: border-block-start-widthborder-block-end-widthborder-inline-start-widthborder-inline-end-width属性,以及 border-block-widthborder-inline-width简写

名称: border-block-start-widthborder-block-end-widthborder-inline-start-widthborder-inline-end-width
属性值: <'border-top-width'>
初始值: medium
适用元素: border-top-width
继承性:
百分比: 不适用
计算值: 同对应的border-*-width属性
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: border-width
测试

这些属性分别对应 border-top-widthborder-bottom-widthborder-left-widthborder-right-width 属性。 映射关系依赖于元素的writing-modedirectiontext-orientation

名称: border-block-widthborder-inline-width
属性值: <'border-top-width'>{1,2}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法
测试

这两个简写属性分别设置border-block-start-widthborder-block-end-width, 以及border-inline-start-widthborder-inline-end-width。 第一个值表示start边的宽度, 第二个值表示end边的宽度。 如果只设置一个值,则同时应用于startend两边。

4.5.2. 流向相关的边框样式: border-block-start-styleborder-block-end-styleborder-inline-start-styleborder-inline-end-style属性,以及 border-block-styleborder-inline-style简写

名称: border-block-start-styleborder-block-end-styleborder-inline-start-styleborder-inline-end-style
属性值: <'border-top-style'>
初始值: none
适用元素: border-top-style
继承性:
百分比: 不适用
计算值: 同对应的border-*-style属性
规范顺序: 依语法
动画类型: 离散
逻辑属性组: border-style
测试

这些属性分别对应 border-top-styleborder-bottom-styleborder-left-styleborder-right-style 属性。 映射关系依赖于元素的writing-modedirectiontext-orientation

名称: border-block-styleborder-inline-style
属性值: <'border-top-style'>{1,2}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法

这两个简写属性分别设置border-block-start-styleborder-block-end-style, 以及border-inline-start-styleborder-inline-end-style。 第一个值表示start边的样式, 第二个值表示end边的样式。 若只设置一个值,则同时应用于startend两边。

4.5.3. 流向相关的边框颜色: border-block-start-colorborder-block-end-colorborder-inline-start-colorborder-inline-end-color属性,以及 border-block-colorborder-inline-color简写

名称: border-block-start-colorborder-block-end-colorborder-inline-start-colorborder-inline-end-color
属性值: <'border-top-color'>
初始值: currentcolor
适用元素: border-top-color
继承性:
百分比: 不适用
计算值: 同对应的border-*-color属性
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: border-color
测试

这些属性对应 border-top-colorborder-bottom-colorborder-left-colorborder-right-color 属性。 映射关系依赖于元素的writing-modedirectiontext-orientation

名称: border-block-colorborder-inline-color
属性值: <'border-top-color'>{1,2}
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法

这两个简写属性分别设置border-block-start-colorborder-block-end-color, 以及border-inline-start-colorborder-inline-end-color。 第一个值表示start边的颜色, 第二个值表示end边的颜色。 如果只设置一个值,则同时应用于startend两边。

4.5.4. 流向相关的边框简写: border-block-startborder-block-endborder-inline-startborder-inline-end属性,以及 border-blockborder-inline简写

名称: border-block-startborder-block-endborder-inline-startborder-inline-end
属性值: <'border-top-width'> || <'border-top-style'> || <color>
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法
测试

这些属性分别对应 border-topborder-bottomborder-leftborder-right 属性。 映射关系依赖于元素的writing-modedirectiontext-orientation

名称: border-blockborder-inline
属性值: <'border-block-start'>
初始值: 见各自属性
适用元素: 见各自属性
继承性: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 依语法
测试

这两个简写属性分别设置border-block-startborder-block-end,或border-inline-startborder-inline-end, 同时应用于相同的样式。

4.6. 流向相关圆角: border-start-start-radiusborder-start-end-radiusborder-end-start-radiusborder-end-end-radius属性

名称: border-start-start-radiusborder-start-end-radiusborder-end-start-radiusborder-end-end-radius
属性值: <'border-top-left-radius'>
初始值: border-top-left-radius
适用元素: border-top-left-radius
继承性:
百分比: border-top-left-radius
计算值: 同对应的物理border-*-radius属性
规范顺序: 依语法
动画类型: 按计算值类型
逻辑属性组: border-radius
测试

这些属性对应 border-top-left-radiusborder-bottom-left-radiusborder-top-right-radiusborder-bottom-right-radius 属性。 映射逻辑依赖于元素的writing-modedirectiontext-orientation。 第一个start/end表示块轴侧, 第二个表示内联轴侧 (即模式为 'border-block-inline-radius')。

4.7. 四方向简写属性:marginpaddingborder-widthborder-styleborder-color简写

margin、padding 和 border 的简写属性默认为物理属性赋值。 但作者也可以在属性值的开头指定logical关键字, 表示接下来的值映射到流向相关属性,而不是物理属性。

此特性的提议语法目前仍在讨论中,并几乎可以确定将来会与此处描述有所不同。 本节保留在草案中以促进备选方案的讨论, 记录受影响的属性, 并明确说明最终所采用语法切换机制对解释的预期影响。

以下[CSS2]简写属性 支持logical关键字:

这些属性的语法实际上由

<value-type>{1,4}

变为

logical? <value-type>{1,4}

当属性值包含logical关键字时, 后面的值按照如下规则赋给流向相关长属性:

在下例中,这两条规则是等价的:
blockquote {
  margin: logical 1em 2em 3em 4em;
}
blockquote {
  margin-block-start:  1em;
  margin-inline-start: 2em;
  margin-block-end:    3em;
  margin-inline-end:   4em;
}

5. 致谢

Cameron McCormack, David Baron, Oriol Brufau, Shinyu Murakami, Tab Atkins

6. 变更记录

2018年8月27日工作草案以来的变更包括:

早期编辑草案与2017年5月18日首次公开工作草案之间的主要变更包括:

隐私注意事项

目前尚无针对本规范的新隐私注意事项。

安全性注意事项

目前尚无针对本规范的新安全注意事项。

测试

其它规范来源的特性


规范性要求

文档约定

规范性要求通过描述性断言与 RFC 2119 术语的组合来表达。规范性部分中的关键词 “MUST”(必须)、 “MUST NOT”(禁止)、“REQUIRED”(必需)、“SHALL”(应当)、“SHALL NOT”(不应当)、“SHOULD”(应该)、 “SHOULD NOT”(不应该)、“RECOMMENDED”(建议)、“MAY”(可以)和 “OPTIONAL”(可选)应按 RFC 2119 的说明来解释。 但是,为了可读性,本规范中这些词并非全部使用大写字母。

本规范的所有文本均为规范性内容,除非明确标记为非规范性内容、示例和注记。[RFC2119]

本规范中的示例以 “for example(例如)” 引出,或使用 class="example" 与规范性文本区分, 如下所示:

这是一个信息性示例。

信息性注记以 “Note(注意)” 开头,并使用 class="note" 与规范性文本区分,如下所示:

注意,这是一个信息性注记。

建议(Advisements)是规范性章节,以特殊样式呈现以引起特别注意,并使用 <strong class="advisement"> 与其他规范性文本区分, 如下所示: 用户代理(UA)必须提供可访问的替代方案。

测试

与本规范内容相关的测试可以在类似这样的 “Tests” 区块中记录。 此类区块均为非规范性内容。


合规性类别

对本规范的合规性 定义了三类合规性:

样式表
一个 CSS 样式表
渲染器
一个 UA,用于解释样式表的语义并渲染 使用它们的文档。
创作工具
一个 UA,用于编写样式表。

如果样式表中使用本模块定义的语法的所有语句, 按通用 CSS 语法以及本模块中每个特性各自的语法均为有效, 则该样式表符合本规范。

如果渲染器在按相关规范定义解释样式表的基础上, 正确解析并支持本规范定义的所有特性, 并据此渲染文档,则其符合本规范。然而,由于设备限制导致 UA 无法正确渲染文档, 并不使该 UA 不合规。(例如,UA 不要求在单色显示器上渲染颜色。)

如果创作工具所编写的样式表在语法上符合 通用 CSS 语法以及本模块中每个特性的各自语法, 并满足本模块所述样式表的其他合规性要求, 则该创作工具符合本规范。

部分实现

为使作者能够利用前向兼容的解析规则 来指定回退值,CSS 渲染器必须将任何其没有可用支持级别的 规则、属性、属性值、关键字及其他语法构造视为无效(并按需忽略)。 尤其是,用户代理不得在同一多值属性声明中选择性地 忽略不支持的组成值而保留支持的值:如果任何值被视为无效 (不支持的值必须如此),CSS 要求忽略整个声明。

不稳定与专有特性的实现

为避免与未来稳定的 CSS 特性发生冲突, CSSWG 建议在实现 CSS 的不稳定特性和专有扩展遵循最佳实践

非实验性实现

一旦规范进入候选推荐(CR)阶段, 非实验性实现是可行的,且实现者应当 发布任何已达 CR 级别且能够证明按规范正确实现的特性的无前缀实现。

为确立并保持 CSS 在各实现之间的互操作性, CSS 工作组请求非实验性的 CSS 渲染器在发布 任何 CSS 特性的无前缀实现之前,向 W3C 提交实现报告 (如有需要,还包括该实现报告所用的测试用例)。 提交至 W3C 的测试用例将由 CSS 工作组审查与修正。

关于提交测试用例与实现报告的更多信息, 可在 CSS 工作组网站 https://www.w3.org/Style/CSS/Test/ 查阅。 问题请发送至邮件列表 public-css-testsuite@w3.org

索引

本规范定义的术语

引用文献定义的术语

参考文献

规范性参考

[CSS-BACKGROUNDS-3]
Elika Etemad;Brad Kemper。CSS 背景与边框模块 第3级。2024年3月11日。CRD。URL:https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad。CSS 盒模型模块 第4级。2024年8月4日。WD。URL:https://www.w3.org/TR/css-box-4/
[CSS-BREAK-3]
Rossen Atanassov;Elika Etemad。CSS 分片模块 第3级。2018年12月4日。CR。URL:https://www.w3.org/TR/css-break-3/
[CSS-CASCADE-3]
Elika Etemad;Tab Atkins Jr.。CSS 层叠与继承 第3级。2021年2月11日。REC。URL:https://www.w3.org/TR/css-cascade-3/
[CSS-CASCADE-5]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承 第5级。2022年1月13日。CR。URL:https://www.w3.org/TR/css-cascade-5/
[CSS-CASCADE-6]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承 第6级。2024年9月6日。WD。URL:https://www.w3.org/TR/css-cascade-6/
[CSS-COLOR-5]
Chris Lilley;等。CSS 颜色模块 第5级。2025年3月18日。WD。URL:https://www.w3.org/TR/css-color-5/
[CSS-DISPLAY-4]
Elika Etemad;Tab Atkins Jr.。CSS 显示模块 第4级。2025年11月6日。WD。URL:https://www.w3.org/TR/css-display-4/
[CSS-POSITION-3]
Elika Etemad;Tab Atkins Jr.。CSS 定位布局模块 第3级。2025年10月7日。WD。URL:https://www.w3.org/TR/css-position-3/
[CSS-SCROLL-SNAP-1]
Matt Rakow;等。CSS 滚动吸附模块 第1级。2021年3月11日。CR。URL:https://www.w3.org/TR/css-scroll-snap-1/
[CSS-SIZING-3]
Tab Atkins Jr.;Elika Etemad。CSS 盒尺寸模块 第3级。2021年12月17日。WD。URL:https://www.w3.org/TR/css-sizing-3/
[CSS-TABLES-3]
François Remy;Greg Whitworth;David Baron。CSS 表格模块 第3级。2019年7月27日。WD。URL:https://www.w3.org/TR/css-tables-3/
[CSS-TEXT-3]
Elika Etemad;Koji Ishii;Florian Rivoal。CSS 文本模块 第3级。2024年9月30日。CRD。URL:https://www.w3.org/TR/css-text-3/
[CSS-UI-4]
Florian Rivoal。CSS 基础用户界面模块 第4级。2021年3月16日。WD。URL:https://www.w3.org/TR/css-ui-4/
[CSS-VALUES-3]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块 第3级。2024年3月22日。CRD。URL:https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块 第4级。2024年3月12日。WD。URL:https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad;Koji Ishii。CSS 书写模式 第3级。2019年12月10日。REC。URL:https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad;Koji Ishii。CSS 书写模式 第4级。2019年7月30日。CR。URL:https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos;等。层叠样式表2级修订版(CSS 2.1)规范。2011年6月7日。REC。URL:https://www.w3.org/TR/CSS2/
[CSSOM]
Daniel Glazman;Emilio Cobos Álvarez。CSS 对象模型(CSSOM)。2021年8月26日。WD。URL:https://www.w3.org/TR/cssom-1/
[RFC2119]
S. Bradner。在 RFC 中用于指示需求级别的关键词。1997年3月。最佳当前实践。URL:https://datatracker.ietf.org/doc/html/rfc2119

属性索引

名称 属性值 初始值 适用元素 继承 百分比 动画类型 规范顺序 计算值 逻辑属性组
block-size <'width'> auto 同 height 和 width no 同对应的物理属性 按计算值类型 依语法 同 height、width size
border-block <'border-block-start'> 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-block-color <'border-top-color'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-block-end <'border-top-width'> || <'border-top-style'> || <color> 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-block-end-color <'border-top-color'> currentcolor 同 border-top-color no n/a 按计算值类型 依语法 同对应的 border-*-color 属性 border-color
border-block-end-style <'border-top-style'> none 同 border-top-style no n/a 离散 依语法 同对应的 border-*-style 属性 border-style
border-block-end-width <'border-top-width'> medium 同 border-top-width no n/a 按计算值类型 依语法 同对应的 border-*-width 属性 border-width
border-block-start <'border-top-width'> || <'border-top-style'> || <color> 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-block-start-color <'border-top-color'> currentcolor 同 border-top-color no n/a 按计算值类型 依语法 同对应的 border-*-color 属性 border-color
border-block-start-style <'border-top-style'> none 同 border-top-style no n/a 离散 依语法 同对应的 border-*-style 属性 border-style
border-block-start-width <'border-top-width'> medium 同 border-top-width no n/a 按计算值类型 依语法 同对应的 border-*-width 属性 border-width
border-block-style <'border-top-style'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-block-width <'border-top-width'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-end-end-radius <'border-top-left-radius'> 同 border-top-left-radius 同 border-top-left-radius no 同 border-top-left-radius 按计算值类型 依语法 同对应的物理 border-*-radius 属性 border-radius
border-end-start-radius <'border-top-left-radius'> 同 border-top-left-radius 同 border-top-left-radius no 同 border-top-left-radius 按计算值类型 依语法 同对应的物理 border-*-radius 属性 border-radius
border-inline <'border-block-start'> 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-inline-color <'border-top-color'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-inline-end <'border-top-width'> || <'border-top-style'> || <color> 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-inline-end-color <'border-top-color'> currentcolor 同 border-top-color no n/a 按计算值类型 依语法 同对应的 border-*-color 属性 border-color
border-inline-end-style <'border-top-style'> none 同 border-top-style no n/a 离散 依语法 同对应的 border-*-style 属性 border-style
border-inline-end-width <'border-top-width'> medium 同 border-top-width no n/a 按计算值类型 依语法 同对应的 border-*-width 属性 border-width
border-inline-start <'border-top-width'> || <'border-top-style'> || <color> 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-inline-start-color <'border-top-color'> currentcolor 同 border-top-color no n/a 按计算值类型 依语法 同对应的 border-*-color 属性 border-color
border-inline-start-style <'border-top-style'> none 同 border-top-style no n/a 离散 依语法 同对应的 border-*-style 属性 border-style
border-inline-start-width <'border-top-width'> medium 同 border-top-width no n/a 按计算值类型 依语法 同对应的 border-*-width 属性 border-width
border-inline-style <'border-top-style'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-inline-width <'border-top-width'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
border-start-end-radius <'border-top-left-radius'> 同 border-top-left-radius 同 border-top-left-radius no 同 border-top-left-radius 按计算值类型 依语法 同对应的物理 border-*-radius 属性 border-radius
border-start-start-radius <'border-top-left-radius'> 同 border-top-left-radius 同 border-top-left-radius no 同 border-top-left-radius 按计算值类型 依语法 同对应的物理 border-*-radius 属性 border-radius
inline-size <'width'> auto 同 height 和 width no 同对应的物理属性 按计算值类型 依语法 同 height、width size
inset <'top'>{1,4} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
inset-block <'top'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
inset-block-end <'top'> auto 定位元素 no 同对应的物理属性 按计算值类型 依语法 同对应的 top/right/bottom/left 属性 inset
inset-block-start <'top'> auto 定位元素 no 同对应的物理属性 按计算值类型 依语法 同对应的 top/right/bottom/left 属性 inset
inset-inline <'top'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
inset-inline-end <'top'> auto 定位元素 no 同对应的物理属性 按计算值类型 依语法 同对应的 top/right/bottom/left 属性 inset
inset-inline-start <'top'> auto 定位元素 no 同对应的物理属性 按计算值类型 依语法 同对应的 top/right/bottom/left 属性 inset
margin-block <'margin-top'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
margin-block-end <'margin-top'> 0 同 margin-top no 同对应的物理属性 按计算值类型 依语法 同对应的 margin-* 属性 margin
margin-block-start <'margin-top'> 0 同 margin-top no 同对应的物理属性 按计算值类型 依语法 同对应的 margin-* 属性 margin
margin-inline <'margin-top'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
margin-inline-end <'margin-top'> 0 同 margin-top no 同对应的物理属性 按计算值类型 依语法 同对应的 margin-* 属性 margin
margin-inline-start <'margin-top'> 0 同 margin-top no 同对应的物理属性 按计算值类型 依语法 同对应的 margin-* 属性 margin
max-block-size <'max-width'> none 同 height 和 width no 同对应的物理属性 按计算值类型 依语法 同 max-height、max-width max-size
max-inline-size <'max-width'> none 同 height 和 width no 同对应的物理属性 按计算值类型 依语法 同 max-height、max-width max-size
min-block-size <'min-width'> 0 同 height 和 width no 同对应的物理属性 按计算值类型 依语法 同 min-height、min-width min-size
min-inline-size <'min-width'> 0 同 height 和 width no 同对应的物理属性 按计算值类型 依语法 同 min-height、min-width min-size
padding-block <'padding-top'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
padding-block-end <'padding-top'> 0 同 padding-top no 同对应的物理属性 按计算值类型 依语法 同对应的 padding-* 属性 padding
padding-block-start <'padding-top'> 0 同 padding-top no 同对应的物理属性 按计算值类型 依语法 同对应的 padding-* 属性 padding
padding-inline <'padding-top'>{1,2} 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 依语法 见各自属性
padding-inline-end <'padding-top'> 0 同 padding-top no 同对应的物理属性 按计算值类型 依语法 同对应的 padding-* 属性 padding
padding-inline-start <'padding-top'> 0 同 padding-top no 同对应的物理属性 按计算值类型 依语法 同对应的 padding-* 属性 padding

问题索引

不稳定的事项 由于实现本模块的部分内容实际上是为在 Web 上发布 CSS Writing Modes 的实现(以正确实现 HTML 的默认样式)所必需,CSSWG 已决定 § 2 流向相关属性值:block-start、block-end、inline-start、inline-end§ 4 流向相关盒模型属性 中的必备特性允许发布。 (更多背景参见 FPWD 公告。)

然而,仍有一些重要的开放问题:

欢迎就上述问题提交评论、建议和用例。 请在 GitHub 提交,或发推给 @csswg,或发送邮件至 www-style@w3.org。
此特性的提议语法仍在讨论中,几乎可以确定将与此处描述的不同。 本节保留在草案中以促进对替代方案的讨论、 记录受影响的属性, 并明确说明最终选择的任何语法切换机制对解释的预期影响。