为什么 CSS 视差效果需要 overflow-y?
Why is overflow-y required for a CSS parallax effect?
我创建了一个准系统视差演示。这工作正常,如您所见,如果您 运行 下面的代码片段。但是,如果我删除以下 CSS 规则,它将停止工作:
main {
overflow-y: auto;
}
当不需要垂直滚动时,为什么需要包含垂直滚动条的规则?
body {
margin: 0;
}
main {
width:100vw;
height:100vh;
perspective: 2px;
/* overflow-y MUST be set to a certain value for parallax to work
* WORKS:
* + auto
* + hidden
* + overlay
* + scroll
* FAILS:
* - clip
* - inherit
* - initial
* - revert
* - unset
* - visible
*/
overflow-y: auto;
}
div {
position: absolute;
top: 0;
width: 99vw;
height: 100%;
}
div:nth-child(1) {
left: 0;
background-color: #900;
}
div:nth-child(2) {
left: 49.5vw;
background: rgba(0,192,0,0.5);
height: 80%;
top: 10%;
transform: translateZ(1px) scale(0.5);
z-index: 1;
}
div:nth-child(3) {
left: 99vw;
background-color: #009;
}
<body>
<main>
<div></div
><div></div
><div></div>
</main>
</body>
Why is it necessary to include a rule for a vertical scrollbar, when there is no need to scroll vertically?
您需要垂直滚动,但需要滚动 main
而不是屏幕。这里有一个小陷阱,因为删除 main
的滚动将使屏幕的默认滚动出现,你认为两者相同但不是。我们需要滚动主视图,因为那里定义了透视图。
稍微减少width/height,你会更好地理解。现在如果你 remove/add 溢出你会发现它是不同的
body {
margin: 0;
}
main {
width: 90vw;
height: 90vh;
perspective: 2px;
overflow-y: auto;
}
div {
position: absolute;
top: 0;
width: 99vw;
height: 100%;
}
div:nth-child(1) {
left: 0;
background-color: #900;
}
div:nth-child(2) {
left: 49.5vw;
background: rgba(0, 192, 0, 0.5);
height: 80%;
top: 10%;
transform: translateZ(1px) scale(0.5);
z-index: 1;
}
div:nth-child(3) {
left: 99vw;
background-color: #009;
}
<main>
<div></div>
<div></div>
<div></div>
</main>
基本上,具有透视效果的元素需要让其内容滚动才能看到效果。
我创建了一个准系统视差演示。这工作正常,如您所见,如果您 运行 下面的代码片段。但是,如果我删除以下 CSS 规则,它将停止工作:
main {
overflow-y: auto;
}
当不需要垂直滚动时,为什么需要包含垂直滚动条的规则?
body {
margin: 0;
}
main {
width:100vw;
height:100vh;
perspective: 2px;
/* overflow-y MUST be set to a certain value for parallax to work
* WORKS:
* + auto
* + hidden
* + overlay
* + scroll
* FAILS:
* - clip
* - inherit
* - initial
* - revert
* - unset
* - visible
*/
overflow-y: auto;
}
div {
position: absolute;
top: 0;
width: 99vw;
height: 100%;
}
div:nth-child(1) {
left: 0;
background-color: #900;
}
div:nth-child(2) {
left: 49.5vw;
background: rgba(0,192,0,0.5);
height: 80%;
top: 10%;
transform: translateZ(1px) scale(0.5);
z-index: 1;
}
div:nth-child(3) {
left: 99vw;
background-color: #009;
}
<body>
<main>
<div></div
><div></div
><div></div>
</main>
</body>
Why is it necessary to include a rule for a vertical scrollbar, when there is no need to scroll vertically?
您需要垂直滚动,但需要滚动 main
而不是屏幕。这里有一个小陷阱,因为删除 main
的滚动将使屏幕的默认滚动出现,你认为两者相同但不是。我们需要滚动主视图,因为那里定义了透视图。
稍微减少width/height,你会更好地理解。现在如果你 remove/add 溢出你会发现它是不同的
body {
margin: 0;
}
main {
width: 90vw;
height: 90vh;
perspective: 2px;
overflow-y: auto;
}
div {
position: absolute;
top: 0;
width: 99vw;
height: 100%;
}
div:nth-child(1) {
left: 0;
background-color: #900;
}
div:nth-child(2) {
left: 49.5vw;
background: rgba(0, 192, 0, 0.5);
height: 80%;
top: 10%;
transform: translateZ(1px) scale(0.5);
z-index: 1;
}
div:nth-child(3) {
left: 99vw;
background-color: #009;
}
<main>
<div></div>
<div></div>
<div></div>
</main>
基本上,具有透视效果的元素需要让其内容滚动才能看到效果。