我有一个不同的项目,其中有自动宽度(没有固定的宽度可以在我的情况下)的列表。我使用justify-content: space-between
是因为我的第一个项目必须从容器的开头开始,最后一个项目必须从容器的结尾开始。
上面的所有工作都很好,但是每当我试图在这些列表项之间添加一行时,问题就开始出现了。我没有办法确定要用多少px或%来定位这些线。有没有什么方法可以“动态地”定位不同列表项之间的行?
我们使用的html是不可编辑的,因为它是由我们使用的CMS呈现的。
这就是我的:
这是我努力达到的目标
下面是我目前拥有的代码
html {
box-sizing: border-box;
}
.Container {
max-width: 70%;
margin-right: auto;
margin-left: auto;
background: blue;
padding-top: 20px;
padding-bottom: 20px;
}
.Flex {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
list-style: none;
margin: 0;
padding: 0;
}
.Flex-item {
background: red;
position: relative;
}
.Flex-item:after {
content: "";
position: absolute;
background: white;
width: 1px;
height: 40px;
top: 50%;
transform: translateY(-50%);
}
<div class="Container">
<ul class="Flex">
<li class="Flex-item">Lorem</li>
<li class="Flex-item">consectetur</li>
<li class="Flex-item">vestibulum</li>
<li class="Flex-item">nec</li>
<li class="Flex-item">condimentum</li>
</ul>
</div>
7条答案
按热度按时间0qx6xfy61#
我正在一个项目中使用这个解决方案。
它在flex容器上设置
justify-content: space-between;
,在子容器上设置flex: 1 1 auto;
,并在所有子容器上(第一个除外)设置左边框。我修改了你的示例CSS,所以你可以看看。我不确定你是否会在孩子们身上使用背景颜色,所以我只是使用了行高来获得更大的边框。
不修改HTML。
pbossiut2#
你可以通过使用一个 nested
flexbox
es * 使它工作 -我知道你不能改变标记,但至少你必须像我这里一样将li
的内容 Package 成span
:1.使
.flex-item
也成为flexbox
,文本在span
中(现在将具有红色背景), 分隔符 * 作为:after
元素1.对于
Flex-item
,将flex-grow
和flex-shrink
应用于1,将flex-basis
应用于auto
。flex: 0
到最后一个Flex-item
和margin-auto
到:after
也有助于这种效果。一个演示可能会更好地解释它-见下文:
lawou6xi3#
使用风格化的ARIA代表性LI而不是
:after
例如:
P.S:是的,我尝试使用
display: list-item
最初对:after
伪但naah.sczxawaw4#
我认为使用flexbox实现这一点的唯一方法是将文本 Package 在一个新元素中,就像@Kukkuz在another answer中所做的那样。
如果没有额外的 Package 器,您仍然可以获得等间距的分隔符,但红色背景并不局限于文本的长度。
下面是一个示例:
如果文本的背景颜色不是必需的,那么删除它,这应该是所有你需要的。
如果你可以在文本周围添加一个
span
,这将允许你将红色背景限制在文本的长度上,那么你就万事俱备了:mwngjboj5#
如果您对
flex
进行叠瓦式编写,那么您可能会得到与您尝试做内容非常接近的结果,而无需任何额外的标记。它涉及pseudos,
order
和css3选择器(flex
除外)。http://codepen.io/gc-nomade/pen/BpzYWP
e37o9pze6#
试试这个
eoigrqb67#
您可以使用此解决方案: