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

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

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

13 ответов

Решение

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

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

Упрости:

Вы можете применить свой стиль ко всем элементам 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)

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

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

Крис Койер из CSS Tricks сделал хороший тестер для этого.

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

В css3 есть селектор: not. Используйте:not() с:last-child внутри, чтобы выбрать всех дочерних элементов, кроме последнего. Например, чтобы выбрать все li в ul, кроме последнего li, используйте следующий код.

ul li:not(:last-child){   }

Использование решения Ника Крейвера с http://selectivizr.com/ позволяет использовать кросс-браузерное решение (IE6+)

Если вы используете его внутри родительского элемента, тогда самый простой способ: &:not(:last-child){....} Пример:.row {// parent ... ... ... &:not(:last-child){....}}

Чтобы найти элементы из прошлого, используйте

<style>
ul li:nth-last-of-type(3n){ color:#a94442}  /**/
</style>
.nav-menu li:not(:last-child){
    // write some style here
}

этот код должен применять стиль ко всем

  • кроме последнего ребенка

  • Используя более общий селектор, вы можете добиться этого, как показано ниже.

          & > *:not(:last-child) {/* styles here */}
    

    Пример

          <div class="parent">
      <div>Child one</div>
      <div>Child two</div>
    </div>
    

    Это захватит все дочерние DIV в родительском

    Решение Ника Крейвера дало мне то, что мне было нужно, но сделать это явным для тех, кто использует CSS-in-JS:

    const styles = {
      yourClass: {
        /* Styles for all elements with this class */
        '&:not(:last-child)': {
          /* Styles for all EXCEPT the last element with this class */
        },
      },
    };
    

    вы можете использовать этот ярлык.

          element:not(:last-child) { 
     // Your Css Style here
    }
    

    например, если элемент, который вы хотите стилизовать, - это 'li':

          li:not(:last-child) { 
      border: '1px solid #233';
    }
    

    Как выбрать всех дочерних элементов элемента, кроме последнего, с помощью CSS?

    Ответ: этот код будет работать

    <style>
    .parent *:not(:last-child) { 
      color:red;
    }
    </style>
    
    <div class='parent'>
      <p>this is paragraph</p>
      <h1>this is heading</h1>
      <b>text is bold</b>
    </div>
    
    Другие вопросы по тегам