Sự khác biệt giữa thuộc tính ẩn (HTML5) và quy tắc hiển thị: không (CSS) là gì?


110

HTML5 có một thuộc tính toàn cục mới hidden, có thể được sử dụng để ẩn nội dung.

<article hidden>
   <h2>Article #1</h2>
   <p>Lorem ipsum ...</p>
</article>

CSS có display:nonequy tắc, quy tắc này cũng có thể được sử dụng để ẩn nội dung.

article { display:none; }

Nhìn bề ngoài, chúng giống hệt nhau. Sự khác biệt về mặt ngữ nghĩa là gì? Về mặt tính toán?

Tôi nên xem xét những nguyên tắc nào khi sử dụng cái này hay cái kia?

TIA.

CHỈNH SỬA : Dựa trên phản hồi của @ newtron (bên dưới), tôi đã tìm kiếm nhiều hơn. Các hiddenthuộc tính được tranh luận sôi nổi trong năm ngoái và (rõ ràng) hầu như không làm cho nó vào spec HTML5. Một số người cho rằng nó là thừa và không có mục đích. Từ những gì tôi có thể nói, đánh giá cuối cùng là: Nếu tôi chỉ nhắm mục tiêu các trình duyệt web, không có sự khác biệt. (Một trang thậm chí còn khẳng định rằng các trình duyệt web được sử dụng display:noneđể triển khai thuộc tính ẩn.) Nhưng nếu tôi đang xem xét khả năng truy cập (ví dụ: có lẽ tôi mong muốn nội dung của mình được trình đọc màn hình đọc), thì có một sự khác biệt. Quy tắc CSS display:nonecó thể ẩn nội dung của tôi khỏi trình duyệt web, nhưng quy tắc aria tương ứng (ví dụ:aria-hidden="false") có thể cố gắng đọc nó. Vì vậy, bây giờ tôi đồng ý rằng câu trả lời của @ newtron là đúng, mặc dù có lẽ (có thể cho là) ​​không rõ ràng như tôi có thể muốn. Cảm ơn @newtron vì sự giúp đỡ của bạn.


4
Thậm chí không biết hiddenthuộc tính tồn tại, nhưng chắc chắn là một câu hỏi hay vì nó dường như vi phạm sự phân tách cấu trúc / bản trình bày.
Waldheinz

Đối với những người chưa có niềm vui của đọc spec HTML5 trên thuộc tính này: w3.org/TR/html5/editing.html#the-hidden-attribute
james.garriss


Đọc rồi, @Yigit. Nó cũng hơn một năm tuổi. Và ẩn vẫn nằm trong thông số kỹ thuật. Điều đó sẽ cho tôi thấy rằng đề xuất đã không giành được bất kỳ chuyển đổi nào.
james.garriss

Cảm ơn vì đã chỉnh sửa. Xin lỗi nó không rõ ràng! Thông tin bạn đã thêm ở trên là rất tốt. +1
newtron

Câu trả lời:


63

Sự khác biệt chính dường như là hiddencác phần tử luôn bị ẩn bất kể bản trình bày:

Thuộc tính ẩn không được sử dụng để ẩn nội dung có thể được hiển thị hợp pháp trong bản trình bày khác. Ví dụ: việc sử dụng hidden để ẩn các bảng trong hộp thoại theo thẻ là không chính xác, vì giao diện theo thẻ chỉ là một loại trình bày tràn - người ta cũng có thể hiển thị tất cả các điều khiển biểu mẫu trong một trang lớn với một thanh cuộn. Tương tự, việc sử dụng thuộc tính này để ẩn nội dung chỉ khỏi một bản trình bày cũng không chính xác - nếu nội dung nào đó được đánh dấu là ẩn, nó sẽ bị ẩn khỏi tất cả các bản trình bày, bao gồm cả trình đọc màn hình chẳng hạn.

http://dev.w3.org/html5/spec/Overview.html#the-hiised-attribute

Vì CSS có thể nhắm mục tiêu các loại phương tiện / bản trình bày khác nhau, display: nonesẽ phụ thuộc vào một bản trình bày nhất định. Ví dụ: một số phần tử có thể có display: nonekhi được xem trong trình duyệt trên máy tính để bàn, nhưng không có trong trình duyệt dành cho thiết bị di động. Hoặc, được ẩn trực quan nhưng vẫn khả dụng với trình đọc màn hình.


1
Vì vậy, bạn đang nói rằng màn hình át chủ bài ẩn? Nếu vậy, bạn đang nói rằng mục đích của nó chỉ đơn giản là ghi đè bản trình bày. Hừ!
james.garriss

1
dự đoán của tôi là, vâng, hiển thị át chủ bài ẩn. nhưng, tôi chưa thực sự thử nghiệm với nó. nó sẽ có vẻ vô nghĩa nếu css có thể ghi đè nó.
newtron

2
Ngữ nghĩa học thắng. Nếu không nên có thì hãy xóa nó khỏi luồng tài liệu ở cấp tài liệu. Nếu nó phải là một phần của luồng tài liệu nhưng trong trường hợp certaain bạn không muốn nó trở thành một phần của trải nghiệm hình ảnh thì hãy xử lý nó ở lớp thẩm mỹ. Hãy nhớ rằng một số tác nhân cố gắng phân tích cú pháp CSS và nếu họ xác định rằng thứ gì đó sẽ không được SEEN thì họ hoàn toàn không xuất ra. Tôi nghĩ rằng đây là một hành vi sai lầm nhưng nó có thể hữu ích để biết.

6
Liên quan đến một số nhận xét ở đây (@ james-garris, @newtron), theo developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/… , hiển thị thực sự vượt trội hơn ẩn - đi hình :-)
Jurko Gospodnetić

2
Một điểm khác biệt quan trọng mà tôi đã phát hiện trên trang MDN cho thuộc tính ẩn: "Việc thay đổi giá trị của thuộc tính hiển thị CSS trên một phần tử có thuộc tính ẩn sẽ ghi đè hành vi. Ví dụ: các phần tử theo kiểu display: flex sẽ được hiển thị bất chấp sự hiện diện của thuộc tính ẩn."
mohsinulhaq
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.