Anonym
@Anonym
Программирую немного )

Странное поведение псевдокласса :nth-child

Наглядный пример
Код
<div class="content">
    <ul class="list">
        <li>1</li>
        <li>2</li>
    </ul>
    <div class="node">node-1</div>
    <div class="node">node-2</div>
    <div class="node">node-3</div>
    <div class="node">node-4</div>
    <div class="node">node-5</div>
    <div class="node">node-6</div>
    <div class="node">node-7</div>
</div>​

.content .node {
    background: gray;
}
.content .node:nth-child(odd) {
    background: red;
}



Проблема в том, что :nth-child(odd) выделяет четные элементы. Если удалить список и оставить только div.node, всё начинает работать как надо. Такое чувство, что сначала выбираются нечетные элементы, потом они фильтруются по классу и уже к ним применяются стили.
Можно ли как-нибудь сделать, чтобы сначала выбирались элементы по классу, потом среди них находились нечетные?
  • Вопрос задан
  • 4869 просмотров
Решения вопроса 1
@Makito
Это обычное поведение, дело в том, что навешивая стили на псевдокласс, вы указываете как его стилизовать, но это не указывает на порядок следования элементов — для .content первым и соответственно нечетным элементом всегда будет ul.
Попробуйте написать таблицу и пропишите стили к первой строке путем tr:first-child, а затем заверните содержимое в тег tbody — вы удивитесь, но стили не применятся, так как для table первым элементом идет не tr а tbody
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
freeek
@freeek
А не подходит вам вариант завернуть всё в див ещё один, скажем, вот так:
<div class="content">
    <ul class="list">
        <li>1</li>
        <li>2</li>
    </ul>
    <div class="nodes">
    <div class="node">node-1</div>
    <div class="node">node-2</div>
    <div class="node">node-3</div>
    <div class="node">node-4</div>
    <div class="node">node-5</div>
    <div class="node">node-6</div>
    <div class="node">node-7</div>
    </div>
</div>​


Ну и стили:
.nodes .node {
    background: gray;
}
.nodes .node:nth-child(odd) {
    background: red;
}
Ответ написан
trueClearThinker
@trueClearThinker
Вам нужен селектор :nth-of-type
Т.о. получится:
.content .node:nth-of-type(odd) {
    background: red;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы