:not()疑似クラスは複数の引数を持つことができますか?


746

私が選択しようとしているinputすべての要素typeを除い秒radiocheckbox

多くの人があなたがに複数の引数を置くことができることを示しました:not、しかし、typeとにかくそれを使うことはうまくいかないようです私はそれを試みます。

form input:not([type="radio"], [type="checkbox"]) {
  /* css here */
}

何か案は?


24
「多くの人が複数の引数を:notに入れることができることを示しました」これらの人々は、広く参照されているが重大な誤解を招く特定の記事を引用していたか、CSSではなくjQueryについて話していました。指定されたセレクターは実際にはjQueryでは有効ですが、CSSでは無効です。私は違いを詳しく説明するQ&Aを書きました:stackoverflow.com/questions/10711730/…(回答もその記事に言及しています)
BoltClock

10
おめでとう!公式版が出る2年以上前の例で、有効なCSS4.0を書いたことになります。
ジャックギフィン2017

1
@ジャック・ギフィン:あなたは何の「公式版」を指していますか?この質問は、セレクター4のFPWDの5か月前の日付のみであり、仕様はまだ完成間近ではありません:w3.org/TR/2011/WD-selectors4-20110929/#negationそして、最初の実装の日付は4年半stackoverflow.com/questions/35993727/...
BoltClock

回答:


1537

なぜ:2つだけではなく:not

input:not([type="radio"]):not([type="checkbox"])

はい、意図的です


4
これには高い特異性があります。
2015年

63
ユーモアが得られない人のために:彼は:キャラクターと一緒に「なぜしないで...」と言いました。
totymedli

11
余談ですが、あなたが何かを行うinput:not('.c1'), input:not('c2')と、両方のクラスが一致するように両方のクラスを入力する必要がある "and"状況が発生します。
Cloudkiller 2016年

3
@BoltClock遅延しましたが、:not([attr],[attr])CSV形式も必要です:-P
TylerH

3
@Cloudkillerいいえ、入力要素は選択されません-> "クラスc1なしの入力ORクラスc2なしの入力"
David Callanan

48

プロジェクトでSASSを使用している場合、私はこのミックスインを作成して、私たち全員が望むように動作させるようにしました。

@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;
    }
}

次の2つの方法で使用できます。

オプション1:無視されたアイテムをインラインでリストする

input {
  /*non-ignored styling goes here*/
  @include not('[type="radio"]','[type="checkbox"]'){
    /*ignored styling goes here*/
  }
}

オプション2:無視されたアイテムを最初に変数にリストする

$ignoredItems:
  '[type="radio"]',
  '[type="checkbox"]'
;

input {
  /*non-ignored styling goes here*/
  @include not($ignoredItems){
    /*ignored styling goes here*/
  }
}

いずれかのオプションで出力されたCSS

input {
    /*non-ignored styling goes here*/
}

input:not([type="radio"]):not([type="checkbox"]) {
    /*ignored styling goes here*/
}

6
木こりを頼む代わりに、木こりに金物屋に行って木材を手に入れるようなものではありませんか。
osirisgothra 2015年

何?したがって、.selector {@include not( '。one'、 'ではなく、.selector:not(.one):not(.two):not(.three):not(.four){...}と記述します。 .two '、'。three '、'。four '){...}}?
Daniel Tonon 2015年

2
効率の面で:はい。'はるかに少ない文字とimoより効率的なコード。
大安

:not()=アイテムごとに6文字。'',=アイテムごとに3文字。@includeホットキーに割り当てる必要があるので、それを(入力に関して)1文字としてカウントします。技術的に私はあなたがそんなに嫌いならリストで一重引用符を使う必要さえないと思います。ただし、編集者が気まぐれになるのを防ぐのに役立ちます。それにもとづいて、自分のやり方はそれを書き出すためのよりタイピングの効率的な方法だとまだ思います。
ダニエル・トノン、2015

2
@DaanHeskesは、すべての:not()ケースを書き出すことは、変数を使用してそれらをリストすることを許可しないことも示しています。
plong0

30

CSSセレクター4から開始して、:notセレクターで複数の引数を使用することが可能になります(ここを参照)。

CSS3では、:notセレクターは引数として1つのセレクターのみを許可します。レベル4のセレクターでは、セレクターリストを引数として使用できます。

例:

/* 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;
}

残念ながら、ブラウザのサポートは限られています。現時点では、Safariでのみ機能します。


3
caniuse.comによると、これはまだSafariでのみサポートされています
土曜日、

8
CSS 4ではなく、CSSセレクターレベル4に注意してください。CSS4のようなものはなく、おそらく存在しません。
Edu Ruiz

8

これで問題が発生し、「X:not():not()」メソッドが機能しませんでした。

私はこの戦略にたどり着きました:

INPUT {
    /* styles */
}
INPUT[type="radio"], INPUT[type="checkbox"] {
    /* styles that reset previous styles */
}

それほど楽しいものではありませんが、:not()が好奇心旺盛であったときに私にとってはうまくいきました。理想的ではありませんが、しっかりしています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.