J'essaie de sélectionner input
éléments de tous les type
s sauf radio
et checkbox
.
Beaucoup de gens ont montré que vous pouvez mettre plusieurs arguments dans :not
, mais utiliser type
ne semble pas fonctionner de toute façon, je l'essaie.
form input:not([type="radio"], [type="checkbox"]) {
/* css here */
}
Des idées?
Pourquoi: pas simplement utiliser deux :not
:
input:not([type="radio"]):not([type="checkbox"])
Oui, c'est intentionnel
Si vous utilisez SASS dans votre projet, j'ai construit ce mixin pour qu'il fonctionne comme nous le voulons 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 manières:
Option 1: liste 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: listez d'abord les éléments ignorés d'une variable
$ignoredItems:
'[type="radio"]',
'[type="checkbox"]'
;
input {
/*non-ignored styling goes here*/
@include not($ignoredItems){
/*ignored styling goes here*/
}
}
CSS généré pour l'une ou l'autre option
input {
/*non-ignored styling goes here*/
}
input:not([type="radio"]):not([type="checkbox"]) {
/*ignored styling goes here*/
}
À partir de CSS 4, utiliser plusieurs arguments dans le sélecteur :not
devient possible ( voir ici ).
En CSS3, le sélecteur: not permet seulement 1 sélecteur en argument. Dans les sélecteurs de niveau 4, une liste de sélecteurs peut être utilisée comme argument.
Exemple:
/* In this example, all p elements will be red, except for
the first child and the ones with the class special. */
p:not(:first-child, .special) {
color: red;
}
Malheureusement, le support du navigateur est limité . Pour l'instant, cela ne fonctionne que dans Safari.
J'avais quelques problèmes avec cela, et la méthode "X: not (): not ()" ne fonctionnait pas pour moi.
J'ai fini par avoir recours à cette stratégie:
INPUT {
/* styles */
}
INPUT[type="radio"], INPUT[type="checkbox"] {
/* styles that reset previous styles */
}
Ce n'est pas aussi amusant, mais cela a fonctionné pour moi quand: not () était pugnace. Ce n'est pas idéal, mais c'est solide.
Si vous installez le plugin "cssnext" Post CSS , vous pouvez alors commencer à utiliser la syntaxe que vous souhaitez utiliser en toute sécurité.
Utiliser cssnext transformera ceci:
input:not([type="radio"], [type="checkbox"]) {
/* css here */
}
Dans ceci:
input:not([type="radio"]):not([type="checkbox"]) {
/* css here */
}