scroll-marker-group

可用性有限

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

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

scroll-marker-group CSS 属性控制 滚动容器 元素是否生成 ::scroll-marker-group 伪元素。如果存在,该属性还指定滚动标记组在默认视觉和 Tab 键顺序中应放置在滚动组容器内容的 before(之前) after(之后)。

注意:要从一个包含一组 <a> 元素的现有元素创建滚动标记组容器,请使用 scroll-target-group 属性。阅读有关这两种属性的行为差异

语法

css
/* Single values */
scroll-marker-group: before;
scroll-marker-group: after;
scroll-marker-group: none;

/* Global values */
scroll-marker-group: inherit;
scroll-marker-group: initial;
scroll-marker-group: revert;
scroll-marker-group: revert-layer;
scroll-marker-group: unset;

after

一个 ::scroll-marker-group 伪元素作为滚动容器子 DOM 元素的同级元素生成,紧接在它们和任何生成的 ::scroll-button() 伪元素之前。它出现在容器的 Tab 键顺序和布局框顺序的末尾(但不是 DOM 结构)。

before

一个 ::scroll-marker-group 伪元素作为滚动容器子 DOM 元素的同级元素生成,紧接在它们和任何生成的 ::scroll-button() 伪元素之前。滚动标记组出现在容器的 Tab 键顺序和布局框顺序的开头。

none

元素上不会生成 ::scroll-marker-group 伪元素。这是默认值。

注意:作为可访问性最佳实践,将滚动标记组容器的视觉渲染位置与 Tab 键顺序匹配。当使用应用于 ::scroll-marker-group 的样式将标记组定位在内容开头时,使用 before 将其放在 Tab 键顺序的开头。当将组定位在内容的末尾时,使用 after 将其放在 Tab 键顺序的末尾。

正式定义

在数据库中未找到值!

正式语法

scroll-marker-group = 
none |
before |
after

示例

请参阅创建 CSS 轮播,了解使用 scroll-marker-group 属性的完整示例。

滚动标记的放置

在此示例中,我们演示了 scroll-marker-group 属性的三个值。

HTML

我们有一个基本的 HTML <ul> 列表,包含几个 <li> 列表项。

html
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
  <li>Item 6</li>
  <li>Item 7</li>
  <li>Item 8</li>
</ul>

CSS

我们通过将 display 设置为 flex,将我们的 <ul> 转换为轮播,创建一行不换行的 <li> 元素。overflow-x 属性设置为 auto,这意味着如果项目在 x 轴上溢出其容器,内容将水平滚动。然后我们将 <ul> 转换为一个 滚动捕捉容器,确保当容器使用 mandatoryscroll-snap-type 值滚动时,项目总是捕捉到位。

我们使用 scroll-marker-group 属性创建一个滚动标记组容器,将组放置在所有内容之后。

css
ul {
  display: flex;
  gap: 4vw;
  padding-left: 0;
  margin: 32px 0;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;

  scroll-marker-group: after;
}

接下来,我们使用 flex 属性将 <li> 元素样式化为容器宽度的 33%scroll-snap-alignstart 值使得当内容滚动时,最左侧可见项的左侧边缘捕捉到容器的左边缘。

css
li {
  list-style-type: none;
  background-color: #eeeeee;
  flex: 0 0 33%;
  scroll-snap-align: start;
  text-align: center;
  line-height: 5;
}

然后我们使用 ::scroll-marker 伪元素为每个列表项创建一个带有红色边框的正方形标记,并对 ::scroll-marker-group 伪元素应用样式,以将滚动标记排成一行,每个标记之间有 0.2em 的间隙。

css
li::scroll-marker {
  content: " ";
  border: 1px solid red;
  height: 1em;
  width: 1em;
}

::scroll-marker-group {
  display: flex;
  gap: 0.2em;
}

最后,为确保良好的用户体验,我们使用 :target-current 伪类定位当前滚动元素的标记,并将其样式与其他标记不同。

css
::scroll-marker:target-current {
  background: red;
}

结果

注意滚动标记组容器的放置位置。查看 beforeafter 的键盘 Tab 键顺序有何不同,并注意当值设置为 none 时组如何消失。

规范

规范
CSS Overflow Module Level 5
# scroll-marker-group-property

浏览器兼容性

另见