CSS逻辑属性与逻辑值
Icon could not be loaded
5 min read
#writings#CSS#W3C

image.png

逻辑属性与逻辑值规范为 CSS 中的许多属性和值引入了相对于流的对应关系。

为何需要逻辑属性?

传统CSS根据实体尺度属性设置尺寸,例如一个块级盒子具有width、height,元素定位、内外边距、边框等按照方向划分为top、right、bottom、left等等。

实体属性在更改了书写模式(writing-mode)情况下,就无法适用了。如: image.png 把writing-mode改为vertical-rl就会变为: image.png 宽高比显然是不符合的。

如果使用逻辑属性(将width改为inline-size),就会变为: image.png 这样无论何种书写模式都是正常的。

逻辑属性和逻辑规范定义了这些实体值到逻辑值的对应关系,如:

块向与行向尺度

在对齐元素时,诸如弹性盒和网格布局等新的 CSS 布局方法所用的概念是块向(block)和行向(inline),而非右侧(right)和左侧(left),或者上侧(top)和下侧(bottom)。

行向是指在所用的书写模式中,一行文本延伸的方向。因此在从左到右横排的英文文档,或者从右到左横排的阿拉伯文文档中,行向为_水平方向_。若切换至竖排书写模式(如日文文档)则行向变为_竖直方向_,这是因为文本在这种书写模式中竖直延伸。

块向是指另一方向,即块——例如段落——依次显示的方向。在英文和阿拉伯文中,块沿竖直方向依次排列,而块在任意竖排书写模式中沿水平方向依次排列。

下图展示了横排书写模式中的行向和块向: image.png

此图展示了竖排书写模式中的块向与行向: image.png

逻辑属性与实体属性对应关系

尺寸

逻辑属性实体属性
inline-sizewidth
block-sizeheight
min-inline-sizemin-width
min-block-sizemin-height
max-inline-sizemax-width
max-block-sizemax-height

外边距、边框和内边距

逻辑属性实体属性
border-block-endborder-bottom
border-block-end-colorborder-bottom-color
border-block-end-styleborder-bottom-style
border-block-end-widthborder-bottom-width
border-block-startborder-top
border-block-start-colorborder-top-color
border-block-start-styleborder-top-style
border-block-start-widthborder-top-width
border-inline-endborder-right
border-inline-end-colorborder-right-color
border-inline-end-styleborder-right-style
border-inline-end-widthborder-right-width
border-inline-startborder-left
border-inline-start-colorborder-left-color
border-inline-start-styleborder-left-style
border-inline-start-widthborder-left-width
border-start-start-radiusborder-top-left-radius
border-end-start-radiusborder-bottom-left-radius
border-start-end-radiusborder-top-right-radius
border-end-end-radiusborder-bottom-right-radius
margin-block-endmargin-bottom
margin-block-startmargin-top
margin-inline-endmargin-right
margin-inline-startmargin-left
padding-block-endpadding-bottom
padding-block-startpadding-top
padding-inline-endpadding-right
padding-inline-startpadding-left

还有一些简写属性可以用于让我们同时设置盒子块向或者行向的两侧。这些简写属性没有等价的实体属性。

属性用途
border-block为两个块向边框设置 border-colorborder-style 和 border-width
border-block-color为两个块向边框设置 border-color
border-block-style为两个块向边框设置 border-style
border-block-width为两个块向边框设置 border-width
border-inline为两个行向边框设置 border-colorborder-style 和 border-width
border-inline-color为两个行向边框设置 border-color
border-inline-style为两个行向边框设置 border-style
border-inline-width为两个行向边框设置 border-width
margin-block设置所有块向外边距(margin)。
margin-inline设置所有行向外边距(margin)。
padding-block设置块向内边距(padding)。
padding-inline设置行向内边距(padding)。

浮动和定位

逻辑属性或逻辑值实体属性或实体值
float: inline-startfloat: left
float: inline-endfloat: right
clear: inline-startclear: left
clear: inline-endclear: right
inset-inline-startleft
inset-inline-endright
inset-block-starttop
inset-block-endbottom
text-align: starttext-align: left
text-align: endtext-align: right

除了这些有对应关系的属性,另有可以处理块向和行向尺度的简写属性。除 inset 属性外,这些属性没有与实体属性的对应关系。

逻辑属性用途
inset-inline为行向尺度同时设置上述两个偏移值。
inset-block为块向尺度同时设置上述两个偏移值。
inset同时设置四个偏移值,多值语法使用实体对应关系。