Si vous utilisez SASS dans votre projet, j'ai créé ce mixin pour qu'il fonctionne comme nous le souhaitons tous :
@mixin not($ignorList...) {
//if only a single value given
@if (length($ignorList) == 1){
//it is probably a list variable so set ignore list to the variable
$ignorList: nth($ignorList,1);
}
//set up an empty $notOutput variable
$notOutput: '';
//for each item in the list
@each $not in $ignorList {
//generate a :not([ignored_item]) segment for each item in the ignore list and put them back to back
$notOutput: $notOutput + ':not(#{$not})';
}
//output the full :not() rule including all ignored items
&#{$notOutput} {
@content;
}
}
il peut être utilisé de 2 façons :
Option 1 : lister les éléments ignorés en ligne
input {
/*non-ignored styling goes here*/
@include not('[type="radio"]','[type="checkbox"]'){
/*ignored styling goes here*/
}
}
Option 2 : lister d'abord les éléments ignorés dans une variable
$ignoredItems:
'[type="radio"]',
'[type="checkbox"]'
;
input {
/*non-ignored styling goes here*/
@include not($ignoredItems){
/*ignored styling goes here*/
}
}
CSS en sortie pour l'une ou l'autre des options
input {
/*non-ignored styling goes here*/
}
input:not([type="radio"]):not([type="checkbox"]) {
/*ignored styling goes here*/
}
25 votes
"De nombreuses personnes ont montré qu'il est possible de mettre plusieurs arguments dans :not" Soit ces personnes citaient un certain article qui est populairement référencé mais gravement trompeur, soit elles parlaient de jQuery, pas de CSS. Notez que le sélecteur donné est en fait valide en jQuery, mais pas en CSS. J'ai écrit un Q&A détaillant les différences : stackoverflow.com/questions/10711730/ (la réponse mentionne également cet article sur le côté)
13 votes
Félicitations ! Vous avez réussi à écrire du CSS4.0 valide dans votre exemple ci-dessus 2 ans avant la sortie de l'édition officielle.
2 votes
@Jack Giffin : A quelle "édition officielle" faites-vous référence ? Cette question ne précède que de 5 mois le FPWD de selectors-4, et la spécification est toujours loin d'être achevée : w3.org/TR/2011/WD-selectors4-20110929/#negation Et il est antérieur à la première mise en œuvre par 4 ans et demi : stackoverflow.com/questions/35993727/
0 votes
Selon MDN, le sélecteur :not() à arguments multiples est actuellement pris en charge par FF84 et Safari9 : developer.mozilla.org/fr/US/docs/Web/CSS/:not#specifications