HTML 锚点全局属性

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

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

anchor 全局属性用于将定位元素与锚点元素关联起来。该属性的值是您想将定位元素锚定到的元素的 id 值。然后可以使用 CSS 锚点定位来定位元素。

注意:另外,您也可以通过 CSS 使用 anchor-nameposition-anchor 属性将定位元素与锚点元素关联起来。如果同一个元素同时使用了这两种锚定技术,CSS 技术将优先于 HTML 技术。

示例

基本的 anchor 属性用法

以下示例使用 HTML 将定位元素与锚点关联起来。然后使用 CSS 将定位元素固定在锚点的右侧。

HTML

我们创建一个 idexample-anchor<div> 元素。这就是我们的锚点元素。然后,我们包含另一个 anchor 属性设置为 example-anchor<div>。这会将第一个 <div> 指定为第二个 <div> 的锚点,将两者关联起来。

我们还在两个 <div> 元素周围添加了一些填充文本,使 <body> 更高,以便可以滚动。

html
<p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
  incididunt ut labore et dolore magna aliqua. Dui nunc mattis enim ut tellus
  elementum sagittis vitae et.
</p>

<div class="anchor" id="example-anchor">⚓︎</div>

<div class="infobox" anchor="example-anchor">
  <p>This is an information box.</p>
</div>

<p>
  Nisi quis eleifend quam adipiscing vitae proin sagittis nisl rhoncus. In arcu
  cursus euismod quis viverra nibh cras pulvinar. Vulputate ut pharetra sit amet
  aliquam.
</p>

<p>
  Malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Vel elit
  scelerisque mauris pellentesque pulvinar pellentesque habitant morbi
  tristique. Porta lorem mollis aliquam ut porttitor. Turpis cursus in hac
  habitasse platea dictumst quisque. Dolor sit amet consectetur adipiscing elit.
  Ornare lectus sit amet est placerat. Nulla aliquet porttitor lacus luctus
  accumsan.
</p>

CSS

我们使用 CSS 将 infobox 元素转换为一个锚点定位元素,并相对于其锚点进行定位。我们将它的

  • position 属性设置为 fixed,将其转换为定位元素,以便可以相对于锚点的位置进行定位。
  • left 属性设置为一个 anchor() 函数,值为 right。这会将定位元素固定到其锚点,使其左边缘与锚点的右边缘对齐。
  • align-self 属性设置为 anchor-center。这将使 infobox 在内联方向上与锚点的中心对齐。
  • margin-left 设置为 10px,在锚点定位元素与其锚点之间创建了间距。
css
.infobox {
  position: fixed;
  left: anchor(right);
  align-self: anchor-center;
  margin-left: 10px;
}

结果

滚动示例以查看 infobox 如何固定到锚点。当 anchor 属性得到支持时,infobox 将固定在锚点的右侧。如果不支持,infobox 将固定到视口。

规范

此属性目前不是 HTML 规范的一部分。请阅读关于在 https://github.com/whatwg/html/pull/9144 中添加 anchor 属性的讨论。

浏览器兼容性

另见