Может ли псевдокласс: not () иметь несколько аргументов? - PullRequest
693 голосов
/ 16 апреля 2011

Я пытаюсь выбрать input элементов из всех type с, за исключением radio и checkbox.

Многие люди показали, что вы можете поместить несколько аргументов в :not, ноиспользование type, похоже, не работает в любом случае, я пробую.

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

Есть идеи?

Ответы [ 5 ]

1427 голосов
/ 16 апреля 2011

Почему: не просто использовать два :not:

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

Да, это намеренно

43 голосов
/ 15 мая 2015

Если вы используете 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;
    }
}

может использоваться двумя способами:

Вариант 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*/
}
29 голосов
/ 27 августа 2017

Начиная с 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.

7 голосов
/ 22 октября 2014

У меня были некоторые проблемы с этим, и метод "X: not (): not ()" не работал для меня.

Я прибег к этой стратегии:

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

Это не так весело, но у меня получилось, когда: not () был отвратительным. Это не идеально, но это твердо.

4 голосов
/ 03 августа 2018

Если вы установите плагин cssnext Post CSS , тогда вы можете смело начинать использовать синтаксис, который хотите использовать прямо сейчас.

Использование cssnext превратит это:

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

В это:

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

http://cssnext.io/features/#not-pseudo-class

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...