Как я могу выбрать все дочерние элементы, кроме последнего?

200

Как выбрать все, кроме последнего, с помощью селекторов CSS3?

Например, для получения только последнего ребенка будет div:nth-last-child(1).

Теги:
css-selectors

6 ответов

377
Лучший ответ

Вы можете использовать отрицательный псевдокласс :not() для :last-child псевдокласс. Представляя CSS Selectors Level 3, он не работает в IE8 или ниже:

:not(:last-child) { /* styles */ }
54

Сделайте это простым:

Вы можете применить свой стиль ко всем div и повторно инициализировать последний с помощью : last-child:

например, в CSS:

.yourclass{
    border: 1px solid blue;
}
.yourclass:last-child{
    border: 0;
}

или SCSS:

.yourclass{
    border: 1px solid rgba(255, 255, 255, 1);
    &:last-child{
        border: 0;
    }
}
  • легко прочитать/запомнить
  • быстро выполнить
  • совместимый с браузером (IE9 +, поскольку он еще CSS3)
  • 7
    Это достаточно хорошее, прагматичное решение и должно быть больше голосов IMO!
  • 4
    По крайней мере, для меня это неприятный запах кода. Вы сознательно применяете правило css к элементу, который вам не нужен, только для того, чтобы затем попытаться создать другой слой, чтобы отменить его. Для меня это плохой запах кода. Я боюсь, что такого рода кодирование CSS может привести к тому, что поддерживать CSS все труднее и труднее. Другими словами, вы создаете код спагетти css.
Показать ещё 1 комментарий
22

Когда придет IE9, будет проще. В то же время вы можете переключить проблему на один, требующий: first-child и стиль противоположной стороны элемента (IE7 +).

17

Решение Nick Craver работает, но вы также можете использовать это:

:nth-last-child(n+2) { /* Your code here */ }

Крис Койер из CSS Tricks сделал приятный : nth tester для этого.

  • 4
    Этот ответ требует редактирования: вы должны будете использовать :nth-last-child(n+2) , а не n+1 . Пример: jsbin.com/xayed/2/edit
  • 1
    Спасибо @supertrue, n+2 правильно. Я только что реализовал это. Мне нравится это решение лучше, чем селектор :not(:last-child) .
Показать ещё 4 комментария
9

Использование решения ник-треск с selectivizr позволяет использовать кросс-браузерное решение (IE6 +)

0

чтобы найти элементы из последних, используйте

<style>
ul li:nth-last-of-type(3n){ color:#a94442}  /**/
</style>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню