【发布时间】:2020-10-22 00:41:17
【问题描述】:
想象一下 CSS Grid 中的一个英雄区域 (div1),其 100vh 占据了整个屏幕。 4 个按钮,每个按钮都将用户平滑地滚动到一个 div,根据单击的按钮改变方向。
▲向上:div2
▼下:div3
◄ 左:div4
► 右:div5
一旦用户点击了一个按钮......它会让用户再次点击 HOME/#index.html 并且视图会向内平滑滚动,方向取决于它来自哪个 div。 div2 向下滚动,div4 向右滚动。
一旦您进入一个 div,它应该感觉就像在一个普通页面上,没有视图或滚动到其他 div 的能力,但可以在 div 内部滚动。
也许我想多了……也许这最好使用一些 javascript 滑块脚本来实现?
最优雅的 CSS Grid 解决方案是什么?定向平滑滚动?使用 VueJ 的奖励积分!
狠狠地啜饮着他的咖啡
:root {
--radius: 5px;
--padding: 10px;
}
.container {
font-family: "Inter", sans-serif;
font-weight: 800;
color: white;
text-transform: uppercase;
font-size: 12px;
text-align: center;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
grid-gap: 0.5rem;
height: 100vh;
grid-template-areas:
" . content1 . "
" content4 hero-area content2 "
" . content3 . "
;
}
#hero-area {
background: #c9268d;
border-radius: var(--radius);
padding-top: var(--padding);
grid-area: 2 / 2 / 3 / 3;
display: grid;
grid-template-columns: repeat(3, 10px);
grid-template-rows: minmax(50px, 80px) 60px;
grid-gap: .2rem;
justify-content: center;
align-content:center;
}
#content1 {
background: #d81b60;
border-radius: var(--radius);
padding-top: var(--padding);
grid-area: 1 / 2 / 2 / 3;
}
#content2 {
background: #b31077;
border-radius: var(--radius);
padding-top: var(--padding);
grid-area: 2 / 3 / 3 / 4;
}
#content3 {
background: #c51162;
border-radius: var(--radius);
padding-top: var(--padding);
grid-area: 3 / 2 / 4 / 3;
}
#content4 {
background: #bf1179;
border-radius: var(--radius);
padding-top: var(--padding);
grid-area: 2 / 1 / 3 / 2;
}
<head>
<link href="https://fonts.googleapis.com/css?family=Inter:400,800,900&display=swap" rel="stylesheet">
</head>
<div class="container">
<div id="hero-area">Hero-area</div>
<div id="content1">Content 1</div>
<div id="content2">Content 2</div>
<div id="content3">Content 3</div>
<div id="content4">Content 4</div>
</div>
【问题讨论】:
-
我得出的结论是,让内容 div (1,2,3,4) 在英雄区域前面平滑滚动可能更容易,因为它相反,创建视口移动的错觉?我仍在寻找有关如何进行此设计的想法。