Html 使用CSS平均分隔相邻的子对象
我要求一组li元素的间距相等。需要注意的是,一些元素可以通过CSS类隐藏 输出看起来不错。请看这里的小提琴: 现在,正如我提到的,一些li可以通过类隐藏,如下所示:Html 使用CSS平均分隔相邻的子对象,html,css,css-selectors,Html,Css,Css Selectors,我要求一组li元素的间距相等。需要注意的是,一些元素可以通过CSS类隐藏 输出看起来不错。请看这里的小提琴: 现在,正如我提到的,一些li可以通过类隐藏,如下所示: .list-spacing > li + li { margin-top:10px; } <ul class="list-spacing"> <li class='hidden'>One</li> <li>Two</li> <li>Th
.list-spacing > li + li {
margin-top:10px;
}
<ul class="list-spacing">
<li class='hidden'>One</li>
<li>Two</li>
<li>Three</li>
<li class='hidden'>Four</li>
<li>Five</li>
<li>Six</li>
</ul>
请看这里的小提琴:
看起来不错
但问题是,当前两个或三个李被隐藏时,上述方法不起作用
我尝试了一种不同的方法——将ul的上边缘设置为-10px,将所有子级的上边缘设置为10px,这种情况会发生:,只要ul没有边界就可以了。但是我想要一个
有没有办法解决这个问题?您可以使用flexbox来解决这个问题 .隐藏{ 显示:无; } .列表间距{ 保证金:0; 填充:0; 边框:实心1px红色; } 保险商实验室{ 显示器:flex; 柔性流动:柱; 调整内容:灵活启动; 调整项目:灵活启动; } 李{ 列表样式:无; 边缘顶部:10px; } 一 二 三 四 五 六
此选择器应执行您需要的操作:
.list-spacing > li:not(.hidden) + li,
.list-spacing > li:not(:first-of-type) + li{
margin-top:10px;
}
使用:not选择器排除所有具有.hidden类的元素。实现目标的最简单和最可靠的方法是使用您在答案末尾提到的技巧,在ul元素上使用负上边距。负边距是完全有效的,顺便说一句。
尽管它需要添加父元素以防止上一个和下一个同级重叠,并在所有元素周围提供边框。下面是一个标记示例:
.包裹{
溢出:隐藏;
边框:实心1px红色;
}
.列表间距{
利润率:-10px0;
填充:0;
}
.列表间距>li{
边缘顶部:10px;
边框:1px纯绿色;
}
.隐藏{
显示:无;
}
一
二
三
四
五
六
吻:保持简单,愚蠢是我的工作咒语。将页边顶部替换为页边底部如何?那会解决你的问题 要使所有内容都保持零利润,那么,正如web tiki所建议的,ul上的负利润是最好的选择
ul{ margin-bottom: -10px; margin-top: 0; }
li{ margin-bottom: 10px; }
以下是我能想到的最简单的解决方案: 您需要向每个li元素添加margin top:10px,然后通过将::before伪元素margin top设置为-10px来消除列表顶部的间隙
.list-spacing::before {
content: "";
display: block;
margin-top: -10px;
}
.list-spacing > li {
margin-top:10px;
}
小提琴手:谢谢杰拉德,但我希望间距为10px。只要ul元件上没有设置高度,这就行不通。很好!但是如果一行中有两个隐藏的元素,它就不会起作用:你的咒语也是我的咒语!但是我在UL的底部有一个额外的间隙。我希望最后一个LI触及下边框。谢谢-但我仍然失去了下边框-这与我在问题中建议的负上边框相似谢谢。这绝对是一个选择。我只是想知道是否有任何css黑客可以在没有其他元素的情况下实现这一点。如果你的ul有一个固定的高度,你可以选择flexbox解决方案,否则除了这个解决方案,我没有其他建议。很好!这样,就不需要父元素+1非常好。谢谢
.list-spacing > li:not(.hidden) {
margin-top:10px;
}
ul{ margin-bottom: -10px; margin-top: 0; }
li{ margin-bottom: 10px; }
.list-spacing::before {
content: "";
display: block;
margin-top: -10px;
}
.list-spacing > li {
margin-top:10px;
}