Я читал о разнице между двумя свойствами CSS display:none
и visibility:hidden
и столкнулся с термином перекомпоновка DOM.
Заявление было
display: none
вызывает перекомпоновку DOM, аvisibility: hidden
— нет.
Итак, мой вопрос:
Я читал о разнице между двумя свойствами CSS display:none
и visibility:hidden
и столкнулся с термином перекомпоновка DOM.
Заявление было
display: none
вызывает перекомпоновку DOM, аvisibility: hidden
— нет.
Итак, мой вопрос:
Перекомпоновка вычисляет макет страницы. Перекомпоновка элемента повторно вычисляет размеры и положение элемента, а также запускает дальнейшие перекомпоновки дочерних элементов, предков и элементов, которые появляются после него в DOM. Затем он вызывает окончательную перекраску. Перекомпоновка очень дорогая, но, к сожалению, ее легко запустить.
Перекомпоновка происходит, когда вы:
- вставить, удалить или обновить элемент в DOM
- изменить содержимое на странице, например. текст в поле ввода
- переместить элемент DOM
- анимировать элемент DOM
- выполнять измерения элемента, такого как offsetHeight или getComputedStyle
- изменить стиль CSS
- изменить className элемента
- добавить или удалить таблицу стилей
- изменить размер окна
- прокрутить
Для получения дополнительной информации см. здесь: Перерисовка и перекомпоновка: ответственное обращение с DOM
visibility
на none
не является изменением стиля CSS?
- person Qwerty; 26.09.2017
Reflow — это название процесса веб-браузера для пересчета позиций и геометрии элементов в документе с целью повторного рендеринга части или всего документа.
https://developers.google.com/speed/articles/reflow
display:none
скрыть div
, как будто div
не отображается, тогда как visibility:hidden
только скрывает, но место все еще занято
Это означает, что если вы установите display: none;
, ваш браузер будет пересчитывать позиции элементов DOM, если visibility: hidden; - нет. Думаю, это потому, что visibility: hidden;
не меняет размеры элемента в DOM.
visibility: hidden
кажется все еще там (пространство, необходимое для его отображения, все еще занято, он все еще находится в потоке, просто невидим), в то время как элементdisplay: none
полностью выводит ваш элемент из потока . - person Laurent S.   schedule 24.12.2014