CSS „i” i „lub”


114

Mam dość duży problem, ponieważ muszę wykluczyć ze stylizacji niektórych typów danych wejściowych. Miałem coś takiego:

.registration_form_right input:not([type="radio")
{
 //Nah.
}

Ale nie chcę też stylizować pól wyboru.

Próbowałem:

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

Jak używać &&? Będę musiał użyć ||wkrótce i myślę, że użycie będzie takie samo.

Aktualizacja:
nadal nie wiem, jak używać ||i &&poprawnie. Nie mogłem znaleźć niczego w dokumentach W3.


17
„anathematise” Yikes. Chcesz zagrozić ludziom, którzy próbują stylizować pola wyboru, boską zemstą? (Prawdopodobnie miałeś na myśli „wykluczone” lub podobne, np. „Muszę wyłączyć niektóre typy danych wejściowych z reguły stylizacji”).
TJ Crowder

3
Cóż, nie mogłem znaleźć dobrego tłumaczenia na czasowniki
frazowe

4
Myślę, że @TJ Crowder prawdopodobnie to zrozumiał. Ale to było zabawne ... zwłaszcza ironia jego błędnej pisowni `` boskie '' = D
David mówi, że przywróć Monikę

Ale wielki ngram . ; ^)
ruffin

Odpowiedzi:


141

&& działa poprzez łączenie wielu selektorów w ten sposób:

<div class="class1 class2"></div>

div.class1.class2
{
  /* foo */
}

Inny przykład:

<input type="radio" class="class1" />

input[type="radio"].class1
{
  /* foo */
}

|| działa poprzez oddzielenie wielu selektorów przecinkami w ten sam sposób:

<div class="class1"></div>
<div class="class2"></div>

div.class1,
div.class2
{
  /* foo */
}

1
Ok, dzięki za światło. Nienawidzę stylizacji formularzy, ale to moje zadanie, a strona nie jest moja. Zastosuję klasy do danych wejściowych.
Misiur

5
Oto przydatny wykres tego, co obsługuje Internet Explorer: msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx#selectors
geofflee

12
Kto teraz używa IE :)
Tarun

2
notwydaje się działać od IE9 wzwyż (dzięki wykresowi dostarczonemu przez @geofflee).
SharpC,

1
Czy naprawdę nadal martwimy się obsługą starszych wersji IE w 2018 roku? Nawet Microsoft tego nie robi.
Anomalia

48

AND ( &&):

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

LUB ( ||):

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

Nie, też nie. Będzie obowiązywać od 1 do 2 i od 2 do 1
Misiur

@KennyTM: Spójrz. Użycie przecinka da coś takiego: .registration_form_right input: not ([type = "radio"]) zastosuje się do wszystkiego, łącznie z polem wyboru, a .registration_form_right input: not ([type = "checkbox"]) zastosuje się do wszystkiego, w tym radio
Misiur

@Misiur: Oczywiście. Drugi jest dla przypadku „LUB” (aka ||). Zaktualizowano w celu wyjaśnienia.
kennytm

1
@KennyTM: Misiur próbuje powiedzieć… Twoje „||” przykład jest poprawny składniowo, ale jeśli uprościsz wyrażenie, stanie się ono po prostu „.registration_form_right input”, ponieważ suma dwóch selektorów obejmuje wszystkie dane wejściowe.
geofflee

@geo, @Mis: spójrz, pytanie zadane „Będę musiał użyć || wkrótce”, więc jest to sposób na skonstruowanie ||przykładu. Oczywiście staje się to .registration_form_right inputpo uproszczeniu, ale istotą jest to, że używasz ,as|| . Możesz użyć input:not([type="radio"]), input:not([name="foo"])nietrywialnego przykładu.
kennytm

16

Aby wybrać właściwości aI bz Xelementu:

X[a][b]

Aby wybrać właściwości alub bz Xelementem:

X[a],X[b]

4

:notPseudo-klasa nie jest obsługiwane przez IE. Zamiast tego dostałem coś takiego:

.registration_form_right input[type="text"],
.registration_form_right input[type="password"],
.registration_form_right input[type="submit"],
.registration_form_right input[type="button"] {
  ...
}

Trochę tam duplikatów, ale jest to niewielka cena za wyższą kompatybilność.


2

Możesz w jakiś sposób odtworzyć zachowanie „LUB” używając & i: nie.

SomeElement.SomeClass [data-statement="things are getting more complex"]  :not(:not(A):not(B))     {
    /* things aren't so complex for A or B */
}

2
Przepraszamy,: not (: not) nie jest prawidłową składnią CSS. Działa jednak z jQuery.
Serge Profafilecebook

1

Chyba nie lubisz pisać więcej selektorów i dzielić je przecinkami?

.registration_form_right input:not([type="radio"]),  
.registration_form_right input:not([type="checkbox"])  
{  
}

a przy okazji to

not([type="radio" && type="checkbox"])  

wygląda mi bardziej na „wejście, które nie ma obu tych typów” :)


2
To nie będzie działać, ponieważ pierwszy selektor wybierze wszystkie nie- radio(ale byłoby wybrać checkbox), a drugi zrobi odwrotnie. Związek tych dwóch będzie zawierał zarówno checkbox i radio .
Eric

Ten pierwszy przykład nie będzie && ich razem, będzie uruchamiany dla wejść, które nie są radiami dla pierwszego selektora, ORAZ wejść, które nie są polami wyboru, co oznacza wszystkie wejścia :-)
Dan F

Jesteś w błędzie. Następnie pierwsza będzie miała zastosowanie do drugiej, a druga do pierwszej.
Misiur

1

Na wszelki wypadek, gdyby ktoś utknął jak ja. Po przejściu przez post i kilka prób i testów zadziałało to dla mnie.

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

1

Słowo ostrzeżenia. Łączenie ze sobą kilku notselektorów zwiększa specyficzność wynikowego selektora, co utrudnia jego przesłonięcie: po prostu musisz znaleźć selektor ze wszystkimi niewiadomymi i skopiować go i wkleić do nowego selektora.

not(X or Y)Selektor byłoby wspaniale, aby uniknąć pompowania specyfikę, ale myślę, że musimy trzymać się łączenie przeciwieństw, jak w tej odpowiedzi .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.