【发布时间】:2022-02-07 22:32:56
【问题描述】:
您好,我正在尝试使用 CSS 网格创建仪表板 UI。 CSS Grid 是我想要做的事情的正确选择吗?请告诉我。
我目前停留在实现 100% 高度的侧边栏的最佳方法上,但任何超过此高度的东西都会创建溢出滚动条。为了使情况稍微复杂一些,默认的侧边栏宽度是 min-width: 100px 但是当您单击切换按钮时,它会展开并且宽度会增加等。我试图避免使用幻数来使这个解决方案成为可能。
最终目标基本上是响应式 2 列布局。 2 个滚动条、100% 高度的侧边栏列和一个包含标题导航栏的主列。
到目前为止我所拥有的: https://codepen.io/jackwebsitefeatures/pen/QWONzYy
function toggleClass() {
console.log("test");
document.querySelector('.app-sidenav').classList.toggle("expanded");
}
*,
*:before,
*:after {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
font-family: sans-serif;
}
/* mobile first */
.app-layout {
display: grid;
height: 100vh;
grid-template-rows: auto 1fr;
}
.app-header {
display: flex;
justify-content: space-between;
align-items: center;
height: 82px;
}
.app-sidenav {
display: none;
}
.app-sidenav nav a span {
display: none;
}
.filler-element {
height: 2000px;
}
/* Desktop */
@media (min-width: 1020px) {
.app-layout {
display: grid;
height: 100vh;
grid-template-columns: auto 1fr;
}
.app-sidenav {
grid-column: 1;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
overflow-y: auto;
min-width: 100px;
background: grey;
}
.app-sidenav.expanded {
width: 250px;
}
.app-sidenav.expanded nav ul li a {
display: inline-flex;
align-items: center;
}
.app-sidenav.expanded nav ul li a span {
display: inline-block;
font-size: 1rem;
font-weight: 600;
}
.app-sidenav.expanded nav ul li a i {
margin-left: 0;
margin-right: 1.2rem;
}
.app-sidenav nav {
display: flex;
flex-direction: column;
}
.app-sidenav nav ul li a {
color: blue;
text-decoration: none;
padding: 1rem;
display: inline-flex;
align-items: center;
}
.app-sidenav nav ul li a:hover {
color: #fff;
text-decoration: none;
}
.app-sidenav nav ul li a i {
display: block;
margin: auto;
}
.app-sidenav button {
margin: auto auto 1rem auto;
}
.app-header {
grid-column: 2;
grid-row: 1 / 2;
padding: 0px 6rem;
}
.app-main {
grid-column: 2;
grid-row: 2 / 3;
padding: 0px 6rem;
}
}
<div class="app-layout">
<aside class="app-sidenav">
<div class="logo">
logo
</div>
<nav>
<ul>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
<li><a href="#"><i>icon</i><span>Link</span></a></li>
</ul>
</nav>
<button onclick="toggleClass()">expand toggle</button>
</aside>
<header class="app-header">im a sticky header - make sure on desktop device to see sidebar</header>
<main class="app-main">
all main site goes in here... a 2000px filler height element is here btw
<div class="filler-element"></div>
</main>
</div>
任何帮助将不胜感激。
【问题讨论】:
-
您是否尝试将侧边栏高度设置为 100vh?了解更多信息w3schools.com/cssref/css_units.asp
-
@StavrosAngelis 我有,但是当你这样做然后向下滚动以查看主要部分内容的其余部分时,侧边栏会随之出现,然后你会得到空白。
-
是的,您需要将侧边栏的位置设置为
fixed,然后将主要部分设置为与左侧的距离等于侧边栏的宽度(即@ 987654328@) -
@StavrosAngelis 在使用 CSS 网格时我将如何做到这一点?你可以举一个例子吗?非常感谢:)
标签: html css responsive-design css-grid dashboard