名为Scroll Anchoring的功能是一项浏览器功能。此功能试图防止一种常见情况,即在 DOM 完全加载之前,您可能会向下滚动网页,并且加载到当前位置上方的任何元素会将您进一步推向页面下方。
CSS Overflow-anchor属性可用于防止此浏览器功能在加载新内容时自动滚动页面。如果新内容加载到当前滚动位置上方或下方,页面将不会向上或向下滚动。
属性值
auto -调整滚动位置时,该元素将成为潜在的锚点。
none: 该元素不会被选为潜在的锚点,从而允许内容重排。
适用范围
所有 HTML 元素。
DOM 语法
object.style.overflowAnchor = "auto|none";
属性overflow-anchor是Safari 浏览器不支持。
CSS overflow-anchor: none值
以下示例设置overflow-anchor:none。当我们单击按钮时,我们会看到上面创建的新框如何将文本向下推。
<html>
<head>
<style>
.container-overflow {
padding: 2px;
width: 280px;
aspect-ratio: 1;
border: 3px solid #2d7742;
overflow: scroll;
overflow-anchor: none;
display: flex;
flex-direction: column;
align-items: center;
background-color: #2fe262;
}
.box {
background-color: #D90F0F;
width: 150px;
height: 20px;
margin: 5px;
padding: 5px;
text-align: center;
aspect-ratio: 4/1;
}
h4 {
text-align: center;
color: #1c0fd9;
}
button {
background-color: #e5e90f;
border: none;
padding: 10px;
border-radius: 5px;
font-size: medium;
}
</style>
</head>
<body>
<p>单击按钮创建新文本框。 新文本框会将现有文本下推。</p>
<div class="container-overflow">
<div id="newText"></div>
<h4>yxjc123.com CSS Overflow-anchor</h4>
<p>日月潭很深,湖水碧绿。湖中央有个美丽的小岛,叫光化岛。小岛把湖水分成两半,北边像圆圆的太阳,叫日潭;南边像弯弯的月亮,叫月潭。
清晨,湖面上飘着薄薄的雾。天边的晨星和山上的点点灯光,隐隐约约地倒映在湖水中。
中午,太阳高照,整个日月潭的美景和周围的建筑,都清晰地展现在眼前。要是下起蒙蒙细雨,日月潭好像披上轻纱,周围的景物一片朦胧,就像童话中的仙境。
</p>
<button onclick="addText()">点击我</button>
</div>
<script>
function addText(){
let newTextBox = document.querySelector("#newText");
let newTextDiv = document.createElement("div");
newTextDiv.className = "box";
newTextBox.appendChild(newTextDiv);
}
</script>
</body>
</html>
CSS Overflow-anchor: auto
以下示例展示了如何使用overflow-anchor:auto属性使用其默认的滚动锚定行为。在这里我们看到点击按钮(点击我),新的文本框被添加到按钮上方。属性溢出锚点:当当前位置上方的 DOM 发生更改时,自动锁定用户在页面上的位置。即使新元素加载到 DOM 中,这也允许用户保持锚定在页面上的位置。
<html>
<head>
<style>
.container-overflow {
padding: 2px;
width: 280px;
aspect-ratio: 1;
border: 3px solid #2d7742;
overflow: scroll;
overflow-anchor: auto;
display: flex;
flex-direction: column;
align-items: center;
background-color: #2fe262;
}
.box {
background-color: #D90F0F;
width: 150px;
height: 20px;
margin: 5px;
padding: 5px;
text-align: center;
aspect-ratio: 4/1;
}
h4 {
text-align: center;
color: #1c0fd9;
}
button {
background-color: #e5e90f;
border: none;
padding: 10px;
border-radius: 5px;
font-size: medium;
}
</style>
</head>
<body>
<p>单击按钮添加新文本框。 即使您添加新的文本框,现有文本也将保持可见(当您设置 Overflow-anchor: auto 时)。</p>
<div class="container-overflow">
<div id="newText"></div>
<h4>yxjc123.com CSS Overflow-anchor</h4>
<p>日月潭很深,湖水碧绿。湖中央有个美丽的小岛,叫光化岛。小岛把湖水分成两半,北边像圆圆的太阳,叫日潭;南边像弯弯的月亮,叫月潭。
清晨,湖面上飘着薄薄的雾。天边的晨星和山上的点点灯光,隐隐约约地倒映在湖水中。
中午,太阳高照,整个日月潭的美景和周围的建筑,都清晰地展现在眼前。要是下起蒙蒙细雨,日月潭好像披上轻纱,周围的景物一片朦胧,就像童话中的仙境。
</p>
<button onclick="addText()">点击我</button>
</div>
<script>
function addText(){
let newTextBox = document.querySelector("#newText");
let newTextDiv = document.createElement("div");
newTextDiv.className = "box";
newTextBox.appendChild(newTextDiv);
}
</script>
</body>
</html>