Яка різниця між прихованим атрибутом (HTML5) та дисплеєм: жодне правило (CSS)?


111

HTML5 має новий глобальний атрибут hidden, який можна використовувати для приховування вмісту.

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

У CSS є display:noneправило, яке також можна використовувати для приховування вмісту.

article { display:none; }

Візуально вони однакові. У чому полягає семантична різниця? Обчислювально?

Які вказівки слід враховувати, коли використовувати те чи інше?

ТІА.

EDIT : На основі відповідей @ newtron (нижче) я більше шукав. hiddenАтрибут був гаряче оскаржується в минулому році , і (мабуть) ледь пробився в HTML5 специфікації. Дехто стверджував, що це зайве і не має мети. З того, що я можу сказати, остаточне оцінювання таке: Якщо я націлений лише на веб-браузери, різниці немає. (Одна сторінка навіть стверджувала, що веб-браузери використовували display:noneдля реалізації прихованого атрибуту.) Але якщо я розглядаю доступність (наприклад, можливо, очікую, що мій вміст буде прочитаний читачами екрану), то є різниця. Правило CSS display:noneможе приховувати мій вміст у веб-браузерах, але відповідне правило арії (наприклад,aria-hidden="false") може спробувати її прочитати. Таким чином, я зараз погоджуюся, що відповідь @ newtron є правильною, хоча, можливо, (напевно) не такою чіткою, як мені б хотілося. Дякуємо @newtron за допомогу.


5
Навіть не знав, що hiddenатрибут існує, але, безумовно, хороший питання, як це, здається, порушує структуру / поділ презентації.
Вальдхайнц

Для тих, хто ще не мав радості прочитати специфікацію HTML5 за цим атрибутом: w3.org/TR/html5/editing.html#the-hidden-attribute
james.garriss


Прочитайте це вже, @Yigit. Це також більше року. І прихований ще в спец. Це вказувало б на те, що пропозиція не здобула перетворень.
james.garriss

Дякуємо за редагування Вибачте, це було не ясно! Інформація, яку ви додали вище, чудова. +1
newtron

Відповіді:


64

Ключова різниця, здається, полягає в тому, що hiddenелементи завжди приховані незалежно від презентації:

Прихований атрибут не повинен використовуватися для приховування вмісту, який законно може бути показаний в іншій презентації. Наприклад, неправильно використовувати приховані для приховування панелей у діалоговому вікні вкладки, оскільки інтерфейс з вкладками - це лише вид переповнення презентації - можна однаково добре показати всі елементи форми на одній великій сторінці за допомогою прокрутки. Аналогічно некоректно використовувати цей атрибут для приховування вмісту лише від однієї презентації - якщо щось позначено прихованим, воно приховане від усіх презентацій, включаючи, наприклад, зчитувачі екрану.

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

Оскільки CSS може орієнтуватися на різні типи медіа / презентації, display: noneце залежатиме від даної презентації. Наприклад, деякі елементи можуть display: noneпереглядатися в настільному браузері, але не в мобільному браузері. Або бути візуально прихованим, але все ще доступним для читання екрана.


1
Так ви кажете, що приховані козирі показують? Якщо так, то ви говорите, що його мета - просто перекрити презентацію. Хммм.
james.garriss

1
я здогадуюсь, що так, приховані козирі. але я насправді з цим не експериментував. здавалося б досить безглуздим, якби css міг його перекрити.
newtron

2
Семантика перемагає. Якщо його не має бути, то видаліть його з потоку doc на рівні документа. Якщо це повинно бути частиною документообігу, але в деяких випадках, ви не хочете, щоб це було частиною візуального досвіду, тоді працюйте з ним на косметичному шарі. Майте на увазі, що деякі агенти намагаються проаналізувати CSS, і якщо вони визначать, що щось не буде видно, вони взагалі не виводять його. Я думаю, це поведінка, яка не сприймає, але це може допомогти дізнатися.

6
Пов’язані з деякими коментарями тут (@ james-garris, @newtron), за версією developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/… , відображати насправді козирі приховано - фігуруйте :-)
Jurko Gospodnetić

2
Одну важливу відмінність, яку я помітив на сторінці MDN щодо прихованого атрибута: "Зміна значення властивості відображення CSS на елементі з прихованим атрибутом переосмислює поведінку. Наприклад, елементи, стильові для відображення: flex буде відображатися, незважаючи на прихований атрибут."
mohsinulhaq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.