J'ai une balise div
contenant plusieurs balises ul
.
Je ne peux définir les propriétés CSS que pour la première balise ul
:
div ul:first-child {
background-color: #900;
}
Cependant, les tentatives suivantes pour définir les propriétés CSS pour chaque balise ul
, à l'exception de la première, ne fonctionnent pas:
div ul:not:first-child {
background-color: #900;
}
div ul:not(:first-child) {
background-color: #900;
}
div ul:first-child:after {
background-color: #900;
}
Comment puis-je écrire en CSS: "chaque élément, sauf le premier"?
Une des versions que vous avez publiées fonctionne réellement pour tous les navigateurs modernes (où les sélecteurs CSS de niveau 3 sont pris en charge ):
div ul:not(:first-child) {
background-color: #900;
}
Si vous devez prendre en charge les anciens navigateurs, ou si vous êtes gêné par le limitation du sélecteur :not
(il accepte uniquement un sélecteur simple ), vous pouvez utiliser une autre technique:
Définissez une règle dont la portée est supérieure à celle que vous avez l'intention, puis "révoquez-la" conditionnellement, en la limitant à ce que vous avez l'intention de faire:
div ul {
background-color: #900; /* applies to every ul */
}
div ul:first-child {
background-color: transparent; /* limits the scope of the previous rule */
}
Lorsque vous limitez la portée, utilisez la valeur default pour chaque attribut CSS que vous définissez.
Cette solution CSS2 ("toute ul
après une autre ul
") fonctionne également et est supportée par plus de navigateurs.
div ul + ul {
background-color: #900;
}
Contrairement à :not
et :nth-sibling
, le sélecteur de frères adjacents est pris en charge par IE7 +.
Si vous avez JavaScript modifie ces propriétés après le chargement de la page, vous devez examiner quelques bugs connus dans les implémentations IE7 et IE8. Voir ce lien .
Pour toute page Web statique, cela devrait fonctionner parfaitement.
Puisque :not
n'est pas accepté par IE6-8, je vous suggérerais ceci:
div ul:nth-child(n+2) {
background-color: #900;
}
Donc, vous choisissez chaque ul
dans son élément parent sauf le premier.
Reportez-vous à l'article de Chris Coyer "Utile: nth-child Recipes" pour plus d'informations sur nth-child
examples .
div li~li {
color: red;
}
Prend en charge IE7
not(:first-child)
ne semble plus fonctionner. Au moins avec les versions les plus récentes de Chrome et Firefox.
Au lieu de cela, essayez ceci:
ul:not(:first-of-type) {}
Vous pouvez utiliser n’importe quel sélecteur avec not
p:not(:first-child){}
p:not(:first-of-type){}
p:not(:checked){}
p:not(:last-child){}
p:not(:last-of-type){}
p:not(:first-of-type){}
p:not(:nth-last-of-type(2)){}
p:not(nth-last-child(2)){}
p:not(:nth-child(2)){}
Comme j'ai utilisé ul:not(:first-child)
est une solution parfaite.
div ul:not(:first-child) {
background-color: #900;
}
Pourquoi est-ce parfait? En utilisant ul:not(:first-child)
, nous pouvons appliquer le CSS aux éléments internes. Comme les tags li, img, span, a
etc.
Mais quand utilisé d'autres solutions:
div ul + ul {
background-color: #900;
}
et
div li~li {
color: red;
}
et
ul:not(:first-of-type) {}
et
div ul:nth-child(n+2) {
background-color: #900;
}
Celles-ci limitent uniquement les CSS au niveau ul. Supposons que nous ne puissions pas appliquer CSS sur li
en tant que «div ul + ul li».
Pour les éléments de niveau interne, la première solution fonctionne parfaitement.
div ul:not(:first-child) li{
background-color: #900;
}
etc ...
Vous pouvez utiliser votre sélecteur avec :not
comme ci-dessous, vous pouvez utiliser n’importe quel sélecteur dans la :not()
any_CSS_selector:not(any_other_CSS_selector){
/*YOUR STYLE*/
}
any_CSS_selector:not(:first-child){
/*YOUR STYLE*/
}
any_CSS_selector:not(:first-of-type){
/*YOUR STYLE*/
}
any_CSS_selector:not(:checked){
/*YOUR STYLE*/
}
any_CSS_selector:not(:last-child){
/*YOUR STYLE*/
}
any_CSS_selector:not(:last-of-type){
/*YOUR STYLE*/
}
any_CSS_selector:not(:first-of-type){
/*YOUR STYLE*/
}
any_CSS_selector:not(:nth-last-of-type(2)){
/*YOUR STYLE*/
}
any_CSS_selector:not(:nth-last-child(2)){
/*YOUR STYLE*/
}
any_CSS_selector:not(:nth-child(2)){
/*YOUR STYLE*/
}