2010-05-09 46 views
61

Tôi gặp sự cố khá lớn, vì tôi cần anathematise để tạo kiểu cho một số loại đầu vào. Tôi có một cái gì đó như:CSS "và" và "hoặc"

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

Nhưng tôi cũng không muốn hộp kiểm kiểu.

Tôi đã thử:

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

Làm thế nào để sử dụng &&? Và tôi sẽ sớm cần sử dụng || và tôi nghĩ rằng việc sử dụng sẽ giống nhau.

Cập nhật:
tôi vẫn không biết làm thế nào để sử dụng ||&& một cách chính xác. Tôi không thể tìm thấy bất cứ điều gì trong tài liệu W3.

+11

* "anathematise" * Yikes. Bạn muốn đe dọa mọi người cố gắng để phong cách hộp kiểm với sự trả thù devine? (Bạn có thể có nghĩa là "miễn trừ" hoặc tương tự, ví dụ: "Tôi cần phải loại bỏ một số loại đầu vào từ quy tắc tạo kiểu.") –

+2

Vâng, tôi không thể tìm thấy bản dịch tốt cho động từ trong ngôn ngữ của tôi;) – Misiur

+2

Tôi nghĩ @ T.J. Đám đông có lẽ đã hiểu điều đó. Nhưng nó * là * buồn cười ... đặc biệt là sự mỉa mai của lỗi chính tả của mình 'thần thánh' = D –

Trả lời

83

&& hoạt động bằng cách xâu chuỗi lại với nhau-nhiều selectors như-vậy:

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

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

Một ví dụ khác:

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

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

"||" hoạt động bằng cách tách nhiều bộ chọn bằng dấu phẩy như vậy:

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

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

Lưu ý, tôi khuyên bạn không nên sử dụng bộ chọn "không" vì nó không được Internet Explorer hỗ trợ. Dựa trên một khảo sát, 60% người dùng sử dụng một số phiên bản của Internet Explorer, vì vậy trang web của bạn sẽ không hoạt động cho nhiều người.

+0

Ok, cảm ơn vì ánh sáng. Tôi ghét các hình thức tạo kiểu tóc, nhưng đó là nhiệm vụ của tôi và trang web không phải của tôi. Tôi sẽ áp dụng các lớp học cho đầu vào. – Misiur

+4

Đây là biểu đồ hữu ích về những gì Internet Explorer hỗ trợ: http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx#selectors – geofflee

+4

Ai sử dụng IE ngay bây giờ :) – Tarun

0

Tôi đoán bạn ghét viết nhiều bộ chọn hơn và chia chúng bằng dấu phẩy?

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

và BTW này

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

vẻ với tôi giống như "đầu vào mà không có cả những loại" :)

+2

Điều đó sẽ không hoạt động, bởi vì bộ chọn đầu tiên sẽ chọn tất cả không phải 'radio', (nhưng _would_ chọn hộp kiểm') và thứ hai sẽ làm ngược lại. Sự kết hợp của cả hai sẽ chứa cả 'hộp kiểm' _and_' radio'. – Eric

+0

Ví dụ đầu tiên sẽ không && cùng nhau, nó sẽ kích hoạt đầu vào không phải là radio cho bộ chọn đầu tiên VÀ đầu vào không phải là hộp kiểm, có nghĩa là tất cả đầu vào :-) –

+0

Bạn đang sai. Sau đó, đầu tiên sẽ áp dụng cho thứ hai, và thứ hai, đầu tiên. – Misiur

29

AND (&&):

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

HOẶC (||):

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

Không, cũng vậy. Nó sẽ áp dụng từ 1 đến 2 và 2 đến 1 – Misiur

+1

@Misiur: Tôi không hiểu. – kennytm

+0

@KennyTM: Nhìn kìa. Sử dụng dấu phẩy sẽ làm một cái gì đó như thế này: .registration_form_right input: not ([type = "radio"]) sẽ áp dụng cho mọi thứ bao gồm cả hộp kiểm, và .registration_form_right input: not ([type = "checkbox"]) sẽ áp dụng cho mọi thứ, bao gồm radio – Misiur

3

Lớp học giả :not không được IE hỗ trợ. Thay vào đó, tôi có một thứ như thế này:

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

Một số sao chép ở đó, nhưng đó là một mức giá nhỏ để trả cho khả năng tương thích cao hơn.

+0

Bạn hoàn toàn đúng. Hovewer, tốt nhất là thêm lớp vào đầu vào. – Misiur

0

Chỉ trong trường hợp nếu có ai bị kẹt như tôi. Sau khi đi qua các bài viết và một số hit và thử nghiệm điều này làm việc cho tôi.

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

Bạn bằng cách nào đó có thể sao chép hành vi của "HOẶC" bằng cách sử dụng & và: không.

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

Xin lỗi,: not (: not) không phải là cú pháp CSS hợp lệ. Nó hoạt động với jQuery mặc dù. –

6

Để chọn tính ab của một yếu tố X:

X[a][b] 

Để chọn tính a HOẶC b của một yếu tố X:

X[a],X[b]