我已经并排放置了25%宽的物品。我在每第四个元素之后添加clear:both
。但是我需要在元素之间插入一个图形分节符。它必须在<ul>
内。为了有效,我将“section-break”(下面示例中的第一个li项目)包装到<li>
中。
<ul>
<li class="year"><h1>THIS IS A SECTION Break and 100% wide</h1></li>
<li>This is a article and only 25% wide</li>
<li>This is a article and only 25% wide</li>
<li>This is a article and only 25% wide</li>
<li>This is a article and only 25% wide</li>
</ul>
我希望每个第四个元素都是换行符,所以我使用...
ul li:nth-of-type(4n+1) { clear: both; }
但是我希望li.year
不受此行为的影响,所以我尝试了这个
ul li:not(.year):nth-of-type(4n+1) { clear: both; }
现在我上面的示例代码中的最后一个<li>
会浮动到下一行,但这不应该发生,因为第一个<li>
不是浮动文章之一,而是包含标题。
是否可以将:not
和nth-of-type()
选择器相互叠加?
答案 0 :(得分:9)
你拥有的选择器 -
ul li:not(.year):nth-of-type(4n+1) { background: yellow; }
- 完全正确(as shown by highlighting the selector)。
问题在于您使用 clear
的方式。如果您对以下元素使用clear:right
,然后使用clear:left
,则它可以正常工作:
ul li:not(.year):nth-of-type(4n+1) { clear: right; }
ul li:not(.year):nth-of-type(4n+2) { clear: left; }
根据评论进行修改受损的文字是无稽之谈。根据BoltClock的回答,真正的问题是:not
伪类不会影响nth-of-type
。在这种情况下,调整选择器偏移可以巧合,但如果:not
模式不同,则不起作用。
ul li:not(.year):nth-of-type(4n+2) { clear: left; }
答案 1 :(得分:6)
:not()
似乎不起作用的原因是因为li.year
与其他li
元素(自然)元素类型相同,所以{{1无论:nth-of-type(4n+1)
类如何,都匹配相同的元素。
也不可能顺序堆叠选择器。这不是他们的工作方式。
由于HTML标记规则导致您无法将.year
元素更改为其他元素,并且li
位于future spec且尚未实施,因此您必须更改:nth-match()
公式以适应结构:
:nth-of-type()