131 votes

Sélecteur d'enfants Sass et combiné

Je viens de découvrir Sass et j'en ai été tellement excité.

Dans mon site Web, j'implémente un menu de navigation arborescent, stylisé à l'aide du combinateur enfant ( E > F ).

Existe-t-il un moyen de réécrire ce code avec une syntaxe plus simple (ou meilleure) dans Sass ?

 #foo > ul > li > ul > li > a {
  color: red;
}

231voto

arnaud576875 Points 35281

Sans le sélecteur d'enfants combiné, vous feriez probablement quelque chose de similaire à ceci :

 foo {
  bar {
    baz {
      color: red;
    }
  }
}

Si vous voulez reproduire la même syntaxe avec > , vous pouvez faire ceci :

 foo {
  > bar {
    > baz {
      color: red;
    }
  }
}

Cela compile à ceci:

 foo > bar > baz {
  color: red;
}

Ou en culot :

 foo
  > bar
    > baz
      color: red

19voto

BoltClock Points 249668

Pour cette seule règle que vous avez, il n'y a pas de moyen plus court de le faire. Le combinateur enfant est le même en CSS et en Sass/SCSS et il n'y a pas d'alternative.

Cependant, si vous aviez plusieurs règles comme celle-ci :

 #foo > ul > li > ul > li > a:nth-child(3n+1) {
    color: red;
}

#foo > ul > li > ul > li > a:nth-child(3n+2) {
    color: green;
}

#foo > ul > li > ul > li > a:nth-child(3n+3) {
    color: blue;
}

Vous pouvez les condenser à l'un des éléments suivants :

 /* Sass */
#foo > ul > li > ul > li
    > a:nth-child(3n+1)
        color: red
    > a:nth-child(3n+2)
        color: green
    > a:nth-child(3n+3)
        color: blue

/* SCSS */
#foo > ul > li > ul > li {
    > a:nth-child(3n+1) { color: red; }
    > a:nth-child(3n+2) { color: green; }
    > a:nth-child(3n+3) { color: blue; }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X