Правила CSS visibility:hidden
и display:none
оба приводят к тому, что элемент не виден. Это синонимы?
css
visibility
Крис Но
источник
источник
visibility: hidden
иdisplay: none
будет одинаково эффективен, так как они оба размечают макет, рисуют и комбинируют. Однакоopacity: 0
он функционально эквивалентенvisibility: hidden
шагу макета и не запускает его повторно, поэтому я бы посоветовал использовать его, если вы не возражаете против того, что пустое пространство все еще выделяется (в противном случае используйтеdisplay: none
).opacity: 0
следует использовать с осторожностью при работе со входами или кнопками, так как они все еще существуют и могут вызывать странные взаимодействия с пользователем.Они не синонимы.
display:none
удаляет элемент из обычного потока страницы, позволяя заполнять другие элементы.visibility:hidden
оставляет элемент в нормальном потоке страницы таким образом, что он все еще занимает место.Представьте, что вы в очереди, чтобы прокатиться в парке развлечений, а кто-то в очереди становится настолько хулиганом, что его срывает охрана. Все в очереди будут двигаться вперед на одну позицию, чтобы заполнить пустую ячейку. Это как
display:none
.Сравните это с аналогичной ситуацией, но кто-то перед вами надевает плащ-невидимку. При просмотре строки будет выглядеть, как будто есть пустое пространство, но люди не могут заполнить это пустое пространство, потому что кто-то еще там. Это как
visibility:hidden
.источник
Одна вещь, которую стоит добавить, хотя об этом не спрашивали, это то, что существует третий вариант сделать объект полностью прозрачным. Рассматривать:
(Не забудьте нажать кнопку «Выполнить фрагмент кода» выше, чтобы увидеть результат.)
Разница между 1 и 2 уже была указана (а именно, 2 все еще занимает место). Однако между 2 и 3 существует различие: в случае 3 мышь все равно переключится на руку при наведении курсора на ссылку, и пользователь все равно сможет щелкнуть ссылку, а события Javascript по-прежнему будут срабатывать по ссылке. Это обычно не то поведение, которое вы хотите (но, может быть, иногда это так).
Другое отличие заключается в том, что если вы выделите текст, а затем скопируете / вставите его как обычный текст, вы получите следующее:
В случае 3 текст действительно копируется. Может быть, это будет полезно для некоторых типов водяных знаков, или если вы хотите скрыть уведомление об авторских правах, которое будет отображаться, если неосторожно пользователь скопирует / вставит ваш контент?
источник
display:none
удаляет элемент из потока макета.visibility:hidden
скрывает это, но оставляет пространство.источник
Существует большая разница, когда речь идет о дочерних узлах. Например: если у вас есть родительский div и вложенный дочерний div. Так что если вы напишите так:
В этом случае ни один из div не будет виден. Но если вы напишите так:
Тогда дочерний div будет виден, тогда как родительский div не будет показан.
источник
Они не синонимы -
display: none
удаляют элемент из потока страницы, а остальная часть страницы течет так, как если бы его там не было.visibility: hidden
скрывает элемент от просмотра, но не от потока страницы, оставляя место для него на странице.источник
display: none
удаляет элемент со страницы полностью, и страница создается так, как если бы элемент вообще отсутствовал.Visibility: hidden
оставляет место в потоке документов, даже если вы его больше не видите.Это может иметь или не иметь большого значения в зависимости от того, что вы делаете.
источник
При
visibility:hidden
этом объект по-прежнему занимает вертикальную высоту на странице. Сdisplay:none
него полностью снято. Если у вас есть текст под изображением, и вы это сделаетеdisplay:none
, этот текст сместится вверх, чтобы заполнить пространство, где было изображение. Если вы делаете видимость: скрытый текст останется в том же месте.источник
display:none
будет скрывать элемент и разрушать занимаемое пространство, тогда какvisibility:hidden
будет скрывать элемент и сохранять пространство элементов. display: none также влияет на некоторые свойства, доступные в javascript в более старых версиях IE и Safari.источник
В дополнение ко всем остальным ответам, для IE8 есть важное отличие: если вы используете
display:none
и пытаетесь получить ширину или высоту элемента, IE8 возвращает 0 (в то время как другие браузеры возвращают фактические размеры). IE8 возвращает правильную ширину или высоту только дляvisibility:hidden
.источник
visibility:hidden
сохраняет пространство;display:none
не делает.источник
Он не будет доступен на странице и не занимает места.
он скрывает элемент, но все равно будет занимать то же пространство, что и раньше. Элемент будет скрыт, но все же повлияет на макет.
visibility: hidden
сохранить пространство, в то времяdisplay: none
как не сохранить пространство.Пример отображения: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none
Пример скрытого видимости: https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility
источник
Если для свойства видимости установлено значение
"hidden"
, браузер по-прежнему будет занимать место на странице для содержимого, даже если оно невидимо.Но когда мы устанавливаем объект в
"display:none"
, браузер не выделяет место на странице для его содержимого.Пример:
Посмотреть детали
источник
visibility:hidden
сохранит элемент на странице и займет это место, но не покажет пользователю.display:none
не будут доступны на странице и не занимают места.источник
Еще одно отличие заключается в том, что он
visibility:hidden
работает в действительно старых браузерах иdisplay:none
не работает:https://www.w3schools.com/cssref/pr_class_visibility.asp
https://www.w3schools.com/cssref/pr_class_display.asp
источник
Разница выходит за рамки стиля и отражается в том, как элементы ведут себя при работе с JavaScript.
Эффекты и побочные эффекты
display: none
:clientWidth
,clientHeight
,offsetWidth
,offsetHeight
,scrollWidth
,scrollHeight
,getBoundingClientRect()
,getComputedStyle()
, все возвращаются0
с.Эффекты и побочные эффекты
visibility: hidden
:innerText
(но неinnerHTML
) целевого элемента и потомков возвращает пустую строку.источник
display:none;
не будет отображать элемент и не будет выделять пространство для элемента на странице, тогда какvisibility:hidden;
не будет отображать элемент на странице, но будет выделять пространство на странице. Мы можем получить доступ к элементу в DOM в обоих случаях. Чтобы понять это лучше, посмотрите на следующий код: display: none vs visibility: hiddenисточник
Здесь много подробных ответов, но я подумал, что должен добавить это, чтобы решить проблему доступности, так как это имеет значение.
display: none;
иvisibility: hidden;
не может быть прочитано всеми программами чтения с экрана. Имейте в виду, что пользователи с нарушениями зрения будут испытывать.Вопрос также касается синонимов.
text-indent: -9999px;
это еще один, который примерно эквивалентен. Важным отличиемtext-indent
является то, что он часто будет читаться программами чтения с экрана. Это может быть немного плохим опытом, поскольку пользователи все еще могут переходить по ссылке.Что касается доступности, то, что я вижу сегодня, это комбинация стилей, чтобы скрыть элемент, будучи видимым для программ чтения с экрана.
Хорошей практикой является создание ссылки «Skip to content» на якорь основной части контента. Слабовидящие пользователи, вероятно, не хотят слушать ваше полное дерево навигации на каждой странице. Сделайте ссылку визуально скрытой. Пользователи могут просто нажать вкладку, чтобы получить доступ к ссылке.
Для получения дополнительной информации о доступности и скрытом контенте см .:
источник