【发布时间】:2019-04-16 18:10:52
【问题描述】:
我正在尝试制作一个垂直对齐未确定数量的列表项的侧边栏。当项目的数量到达侧边栏的底部时,它们通过 flex 分组到列中。
我的问题是我希望侧边栏的宽度在关闭时为 100 像素,在打开时我希望它是列的宽度。如果我对打开状态使用固定宽度,则会发生这种情况:
HTML:
<nav class="sidebar">
<ul>
<li>
1
</li>
<li>
2
</li>
<li>
3
</li>
<li>
4
</li>
<li>
5
</li>
<li>
...
</li>
</ul>
</nav>
SCSS:
.sidebar {
background: #ccc;
width: 100px;
ul {
list-style-type: none;
height: 100vh;
display: flex;
flex-wrap: wrap;
flex-direction: column;
align-content: flex-start;
li {
background: #000;
height: 80px;
width: 80px;
}
}
&:hover
{
//width: !?!?!?!
}
}
我怎样才能做到这一点?如何打开侧边栏并显示所有列?
更新:侧边栏的高度可能因屏幕尺寸而异。我用原始设置更新了代码。
更新 #2: 我测试了这两种解决方案,虽然 @itay-gal 是一个聪明的 CSS 唯一选项,但它缺乏动画的能力。由于我已经在使用 JS,所以我最终使用了@pablo-darde 解决方案。
我对@pablo-darde 做了一个小改动,以便它可以使用可变高度的侧边栏:
const sidebar = document.querySelector('.sidebar');
const ul = sidebar.querySelector('ul');
const li = ul.querySelector('li');
const showRemainder = () => {
const ulHeight = ul.clientHeight;
const liHeight = li.clientHeight;
const width = ul.clientWidth * Math.ceil(ul.children.length / (ulHeight / liHeight));
sidebar.style.maxWidth = `${width}px`;
}
【问题讨论】:
-
不知道为什么@Michael_B 将其标记为重复,这似乎不是同一个问题,我找到了仅使用 css 的解决方案
-
我把它标记为重复,因为这个问题之前已经被问过和探索过很多次了。另外,您的回答并不能解释问题。它也没有解释答案(这实际上只是一种解决方法)。但是,如果您认为您的答案是对整个问题的有用解决方案,请将其发布在主要(重复)帖子上。 @ItayGal
-
我认为我们在这里所做的是找到解决方法以使事情正常进行,即使它不是微不足道和容易的 :) 我认为我不必解释这个问题,只是为了解释我是如何克服它的,我会尽快详细说明我的解决方案。
标签: html css layout sass flexbox