2010-09-27 30 views
6

Nếu tôi có một cấu trúc như thế này:Nếu Bộ chọn CSS là #id, bạn có cần phải định phạm chúng không?

<div id="main"> 
    <div id="sidebar"> 
    <div id="tag-cloud"/> 
    </div> 
</div> 

... những gì đang thực hành tốt nhất cho css:

#main #sidebar #tag-cloud { ... } 
#tag-cloud { ... } 

Hoặc nếu id='main' là thay vì class='main', nó sẽ là tồi tệ hơn để phạm vi? Tôi chỉ tự hỏi, nếu bạn có id, bạn cần phải phạm vi ở tất cả?

+0

cho yo ur tiện lợi: http://www.stuffandnonsense.co.uk/archives/images/specificitywars-05v2.jpg nhưng tâm trí câu trả lời dưới đây. –

Trả lời

13

Tùy thuộc. Hầu hết thời gian, bạn có thể nói:

#tag-cloud { ... } 

là tốt nhất (hiệu suất, xem bên dưới). Điều này:

#main #sidebar #tag-cloud { ... } 

chỉ thực hiện rất nhiều kiểm tra không cần thiết bị ràng buộc để thành công.

Trừ bạn muốn làm điều này:

#sidebar #tag-cloud { ... } 
#not-sidebar #tag-cloud { ... } 

trong trường hợp Phạm vi xác định một cái nhìn khác nhau tùy thuộc vào nơi #tag-cloud là. Tất nhiên, có thể chỉ có một #tag-cloud trong trang của bạn, nhưng CSS của bạn có thể xử lý cả hai trường hợp.


Kiểm tra CSS được thực hiện từ phải sang trái. Đây:

#main #sidebar #tag-cloud { ... } 

để đánh giá:. "Yếu tố với ID tag-cloud mà có một mẹ với ID sidebar mà có một mẹ với ID main Nếu đó là cách trang web của bạn trông nào, đó chỉ là một toàn bộ rất nhiều vô ích DOM traversal.

Không để nói về một thực tế rằng với quá cụ thể, xác định phạm vi thừa toàn bộ CSS phải thay đổi trong rất nhiều nơi nếu bạn sửa đổi cấu trúc trang web của bạn, mà bằng cách nào đó bất chấp mục đích này.

+0

Đây rõ ràng là một câu trả lời kỹ thuật tốt. Tôi nghĩ rằng đó cũng là một khía cạnh khái niệm về điều này. Nếu "cái gì đó" có cùng ID với "cái gì đó khác" thì nó mâu thuẫn với toàn bộ ý tưởng của một ID. Một ID nên xác định duy nhất một điều duy nhất, do đó, hai thứ khác nhau sẽ không bao giờ có cùng một ID.Thẻ tag_cloud bên cạnh không giống với thẻ not_sidebar tag_cloud từ phối cảnh bố cục, do đó, hai thẻ đó không được có cùng một ID để bắt đầu. Một ý tưởng tốt là để tiền tố các ID (ví dụ # sidebar_tag-cloud, # not_sidebar_tag-cloud) @Lance Pollard – Rythmic

+0

@Rythmic Tôi không nói rằng một cái gì đó có thể có cùng một ID như một cái gì đó khác nhau. – Tomalak

+0

Tôi không có ý nói rằng bạn đã làm. Xin lỗi nếu nó có vẻ như vậy. Nhận xét chỉ đơn giản là nhằm bổ sung cho câu trả lời của bạn bằng cách phản ánh nó từ một quan điểm khác. – Rythmic

3

Thông thường, bạn không nên có xung đột ID trong tài liệu html của mình. Vì vậy, từ quan điểm đó, phạm vi trên ID là một sự lãng phí thời gian.

Tuy nhiên, nếu bạn không chính xác có nhiều phần tử có cùng id thì bạn có thể cần sử dụng phạm vi. Nhưng điều này dẫn đến html không hợp lệ và có thể gây ra các hậu quả không mong muốn khác và do đó nên tránh.

0

ID phải là duy nhất trong một tài liệu, trừ khi bạn vì một lý do chia sẻ chúng qua các trang, nơi #something có thể là một điều hoàn toàn khác nhau trong một container khác nhau trên một trang khác, tôi muốn chỉ cần sử dụng:

#tag-cloud { ... } 
1

Tôi không nghĩ rằng nó có ý nghĩa nhiều với id phạm vi, Tuy nhiên tôi thích có tất cả các bộ chọn khác của tôi được dò tìm đến một id.

Có thể bạn nên tự hỏi mình nếu bạn cần tất cả các id hoặc nếu một số phải có lớp học hoặc không có gì cả. Càng đơn giản càng đẹp.

1

ID nên là duy nhất, nên phạm vi nên không cần thiết.Một công cụ javascript tốt sẽ sử dụng các ID này làm khóa để tra cứu nhanh một phần tử bằng ID, do đó việc dò tìm sẽ thực sự làm chậm mọi thứ.

Nhưng, bạn có thể có tài liệu không hợp lệ với nhiều ID, trong trường hợp đó, phạm vi sẽ đảm bảo bạn không gặp phải nhiều yếu tố bất ngờ. Nhưng trong trường hợp này, bạn nên thực sự sửa chữa ID của bạn để thay thế.

2

Tôi luôn phạm vi. Bạn chỉ có thể có một trang tag-cloud trên trang này, nhưng bạn có thể có một khác nhau tag-cloud trên một khu vực khác trên trang web của bạn, yêu cầu một kiểu khác.

Cá nhân, tôi không bao giờ sử dụng ID trong CSS của mình. Chúng hạn chế và có thể gây ra vấn đề nếu trang web tĩnh của bạn được thay đổi thành một trang động, trong đó các ID được trả lại (ví dụ: ASP.NET).

4

Bạn đã tự mình nói: ID là duy nhất. Vì vậy, phạm vi chỉ thêm lộn xộn. Nhưng nếu chúng được cố ý có cho mục đích tài liệu thuần túy, tôi sẽ thay thế chúng bằng cách chỉ thụt lề các quy tắc.

Ví dụ: thay vì

#main { 
    /**/ 
} 

