CSS:nth-of-type() и: Not() селектор?
я плавал статьи бок о бок, которые имеют ширину 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()
селектор друг на друга?
2 ответов
селектор у вас есть --
ul li:not(.year):nth-of-type(4n+1) { background: yellow; }
-- совершенно верно (как показано, выделив селектор).
Проблема в том, как вы используете 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; }
причина :not()
не работает, потому что li.year
имеет тот же тип элемента, как и остальные li
элементы (естественно), так :nth-of-type(4n+1)
соответствует тем же элементам независимо от .year
класса.
также невозможно последовательно складывать селекторы. Просто они так не работают.
так как вы не можете изменить свой li
элементы к чему-то еще из-за правил разметки HTML и :nth-match()
находится в будущее spec и еще не реализован, вы должны сделать с изменением вашего :nth-of-type()
формула для размещения структуры вместо:
ul li:not(.year):nth-of-type(4n+2) { clear: both; }