css 具有 translatey(0) 的元素未正确定位
css element with translatey(0) is not being positioned properly
html {
scroll-behaivor: smooth;
padding: 0;
margin: 0;
}
#skip-to-main-content {
position: absolute;
transform: translatey(0);
display: block;
background: grey;
width: 100%;
}
.box {
height: 100px;
width: 100px;
background: green;
margin-top: 200px;
}
<div id="skip-to-main-content">Skip to main content</div>
<div class="box"></div>
使用 transform: translatey(0) 我希望 div“跳到主要内容”位于页面顶部。但是,它位于 div“框”的顶部。
如果我从 translateY(0) 改为 top: 0,那么它就会出现在页面的顶部。为什么 translateY 的行为不同?这几乎就像 translateY 不尊重绝对位置。我认为 position: absolute 会占用常规流量。
谢谢。
transform
属性 将应用 relative 转换。它通常用于动画而不是定位,并且不能与 position
属性.
配对使用
删除绝对定位并使用相对定位。然后就可以用transform: translateY(50%) translateY(-50%);
置顶了。
html {
scroll-behaivor: smooth;
padding: 0;
margin: 0;
}
#skip-to-main-content {
position: relative;
transform: translateY(50%) translateY(-50%);
display: block;
background: grey;
width: 100%;
}
.box {
height: 100px;
width: 100px;
background: green;
margin-top: 200px;
}
<div id="skip-to-main-content">Skip to main content</div>
<div class="box"></div>
(注意:问题中给出的代码中的错字 - 翻译。)
transform: translateY 将元素相对于它所在的位置移动。
如果您看到 translateY(-50%),这意味着该元素将向上移动其自身高度的一半。
如果您看到 translateY(0) [如问题中],则表示该元素根本没有移动。
如果您看到 translateY(50px),则表示该元素从其原始位置向下移动了 50px。
请注意,在任何翻译中,元素都在视觉上移动,但不会在整体内容中移动,此翻译不会影响其他元素的定位。
要使绝对定位的元素转到页面顶部,如问题中所述,它需要设置 top: 0 并且相对于已设置位置的第一个祖先。因此请注意,您不希望将其定位的 parents/grandparents 中的 none 设置为相对位置或绝对位置。在这种特殊情况下,系统将进入 'all the way up',因为没有中间定位元素。
采用给定的代码,因为它是一个 SO 片段,意识到将有一个包含页面内容的 body 元素,我们根据该元素定位该元素:
html {
scroll-behaivor: smooth;
padding: 0;
margin: 0;
}
#skip-to-main-content {
position: absolute;
top: 0;
display: block;
background: grey;
width: 100%;
}
.box {
height: 100px;
width: 100px;
background: green;
margin-top: 200px;
}
<div id="skip-to-main-content">Skip to main content</div>
<div class="box"></div>
html {
scroll-behaivor: smooth;
padding: 0;
margin: 0;
}
#skip-to-main-content {
position: absolute;
transform: translatey(0);
display: block;
background: grey;
width: 100%;
}
.box {
height: 100px;
width: 100px;
background: green;
margin-top: 200px;
}
<div id="skip-to-main-content">Skip to main content</div>
<div class="box"></div>
使用 transform: translatey(0) 我希望 div“跳到主要内容”位于页面顶部。但是,它位于 div“框”的顶部。
如果我从 translateY(0) 改为 top: 0,那么它就会出现在页面的顶部。为什么 translateY 的行为不同?这几乎就像 translateY 不尊重绝对位置。我认为 position: absolute 会占用常规流量。
谢谢。
transform
属性 将应用 relative 转换。它通常用于动画而不是定位,并且不能与 position
属性.
删除绝对定位并使用相对定位。然后就可以用transform: translateY(50%) translateY(-50%);
置顶了。
html {
scroll-behaivor: smooth;
padding: 0;
margin: 0;
}
#skip-to-main-content {
position: relative;
transform: translateY(50%) translateY(-50%);
display: block;
background: grey;
width: 100%;
}
.box {
height: 100px;
width: 100px;
background: green;
margin-top: 200px;
}
<div id="skip-to-main-content">Skip to main content</div>
<div class="box"></div>
(注意:问题中给出的代码中的错字 - 翻译。)
transform: translateY 将元素相对于它所在的位置移动。
如果您看到 translateY(-50%),这意味着该元素将向上移动其自身高度的一半。
如果您看到 translateY(0) [如问题中],则表示该元素根本没有移动。
如果您看到 translateY(50px),则表示该元素从其原始位置向下移动了 50px。
请注意,在任何翻译中,元素都在视觉上移动,但不会在整体内容中移动,此翻译不会影响其他元素的定位。
要使绝对定位的元素转到页面顶部,如问题中所述,它需要设置 top: 0 并且相对于已设置位置的第一个祖先。因此请注意,您不希望将其定位的 parents/grandparents 中的 none 设置为相对位置或绝对位置。在这种特殊情况下,系统将进入 'all the way up',因为没有中间定位元素。
采用给定的代码,因为它是一个 SO 片段,意识到将有一个包含页面内容的 body 元素,我们根据该元素定位该元素:
html {
scroll-behaivor: smooth;
padding: 0;
margin: 0;
}
#skip-to-main-content {
position: absolute;
top: 0;
display: block;
background: grey;
width: 100%;
}
.box {
height: 100px;
width: 100px;
background: green;
margin-top: 200px;
}
<div id="skip-to-main-content">Skip to main content</div>
<div class="box"></div>