我正在尝试使用动态元素构建导航,该导航元素可能会在较小的屏幕尺寸下分成两行,并且我希望能够设置每行的第一和最后一个元素的样式。
以下是一些示例示例,它们在较小的屏幕尺寸下会中断(圆角应位于每行的第一个和最后一个元素上):
<ul>
<li>First page</li>
<li>Second page</li>
<li>Third page</li>
<li>Fourth page</li>
<li>Another example page</li>
<li>This could be the last page</li>
<li>But its not</li>
<li>This is actually the last page</li>
</ul>
ul {
list-style:none;
font-size:0px;
li {
font-size:18px;
display:inline-block;
padding:10px 30px;
border:1px solid black;
margin:10px -1px 10px 0;
&:first-child {
border-top-left-radius:5px;
border-bottom-left-radius:5px;
}
&:last-child {
border-top-right-radius:5px;
border-bottom-right-radius:5px;
}
}
}
使用relevent jsfiddle:http : //jsfiddle.net/tbw4f23g/1/
Is it possible to get a selector for the first and last inline-block element that runs onto a new line or are there any other (non-javascript) approaches for this effect?
不,没有这样的选择器。CSS不提供有关行中断位置的信息(
:first-line
伪元素的有限例外)。不,没有其他非JavaScript方法可达到这种效果。如果您愿意使用JS,则可以在布局可能发生更改时遍历元素,检查每个与其父容器相对的位置,判断它是靠左还是靠右,然后应用边框半径。
另一个可能的JS解决方案是通过累积宽度并确定必须在何处发生断点来执行自己的换行计算。
您可能需要检查诸如Masonry之类的库,以查看它们是否提供了允许您访问内部布局配置的钩子,这可以使此操作更容易。