2010-05-09 16 views
61

Mam spore problemy, ponieważ muszę trochę anathematizować styl niektórych typów danych wejściowych. Miałem coś takiego:CSS "i" i "lub"

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

Ale nie chcę też zaznaczać 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 korzystać &&? Niedługo będę potrzebował używać numeru || i myślę, że użycie będzie takie samo.

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

+11

* "anathematise" * Jezu. Chcesz zagrozić ludziom, którzy próbują wymodelować pola wyboru z premią diabelską? (Prawdopodobnie chodziło o "zwolnienie" lub podobne, np. "Muszę zwolnić niektóre typy danych wejściowych z reguły stylizacji.") –

+2

Cóż, nie mogłem znaleźć dobrego tłumaczenia na czasownik frazowy z mojego języka;) – Misiur

+2

Myślę, że @ T.J. Crowder prawdopodobnie to rozumiał. Ale to * było * śmieszne ... szczególnie ironia jego błędnej pisowni "boski" = D –

Odpowiedz

83

&& prace sznurka-razem wielu selektorów jak tak:

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

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

Inny przykład:

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

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

"||" działa wiele selektorów, oddzielając przecinkami podobnie tak:

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

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

Na marginesie, polecam przeciwko użyciu wybieraka „not”, ponieważ nie jest obsługiwany przez przeglądarkę Internet Explorer. Na podstawie jednej z ankiet 60% osób korzysta z niektórych wersji Internet Explorera, więc Twoja strona nie będzie działać dla wielu osób.

+0

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

+4

Oto przydatna tabela dotycząca tego, co obsługuje Internet Explorer: http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx#selectors – geofflee

+4

Kto korzysta z IE teraz :) – Tarun

0

Chyba nie chcesz pisać więcej selektorów i dzielić je przecinkiem?

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

i BTW to

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

wygląda dla mnie bardziej jak "wkład, który nie posiada oba te rodzaje" :)

+2

To by nie działało, ponieważ pierwszy selektor wybrałby wszystkie nie-radio ", (ale" chciał "zaznaczyć" pole wyboru "), a drugi zrobiłby odwrotność. Związek tych dwóch elementów zawierałby zarówno "pole wyboru", jak i "radio". – Eric

+0

Ten pierwszy przykład nie będzie razem z nim, to wystrzeli dla wejść, które nie są radiami dla pierwszego selektora, a wejścia AND, które nie są polami wyboru, co oznacza wszystkie wejścia :-) –

+0

Mylisz się. Następnie, pierwszy będzie stosowany do drugiego, a drugi do pierwszego. – Misiur

29

I (&&):

.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"]) 
+0

Nie, też nie. Dotyczy to 1 do 2 i 2 do 1 – Misiur

+1

@Misiur: Nie rozumiem. – kennytm

+0

@KennyTM: Posłuchaj. Użycie przecinka spowoduje wykonanie następujących czynności: .registration_form_right input: not ([type = "radio"]) będzie dotyczyło wszystkich elementów, w tym pola wyboru, a wpis do .registration_form_right: not ([type = "checkbox"]) będzie dotyczyło wszystkich elementów, w tym: radio – Misiur

3

Pseudo-klasa :not nie jest obsługiwana 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"] { 
    ... 
} 

Jest tam trochę dublowania, ale to niewielka cena za wyższą kompatybilność.

+0

Masz całkowitą rację. Jednak najlepiej jest dodać klasę do wprowadzania. – Misiur

0

Na wszelki wypadek, gdy ktoś utknie jak ja. Po przejściu przez post i kilka trafień i próbnych zadziałało to dla mnie.

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

Można jakoś odtworzyć zachowanie "OR" i używając &: nie.

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

Niestety,: not (: not) nie jest prawidłową składnią CSS. Działa jednak z jQuery. –

6

Aby wybrać właściwości a I b elementu X:

X[a][b] 

Aby wybrać właściwości a LUB b elementu X:

X[a],X[b]