【发布时间】:2017-07-24 09:10:43
【问题描述】:
我有一个 ul 元素和 5 个孩子 <li>。
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<ul> 有一个display: flex 属性。
我尝试使用 <li> 上的 calc 属性来均匀调整列表项的大小:
calc:(100% / 5);
这会给出所需的结果并均匀调整 5 个 <li> 块的大小
现在我在所有的右侧添加了边框,但最后一个子 <li> 元素。所以我从<ul>的总宽度中减少了所有边框的总宽度。
calc:((100% - 8px) / 5);
这也可以正常工作,并均匀地调整带有边框的 <li> 块的大小。
ul {
width: 600px;
height: 300px;
margin: 0;
padding: 0;
display: flex;
background: red;
}
li {
list-style: none;
display: block;
width: calc((100% - 0.8px) / 5);
height: 100%;
border-right: 0.2px solid black;
background: blue;
}
li:last-child {
border-right: none;
}
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
现在我尝试在视口单元 vw 中设置边框宽度而不是 px,但它给出了不同的结果。
ul {
width: 600px;
height: 300px;
margin: 0;
padding: 0;
display: flex;
background: red;
}
li {
list-style: none;
display: block;
width: calc((100% - 0.8vw) / 5);
height: 100%;
border-right: 0.2vw solid black;
background: blue;
}
li:last-child {
border-right: none;
}
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
从上面的sn-p可以看出,右边有一点空间。这会随着更宽的视口而变得更大(尝试查看 sn-p 整页)。所以我认为问题在于这里的vw 单位和弹性框。
那么这个错误的原因是什么?
编辑:
从提供的答案和 cmets 中,我看到还有其他更合适的方法来实现我想要做的事情。我很欣赏这些答案,但这些不是我问题的答案。由于calc 在这种情况下显示错误,因此当我尝试在其他情况下(不仅仅是边框)使用calc 和视口单位时,很可能会导致更多问题。所以我需要知道原因和“calc”修复。
【问题讨论】:
-
我不知道为什么会这样,但如果你不知道,你可以使用
box-sizing: border-box;,边框宽度不会影响元素的外部宽度。 -
在
calc中使用%和vw有点奇怪,因为%和vw都是基于不同基数的百分比。你没有说ul的父母。假设ulparent 的宽度是 300px,视口宽度即vw是 400px,所以0.8vw比您预期的要多,并且有空白。 -
@MichaelCoker 是的,我看到了 calc 替代帖子“stackoverflow.com/questions/16034397/css-calc-alternative?rq=1”,并正在考虑尝试 box-sizing。
-
@ata 为什么需要父级 ul?它不会以任何方式影响 li。我猜你误解了这个问题。
-
@AnuragDaolagajao 是的,你是对的,我犯了一个错误,但这个概念是正确的。
ul的宽度是600px,但是viweport的宽度可能超过600px,那么0.8vw大于0.8%就会有一个空白。
标签: html css flexbox viewport-units css-calc