#main #sidebar { 
    /**/ 
} 

#main #sidebar #tag-cloud { 
    /**/ 
} 

làm

#main { 
    /**/ 
} 

    #sidebar { 
     /**/ 
    } 

     #tag-cloud { 
      /**/ 
     } 
+1

Tôi thích bình luận cho indents nói chung (bởi vì bạn có thể kết thúc * thực sự * lồng sâu và stylesheet của bạn trở thành các tab 80%) nhưng điểm tốt. – annakata

+2

Không phạm vi cũng nhanh hơn rất nhiều, để thực hiện và nhập. –

+0

ID lồng nhau sâu sắc có thể biểu thị sự cố ở đâu đó trong thiết kế. Tôi chưa bao giờ có nhu cầu đi nhiều hơn 3, 4, có thể là 5 đứa trẻ sâu và cho những trang web khá phức tạp. Tôi bằng cách này cũng thường đặt một bình luận toàn phần (thụt vào) trên mỗi thụt đầu dòng. – BalusC

0

thực hành tốt nhất của id là sử dụng như wrapper

<div id="main"><!--main wrapper--> 
    <div id="section"><!--section wrapper--> 
    <p>something</p> 
    </div> 
    <div id="sidebar"><!--sidebar wrapper--> 
    <div class="tag-cloud"> 
    </div> 

</div> 

tốt hơn bắt đầu của bạn với Id cuối cùng

#sidebar #tag-cloud { ... } 

AS trên công cụ báo lỗi tốc độ trang google, khuyên bạn nên sử dụng độ sâu ít hơn như bộ chọn css

0

Không, bạn không nên dùng id vì chúng phải là duy nhất trên mỗi trang. Nếu bạn có nhiều phần tử sử dụng cùng một ID, HTML của bạn sẽ không xác thực và nó sẽ gây ra sự cố khi cố truy cập DOM qua javascript.

Ví dụ, nếu bạn có nhiều của Id trên trang:

var myElements = document.getElementById('myduplicateid') 

Would return phần tử đầu tiên nó thấy phù hợp mà có thể không được kết quả mong muốn.

nếu bạn đang gặp vấn đề với đến với id cho các đối tượng similiarly nhóm, tôi khuyên bạn nên làm một cái gì đó như thế này (nút ví dụ đài phát thanh)

<input type = "radio" id = "my_radio:1" value = "1" name = "my_radio"> 
<input type = "radio" id = "my_radio:2" value = "2" name = "my_radio"> 

Trong javascript của bạn, sau đó bạn sẽ làm điều gì đó như thế này:

var my radio = document.getElementById('my_radio:1') 

Hoặc các bạn đang sử dụng jQuery, một cái gì đó như thế này:

var my radios = $('#my_radio\\:1') # Must escape colon with double slash since it's a special character in jQuery 
Các vấn đề liên quan