Как бы я выбрал все, кроме последнего ребенка, используя селекторы CSS3?
Например, получить только последнего ребенка будет div:nth-last-child(1)
.
Как бы я выбрал все, кроме последнего ребенка, используя селекторы CSS3?
Например, получить только последнего ребенка будет div:nth-last-child(1)
.
Ответы:
Вы можете использовать отрицательный псевдокласс:not()
против :last-child
псевдокласса . Будучи представлен CSS селекторов уровня 3, он не работает в IE8 или ниже:
:not(:last-child) { /* styles */ }
div
в примере с OP)
&: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;
}
}
Решение Ника Крейвера работает, но вы также можете использовать это:
:nth-last-child(n+2) { /* Your code here */ }
Крис Койер из CSS Tricks сделал хороший тестер для этого.
:not
псевдо очень дорого. Так что было бы неплохо попытаться избежать этого, где это возможно.
Когда выйдет IE9, будет проще. Однако в большинстве случаев вы можете переключиться на проблему, требующую: first-child и стилизовать противоположную сторону элемента (IE7 +).
Использование решения Ника Крейвера с selectivizr позволяет использовать кросс-браузерное решение (IE6 +)
чтобы найти элементы из прошлого, используйте
<style>
ul li:nth-last-of-type(3n){ color:#a94442} /**/
</style>
Решение Ника Крейвера дало мне то, что мне было нужно, но сделать это явно для тех, кто использует 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 */
},
},
};
.nav-menu li:not(:last-child){
// write some style here
}
этот код должен применять стиль ко всем