: 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을 성공적으로 작성했습니다.
Jack Giffin

1
@ 잭 기핀 (Jack Giffin) : "공식 판"이란 무엇입니까? 이 질문은 선택기 -4의 FPWD보다 5 개월 이전이며, 사양은 아직 완성되지 않았습니다 . w3.org/TR/2011/WD-selectors4-20110929/#negation 그리고 첫 번째 구현 날짜를 4 년 반 : stackoverflow.com/questions/35993727/…
BoltClock

답변:


1536

왜 : 두 가지만 사용하지 마십시오 :not.

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

네, 의도적입니다


4
이것은 높은 특이성을 가지고 있습니다.
Undistraction

63
유머를 얻지 못하는 사람들을 위해 : 그는 :캐릭터 와 함께 "왜 ..."라고 말했습니다 .
totymedli

11
부수적으로, 만약 당신이 무언가를한다면 input:not('.c1'), input:not('c2'), 두 클래스가 모두 입력을 받아야하는 "and"상황으로 끝나게됩니다.
Cloudkiller

3
@BoltClock 지연, 그러나 :not([attr],[attr])CSV 형식에 대한 욕구도
:-P

3
@Cloudkiller 아니 입력 요소를 선택합니다-> "클래스 c1없이 입력 또는 클래스 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;
    }
}

두 가지 방법으로 사용할 수 있습니다.

옵션 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 2016 년

뭐? .selector {@include not ( '. one', '보다 .selector : not (.one) : not (.two) : not (.three) : not (.four) {...} .two ','. three ','. four ') {...}}?
Daniel Tonon

2
효율성 측면에서 그렇습니다. 더 적은 '문자와 imo보다 효율적인 코드.
Daan

:not()= 항목 당 6 자; '',= 항목 당 3 자 @include핫키에 할당해야하므로 입력 할 때 하나의 문자로 계산합니다. 기술적으로 나는 당신이 그들을 너무 싫어한다면 목록에서 작은 따옴표를 사용해야한다고 생각하지 않습니다. 그들은 편집자가 겁내지 ​​않도록 도와줍니다. 이를 기반으로, 나는 여전히 내 길이 더 타이핑하는 효율적인 작성 방법이라고 생각합니다.
Daniel Tonon

2
@DaanHeskes는 모든 : not () 케이스를 작성해도 변수를 사용하여 나열 할 수는 없습니다.
plong0

30

선택기에서 여러 인수를 사용하여 CSS 선택기 4부터 시작할 :not수 있습니다 ( 여기 참조 ).

CSS3에서 : not selector는 하나의 selector 만 인수로 허용합니다. 레벨 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 , 그것은 여전히 사파리에서 지원하는 것
slanden

8
CSS 4가 아니라 CSS 선택기 레벨 4를 명심하십시오. CSS 4와 같은 것은 없으며 아마도 존재하지 않을 것입니다.
Edu Ruiz

8

이 문제가 발생하여 "X : not () : not ()"메서드가 작동하지 않았습니다.

나는이 전략에 의지했다.

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

그것은 거의 재미가 없지만 : not ()이 pugnacious되었을 때 저에게 효과적이었습니다. 이상적이지는 않지만 견고합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.