横向转换页面
Transition a page sideways
我有一个基本上有 2 个页面的网站。总共有 3 个部分,第一页显示左侧和中间,第二页显示中间和右侧。我想知道是否有一种简单的方法可以在两页之间水平过渡。过渡看起来像这样:
当您需要调整 window 的大小时,会出现一个额外的问题。在这种情况下,A 和 C 部分应该变大,并且过渡应该相应地改变,而 B 是固定宽度。
我认为最好的方法是创建一个页面,因为加载会破坏沉浸感,但如果由于响应式网页设计而创建 2 个页面更简单,那就没问题了。我能想到的最简单的方法是将用户相机侧向移动,但响应式网页设计使它变得复杂。
一旦我们知道 B 的宽度,我们就可以将整个内容设置为列。
此代码段使用网格来执行此操作,第一个和第三个项目占据视口中剩余的 space。
通过使用 CSS calc 来确定来回移动必须平移的量,整个过程是响应式的,并且会适应不同的 viewport/device 宽度。
* {
margin: 0;
}
body {
overflow: hidden;
}
button {
position: fixed;
z-index: 1;
}
.container {
/* set the width of the second item */
--bW: 200px;
width: calc(2 * (100vw - var(--bW)) + var(--bW));
height: 100vh;
display: grid;
grid-template-columns: 1fr var(--bW) 1fr;
transform: translateX(0);
transition: transform 1s ease;
overflow: hidden;
}
.slid {
transform: translateX(calc(-100vw + var(--bW)));
}
.container>* {
height: 100%;
display: inline-block;
}
.container> :nth-child(1) {
background: magenta;
}
.container> :nth-child(2) {
background: purple;
}
.container> :nth-child(3) {
background: teal;
}
<button onclick="document.querySelector('.container').classList.toggle('slid');">CLICK ME TO SLIDE</button>
<div class="container">
<div></div>
<div></div>
<div></div>
</div>
我有一个基本上有 2 个页面的网站。总共有 3 个部分,第一页显示左侧和中间,第二页显示中间和右侧。我想知道是否有一种简单的方法可以在两页之间水平过渡。过渡看起来像这样:
当您需要调整 window 的大小时,会出现一个额外的问题。在这种情况下,A 和 C 部分应该变大,并且过渡应该相应地改变,而 B 是固定宽度。
我认为最好的方法是创建一个页面,因为加载会破坏沉浸感,但如果由于响应式网页设计而创建 2 个页面更简单,那就没问题了。我能想到的最简单的方法是将用户相机侧向移动,但响应式网页设计使它变得复杂。
一旦我们知道 B 的宽度,我们就可以将整个内容设置为列。
此代码段使用网格来执行此操作,第一个和第三个项目占据视口中剩余的 space。
通过使用 CSS calc 来确定来回移动必须平移的量,整个过程是响应式的,并且会适应不同的 viewport/device 宽度。
* {
margin: 0;
}
body {
overflow: hidden;
}
button {
position: fixed;
z-index: 1;
}
.container {
/* set the width of the second item */
--bW: 200px;
width: calc(2 * (100vw - var(--bW)) + var(--bW));
height: 100vh;
display: grid;
grid-template-columns: 1fr var(--bW) 1fr;
transform: translateX(0);
transition: transform 1s ease;
overflow: hidden;
}
.slid {
transform: translateX(calc(-100vw + var(--bW)));
}
.container>* {
height: 100%;
display: inline-block;
}
.container> :nth-child(1) {
background: magenta;
}
.container> :nth-child(2) {
background: purple;
}
.container> :nth-child(3) {
background: teal;
}
<button onclick="document.querySelector('.container').classList.toggle('slid');">CLICK ME TO SLIDE</button>
<div class="container">
<div></div>
<div></div>
<div></div>
</div>