reading-order

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

reading-order CSS 属性允许更改阅读流容器的子元素相对于其兄弟元素的阅读顺序。

语法

css
/* <integer> values */
reading-order: 1;
reading-order: -1;

/* Global values */
reading-order: inherit;
reading-order: initial;
reading-order: revert;
reading-order: revert-layer;
reading-order: unset;

<integer>

表示元素所属的顺序组。

描述

当元素的flexgrid 父容器的 reading-flow 属性设置为 normal 以外的值时,可以使用 reading-order 属性来设置元素的阅读流位置,使其相对于其兄弟元素。

对于阅读和导航,块、flex 或 grid 容器内的元素按 reading-order 值升序排序。如果多个兄弟元素具有相同的 reading-order 值,则这些项根据容器的 reading-flow 进行排序。未明确指定 reading-order 值的兄弟元素被分配默认值 0,这使得阅读流容器的所有子元素默认处于同一顺序组。

兄弟元素按从最小编号的顺序组到最大编号的顺序组进行排序。因此,要使元素在其兄弟元素之后被读出,可以将其 reading-order 值设置为 1 或更大。要使元素在其兄弟元素之前被读出,可以将其 reading-order 值设置为 -1 或更小。

reading-order 定义了阅读和 Tab 键顺序,但对视觉顺序没有影响。

tabindex 的交互

如果一组通常不可聚焦的阅读流容器子元素通过 tabindex="0" 属性变得可聚焦,它们的阅读顺序将按 reading-flowreading-order 属性的预期方式进行修改,就像 <a><button> 等交互元素一样。

但是,任何尝试使用正 tabindex 值修改阅读流容器内容的 Tab 键顺序的尝试都将被忽略——被 reading-flowreading-order 的效果覆盖。无论如何,你通常不应该使用这些;请参阅不要使用大于 0 的 Tabindex。如果需要,reading-flowreading-order 属性提供了更好的修改 Tab 键顺序的方法。

正式定义

在数据库中未找到值!

示例

网格行顺序

此示例演示了如何使用 reading-order 来控制网格容器阅读顺序中单个网格项的位置。一个网格项的 reading-order 值低于默认的 0,因此将在其兄弟元素之前被读出。另一个网格项的 reading-order 值设置得更高,因此将在其他元素之后被读出,无论源顺序或显示顺序如何。

HTML

在我们的标记中,有六个包含在包装器 <div> 中的 <a> 元素。

html
<div class="wrapper">
  <a href="#">Item 1</a>
  <a class="bottom" href="#">Item 2</a>
  <a href="#">Item 3</a>
  <a class="top" href="#">Item 4</a>
  <a href="#">Item 5</a>
  <a href="#">Item 6</a>
</div>

CSS

<div> 上,我们将 grid-auto-flow 属性设置为 dense,因此项目可能会以非源顺序显示。类为 top<a> 元素的 reading-order 属性设置为 -1,因此“项目 4”将是阅读流中的第一个项目。类为 bottom<a> 元素的 reading-order 属性设置为 21,因此“项目 4”将是阅读顺序中的最后一个项目。其余项目将在此之间以网格行顺序访问,因为 <div> 元素的 reading-flow 属性设置为 grid-rows

css
.wrapper {
  display: grid;
  grid-template-columns: repeat(3, 150px);
  grid-auto-flow: dense;
  reading-flow: grid-rows;
}

.top {
  reading-order: -1;
}

.bottom {
  reading-order: 21;
}

结果

上面的演示渲染如下:

尝试使用 Tab 键浏览链接。请注意,“项目 4”是如何首先被 Tab 键访问,而“项目 2”是最后被 Tab 键访问的,这是因为它们的 reading-order 值被修改了。在这两者之间,项目按网格行顺序被 Tab 键访问。

源顺序覆盖

在此示例中,奇数项的 reading-order 值设置得较低,因此它们将在组中的其他项之前被读出,无论源顺序或显示顺序如何。

HTML

在我们的标记中,有五个包含在包装器 <div> 中的 <a> 元素。

html
<div class="wrapper">
  <a href="#">Item 1</a>
  <a href="#">Item 2</a>
  <a href="#">Item 3</a>
  <a href="#">Item 4</a>
  <a href="#">Item 5</a>
</div>

CSS

<div> 元素的 reading-flow 属性设置为 source-order,这允许使用 reading-order 覆盖默认的源阅读顺序。奇数 <a> 元素的 reading-order 值为 -1,因此它们在偶数项之前被读出。

css
.wrapper {
  reading-flow: source-order;
}

.wrapper > a {
  display: block;
}

.wrapper a:nth-child(odd) {
  reading-order: -1;
}

结果

上面的演示渲染如下:

尝试使用 Tab 键浏览链接,并注意“项目 1”、“项目 3”和“项目 5”是如何首先被 Tab 键访问的,这是因为它们的 reading-order 被修改了。之后,项目按源顺序被 Tab 键访问。

规范

规范
CSS Display Module Level 4
# propdef-reading-order

浏览器兼容性

另见