正如其他两个答案中已经说明的那样,我看不出为什么您的方法应该是“错误的”。但是您的一般概念还有其他一些问题。
我假设您的标记看起来像这样:
<ul>
<li class="list-item">...</li>
<li class="list-item">...</li>
<li class="list-item">...</li>
<li class="list-item">...</li>
</ul>
无论是有序列表还是无序列表都无关紧要。
因此,关于您的方法的第一点是使用 class 属性。如果您只有三个或四个列表项,那么可能没关系,但想想如果您有一百个或更多元素,这将是多么无效。
因此,通常应避免在每个列表项上使用类属性,而不是在父元素上使用它。
<ul class="my-list">
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
其次,类和 id 名称应始终与各自元素的内容相关,而不是与它们的呈现相关,因为它们的呈现可能会改变!
(所以“my-list”不是一个好的选择,应该用与内容相关的名称替换。或者使用 ID 而不是类属性甚至可能更好。)
你还写道:
...但不是第一个和最后一个元素。
我看不出你将如何用你的方法来实现这一点,无论是第一个还是第二个,因为你只将第一个li
元素与它们两个匹配。
将有另一种解决方案(取决于所需的浏览器支持)与第一个元素不匹配:
.my-list li:not(:first-child) {
border-top: 1px solid black;
}
如果您还想排除最后一个元素:
.my-list li:not(:first-child):not(:last-child) {
border-top: 1px solid black;
}
如果它是一个嵌套列表,您可以像这样使用子选择器:
.my-list > li:not(:first-child):not(:last-child) {
border-top: 1px solid black;
}
与往常一样,有许多不同的方法可以用 CSS 实现相同的目标。哪一个可能是最好的取决于各自项目的具体情况。一般来说,牢记KISS 原则并不是一个坏主意!;-)