2010-09-14 33 views
16

Một trong những người ở đây tại nơi làm việc đặt tên thẻ ở trước tất cả các bộ chọn CSS của mình cho các id phần tử. Ví dụ:CSS: Sử dụng loại thẻ trước ID?

div#footer { 

} 

này, như trái ngược với chỉ:

#footer { 

} 

lý do của ông là rằng đây là một tra cứu nhanh hơn đối với hầu hết các trình duyệt vì họ không cần phải kiểm tra các id thuộc tính của mỗi loại phần tử - chỉ cần div yếu tố. Ông cũng chỉ ra rằng điều này nên được thực hiện với các lớp học (ví dụ: div.header-label cho các yếu tố <div class="header-label"...).

Âm thanh hợp lý và hợp lý, nhưng có đúng không?

+0

Thay đổi ví dụ của bạn thành div.footer, vì như bạn đã nói, đồng nghiệp của bạn cho biết nên thực hiện với các lớp học. Nhiều câu trả lời chỉ ra rằng một id nên là duy nhất trong ngữ cảnh của một trang. – JohnB

+0

"trong ngữ cảnh của một trang" - Và đó thực sự là mấu chốt của vấn đề. Bạn có thể sử dụng công cụ chọn thẻ + id để sử dụng ID khác nhau trên các trang khác nhau, vì việc thêm thẻ chỉ định rằng các quy tắc sẽ được áp dụng khi chúng được tìm thấy cùng nhau. – d2burke

+0

Cũng thấy: http://stackoverflow.com/q/3666286/124238 –

Trả lời

19

đồng nghiệp của bạn là sai, đó là hoàn toàn ngược lại:

Nhưng cũng có nhớ rằng CSS tối ưu hóa là vi tối ưu hóa và cuối cùng chỉ không thích hợp trong hầu hết các trường hợp:

+1

+1 cho tài liệu tham khảo đẹp! – mkoistinen

+2

liên kết google: * "Ưu tiên bộ chọn lớp và ID trên bộ chọn thẻ." * Tôi ước tôi đã hỏi câu hỏi này 3 năm trước! **: (** Tôi nghĩ tốt nhất nên sử dụng bộ chọn thẻ càng nhiều càng tốt, triết lý CSS của tôi là ngược lại! Câu hỏi tuyệt vời Foobarbis và câu trả lời tuyệt vời Dave! – JohnB

2

Có thể không đúng; công cụ bố cục có khả năng xây dựng một hashtable.

Tuy nhiên, nó chắc chắn sẽ không tạo sự khác biệt đáng chú ý, trừ khi trang của bạn có số lượng yếu tố điên rồ. (Trong trường hợp này bạn gặp vấn đề tồi tệ hơn)

Bạn nên sử dụng bất kỳ bộ chọn nào dễ đọc hơn.
Ngoài ra, hãy nhớ rằng ai đó có thể thay đổi #footer thành <span>.

+0

Tôi tự hỏi nếu Jon Skeet hoặc ai đó sẽ biết chắc chắn câu trả lời cho câu hỏi này ít nhất là xa như Chrome là liên quan. – JohnB

+1

@JohnB: Đọc nguồn WebKit. (và may mắn) – SLaks

0

Cá nhân tôi không nghĩ rằng hiệu suất có thể là một vấn đề ở đây, trừ khi nhiều phong cách cần phải được thay đổi theo chế độ ăn tối.

Trong mọi trường hợp, hai ví dụ khác nhau về mặt ngữ nghĩa vì #footer sẽ bao gồm các trường hợp mà div#footer sẽ không. Vì vậy, ngoài hương vị cá nhân, chúng ta đang nói về hai thứ khác nhau. Sau đó, nếu bạn thực sự sử dụng ID vì chúng nên được sử dụng, không có sự khác biệt nào cả ..

+2

Nó sẽ không bao gồm bất kỳ/hợp lệ/trường hợp mặc dù, vì ID nên là duy nhất bất kể các thẻ họ đang ở trên. – mkoistinen

+0

vâng, nhưng tôi đã từng thấy mọi thứ về CSS ràng buộc tốt nên tốt hơn là hãy chắc chắn, trong bất kỳ trường hợp nào tôi đã xác định ngay bây giờ! – Jack

1

Thời gian duy nhất đây là một thực tiễn hữu ích, IMHO, là khi bạn có nhiều loại thẻ sử dụng cùng một ID, tất nhiên, không hợp lệ. Tuy nhiên, nếu bạn được cung cấp một đoạn HTML/CSS không hợp lệ để bắt đầu và không thể sửa chữa nó đúng cách, việc sử dụng TAGTYPE # ID có thể hữu ích.

0

Gắn thẻ vào id cụ thể hơn. Bạn có thể tạo id trong css mà bạn có thể áp dụng cho bất kỳ phần tử nào, nhưng nếu bạn đính kèm tên thẻ, bạn CHỈ có thể sử dụng các quy tắc đó (trừ khi bạn liệt kê các phần tử, lớp hoặc id khác bằng dấu phẩy) bằng id THAT :

http://www.w3.org/TR/CSS2/selector.html#id-selectors

0

Thật khó để tưởng tượng việc sử dụng hợp lệ cho CSS "tính năng" này.

Giả sử một biểu mẫu có trường year.

input#year { 
    width: 4em; 
} 

Điều này sẽ ngăn quy tắc áp dụng nếu, ví dụ trường được hiển thị dưới dạng select.

Đối với yếu tố hiệu suất, tôi nghĩ rằng @Dave thực hiện việc gỡ lỗi tốt nhất.

+0

Vì vậy, tôi đang chơi quỷ ở đây: Điều gì sẽ xảy ra nếu cùng một ID đó được sử dụng trong một trang khác của một ứng dụng lớn trong một thẻ riêng biệt? Giả sử bạn muốn sử dụng ID đó để tham chiếu đến một giá trị trong jQuery cho dù loại phần tử đó là gì. hãy chắc chắn để tạo kiểu cho nó theo cách nào đó PHỤ LỤC trên loại phần tử? – d2burke

+0

Như tôi đã nói, thật khó tưởng tượng. – harpo

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