Настройка видимости против скрытия/шоу
В чем разница между element.css('visibility', 'visible')
и element.show()
. Кроме того, в чем разница между element.css('visibility', 'hidden')
и element.hide()
?
Обновить. Кроме того, что является самым правильным способом скрыть элемент и все его поддеревья?
Обновить N2: что является правильным способом узнать, является ли элемент (и его поддерево) видимым: element.is(':visible')
или element.css('visibility')
?
Обновить N3. Есть ли способ скрыть элемент (полностью), но он все равно сохранит пространство/область на странице браузера? (насколько мне известно - правильным способом было бы позвонить hide()
, но это может привести к визуальной реструктуризации страницы.
Ответы
Ответ 1
Видимость по-прежнему будет сохранять пространство в вашем браузере.
Скрытый элемент установлен в display: none
, поэтому все пространство, занимаемое этим элементом, сжимается.
Если вы установите только элемент visibility: hidden
, элемент будет просто прозрачным, но пространство занято так, как будто элемент все еще существует.
.hide()
равно .css('display', 'none')
.show()
равно .css('display', 'block')
- я уверен, что jQuery делает какую-то магию здесь, чтобы решить, действительно ли это будет block
, но это несколько равно.
@Update:
После того, как вы скроете элемент с помощью .hide()
(или .css('display', 'none')
), все элементы, расположенные вниз по дереву, которые являются дочерними элементами этого элемента, также будут скрыты.
@Update 2:
Если вы используете .hide()
и .show()
, то .is(':visible')
Если вы используете атрибут css видимости, то .css('visibility')
@Update 3:
То, что делает .css('visibility', 'hidden')
, он скрывает элемент без реструктуризации страницы. .hide()
полностью удалит элемент.
Ответ 2
jquery.hide() эквивалентно вызову .css('display', 'none')
и jquery.show эквивалентно вызову .css('display', 'block')
Метод .css()
просто устанавливает свойство видимости.
С точки зрения css точки зрения:
visbility : hidden
Скрытое значение делает созданные поля невидимыми без их удаления из макета. Коробки-потомки могут быть сделаны видимыми. Смотрите это
display : none
Значение none не приводит к тому, что элемент вообще не генерирует поле. Потоки потомков также не могут создавать поля, даже если их свойство отображения установлено на что-то иное, чем ничто. См. Это
С скрытым элемент все еще сгенерирован.
Ответ 3
Взято с w3schools.com:
visibility: hidden скрывает элемент, но все равно будет занимать то же пространство, что и раньше. Элемент будет скрыт, но все равно повлияет на макет.
display: none скрывает элемент и не занимает места. Элемент будет скрыт, и страница будет отображаться, поскольку элемента там нет:
Ответ 4
Они устанавливают 2 разных свойства css: hide/show устанавливает свойство display
в none
, show удаляет этот параметр, чтобы использовать значение по умолчанию (например, "block" для div).
Различие, как указывают другие ответы, состоит в том, что вызов hide
на элементе означает, что он (и все его предки) не займет какое-либо пространство. Если установка visibility
в hidden
будет эффективно просто сделать элементы полностью прозрачными (но все равно занимать место).
Для ответов на ваши изменения:
- Скрыть всех предков (это делается автоматически с помощью обоих методов).
- Используйте
element.is(':visible')
, так как это выполняет проверку как свойств visibility
, так и display
и чтобы увидеть, не являются ли height
и width
не 0, он также рекурсивно рекурсивно реализует предков, тогда как element.css('visibility')
просто сообщает вам visibility
этого элемента.
- Настройка
element.css('visibility', 'hidden')
сделает это - не вызывает element.hide()
.
Ответ 5
В дополнение к объяснению bardiir вот хорошая демонстрация "display: none" и "visibility: hidden"
http://www.w3schools.com/css/css_display_visibility.asp
"удалить" наборы кнопок "display: none" и "hide" наборы кнопок "visibility: hidden".