2012-05-28 37 views

Trả lời

3

a great doco về việc sử dụng bộ chọn CSS hiệu quả, tập trung vào quy tắc với bộ chọn quá trình độ:

selectors ID là duy nhất theo định nghĩa. Bao gồm thẻ hoặc lớp học vòng loại chỉ thêm thông tin dư thừa cần được đánh giá không cần thiết.

Thay vì chỉ áp dụng phong cách cho một phần tử với id main, chọn của bạn sẽ đủ điều kiện lại nguyên tố này bằng cách kiểm tra hay không nó cũng là một div (theo thứ tự đó).Để làm rõ: selectors css được đánh giá phải sang trái, không giống như cú pháp selector tương tự khi sử dụng trong jQuery, vv

gợi ý

Re pixelistik rằng div#main là cụ thể hơn #main - vâng, đó là chính xác về mặt kỹ thuật, tuy nhiên nếu bạn phải khu nghỉ mát này để nâng cao tính đặc hiệu của quy tắc, rất có thể cấu trúc của CSS bạn đang làm việc không phải là suy nghĩ thông qua như nó phải được.

2

Vì vậy, sự khác biệt là:

Khi bạn viết kiểu div#main sẽ chỉ dành cho thành phần <div>. Khi bạn viết #main nó có thể được sử dụng như phong cách cho <div>, <span>, <p> vv

Và những gì khuyên là khó để nói, mỗi nhà phát triển nó có nó khác nhau. Vì vậy, tôi sử dụng ví dụ span.<nameClass> khi được lồng trong ví dụ <li>.

#nav li span.href a { 
... 
} 

Tôi nghĩ rằng nó được sử dụng khi bạn muốn một người nào đó lớp học có tên cụ thể chỉ có thể có một phần tử.

Vì vậy, khi bạn viết span#href, nó sẽ chỉ hoạt động cho <span id="href">Simply dummy text</span> không dành cho người khác. Khi bạn viết #href, nó sẽ hoạt động cho <span id="href">Simply dummy text</span> hoặc <a href="#" id="href">Link</a> nhưng cả hai đều chính xác khi bạn cũng hỏi về điều này. Sự khác biệt tôi đã viết ở trên.

+0

Cảm ơn, nhưng liên quan đến mã được cung cấp? Cả hai divs. – Teson

+0

để chỉnh sửa man :-) – Sajmon

+0

ID va chạm? Tôi không bao giờ đến đó ... – Teson

2

#main khớp với mọi thứ có ID 'chính', trong khi div#main chỉ khớp với <div> yếu tố có ID chính. Lý tưởng nhất, bạn không bao giờ nên có hai yếu tố với cùng một ID, do đó, thực tế cả hai không tạo sự khác biệt, nhưng có lẽ các vấn đề liên quan đến hiệu suất liên quan đến việc chỉ định div khiến cho kết quả tìm kiếm nhanh hơn.

+2

Làm cho nó chậm hơn thực sự. Như tôi đã nói trong câu trả lời của tôi dưới đây, bộ chọn css được phân tích cú pháp RTL, có nghĩa là khi tìm một phần tử với một id 'main', công cụ rendering sẽ phải kiểm tra xem nó có phải là' div' hay không. Trong khi các nỗ lực xung quanh điều này có thể được coi là không đáng kể, tôi sẽ lo lắng nhiều hơn về tác động cấu trúc và có thể ghi đè lên đặc biệt không mong muốn. –

+2

@ o.v. Đó là một loại phần tử được kiểm tra sau khi một trình duyệt tìm thấy nó bằng ID của nó không có gì để làm với phân tích cú pháp RTL. Phân tích RTL hoạt động trên các bộ phối hợp. – BoltClock

+0

@BoltClock: xem xét hai kịch bản, khi một '#aaa .bbb' được công cụ kết xuất đánh giá và khi nó được sử dụng để khớp với các phần tử DOM w/JS. Trong trường hợp đầu tiên, tất cả các phần tử khớp với '.bbb' sẽ được tìm thấy trước tiên, và sau đó lại đủ điều kiện bằng cách tra cứu cha mẹ (RTL) của chúng. Trong kịch bản thứ hai, một phần tử khớp với '# aaa' là (nhanh) được tìm thấy và sau đó phần tử con của nó được tìm kiếm đối sánh với' .bbb'. Đây là những gì tôi có nghĩa là bằng cách nói * bộ chọn css được phân tích cú pháp RTL * - hai cách khác nhau cực đoan để giải quyết cùng một vấn đề. Và tôi không biết tại sao, tôi chỉ đi với dòng chảy :) –

1

Cả hai đều chính xác.

div#main cụ thể hơn #main, có nghĩa là các kiểu được xác định bằng công cụ chọn đầu tiên sẽ ghi đè kiểu được chọn thứ hai.

Dưới đây là một giới thiệu tốt để CSS specifity: http://htmldog.com/guides/cssadvanced/specificity/

Các vấn đề liên quan