Как скрыть элементы, не занимая их место на странице?

228

Я использую, visibility:hiddenчтобы скрыть определенные элементы, но они все еще занимают место на странице, пока скрыты.

Как я могу заставить их полностью исчезнуть визуально, как будто их нет в DOM вообще (но фактически не удаляя их из DOM)?

ripper234
источник
Этот вопрос очень мертвый, но я добавляю комментарий, потому что недавно я оказался в ситуации, в которой могут столкнуться другие. Мне нужно было скрыть элемент, чтобы он сохранил егоoffsetTop , и я display:noneдолжен был установить offsetTopзначение 0. Мое решение здесь состояло в том, чтобы использовать visibility: hiddenзатем установить ширину и высоту на 0. Как только мне нужно было сделать элемент видимым снова, я удалил три атрибута, используя Javascript. Немного хакерское решение, но оно хорошо работает почти во всех случаях использования.
rappatic

Ответы:

302

Попробуйте установить, display:noneчтобы скрыть и установить, display:blockчтобы показать.

Huusom
источник
не возможно удалить элемент из человека. используя эту опцию также. Прочитайте вопрос
Пранай Рана
26
Не все элементы должны быть display: block, некоторые должны быть установлены display: inline(например, <span>или <a>или <img>элементы DOM).
Мауро
2
@pranay вопрос говорит, чтобы скрыть их, чтобы не удалить их из DOM.
Мауро
6
@pranay: Вопрос не очень хорошо выражен, но Huusom решает проблему, с которой сталкивается пользователь.
Клаудио Реди
1
Улучшение: создайте класс CSS hiddenс именем display: none. Добавьте класс к элементу, чтобы скрыть его, удалить его показать. При удалении его displayсвойство восстанавливается до элемента по умолчанию.
Алехандро С Де Бака
44

вместо этого используйте стиль

<div style="display:none;"></div>
Salil
источник
1
К сожалению, это не работает для меня - с использованием дисплея: никто не оставляет пустое место.
mbuc91
15

Использовать display:noneэто хороший вариант, просто удалить элемент, НО он также будет удален для программ чтения с экрана . Есть также обсуждения, если это влияет на SEO. Есть хорошая, короткая статья на эту тему в A List Apart

Если вы действительно хотите скрыть, а не удалить элемент, лучше используйте:

div {
  position: absolute; 
  left: -999em;
}

Таким образом, это может быть также прочитано программами чтения с экрана.

Единственным недостатком этого метода является то, что этот DIV фактически отображается, и это может повлиять на производительность , особенно на мобильных телефонах.

Альбот - undkonsorten.com
источник
2
если вы решите позиционировать что-то абсолютное, с которым вы можете в большинстве случаев работать visibility: hidden;, допустим, у вас есть другие абсолютные элементы, у которых не будет конфликта для пространства, только конфликт z-index. Просто чтобы скрыть элемент, с которым я бы пошелvisibility
Dejan.S
10

Смотри, вместо того, чтобы visibility: hidden;использовать display: none;. Первый вариант будет скрыт, но по- прежнему занимает место, а второй параметр будет скрыт и не займет никакого места.

Алехандро Нава
источник
6

Ответ на этот вопрос гласит: использовать display: none и display: block, но это не помогает тем, кто пытается использовать CSS-переходы для отображения и скрытия содержимого с помощью свойства видимости.

Это также сводило меня с ума, потому что использование дисплея убивает любые CSS-переходы.

Одним из решений является добавление этого в класс, который использует видимость:

overflow:hidden

Чтобы это работало, это зависит от макета, но оно должно содержать пустой контент внутри div, в котором он находится.

Омар
источник
3
Если вы играете с видимостью: скрытый и видимость: видимый и установите свое положение элемента: исправлено, у вас не будет этой проблемы, это похоже на магию
Джон Балвин Ариас
6

дисплей: ни один не решение, это полностью скрывает элементы со своим пространством.

Рассказ о display:noneиvisibility: hidden

visibility:hidden означает, что тег не виден, но для него выделено место на странице.

display:noneзначит полностью скрывает элементы со своим пространством. (хотя вы все равно можете взаимодействовать с ним через DOM)

Хидайт Рахман
источник
4

Переключение displayне допускает плавных переходов CSS. Вместо этого переключите и the visibilityи the max-height.

visibility: hidden;
max-height: 0;
Ahmad
источник
Это полезно при работе с анимацией. Потому что мы скрываем элемент за пределами видимой области, используя что-то вроде transform: translateX(-100%). Мы не хотимdisplay: none
zhuhang.jasper
3

display:noneспрятаться и установить, display:blockчтобы показать.

Пранай Рана
источник
1
Он просит удалить его визуально, «как будто их нет в DOM». Не об удалении их из фактического DOM.
Арве Систад
вопрос состояния не удалять их из DOM только для того, чтобы они исчезли. as though they are not in the DOM at all (but without actually removing them from the DOM)
Мауро
@pranay: visibility: hiddenтолько останавливает отображение содержимого, но по-прежнему использует вертикальное / горизонтальное пространство, display: none удаляет вертикальное / горизонтальное пространство для элемента.
Мауро
Нет, это не так. видимость: скрытая; делает элемент невидимым, но все равно занимает место. дисплей: нет; заставляет документ вести себя так, как будто его там никогда не было.
Олли Ходжсон
1
Затем удалите этот ответ.
BalusC
2

Вот другой способ вернуть их после отображения: нет. не используйте display: block / inline и т. д. Вместо этого (если используется javascript) установите для свойства css display значение '' (т. е. пустое)

Анураг Приядарши
источник
1
$('#abc').css({"display":"none"});

это скрывает содержимое, а также не оставляет пустого пространства.

Санг
источник
1

выше моих знаний это возможно 4 способами

  1. HTML<button style="display:none;"></button>
  2. CSS #buttonId{ display:none; }
  3. JQuery $('#buttonId').prop('display':'none');& $("#buttonId").css('opacity', 0);
gdmanandamohon
источник
1

дисплей: ни одна из них не является наилучшей, чтобы избежать пробелов на странице

Гил
источник
2
Кажется, это просто повторение других ответов.
Пан
0

Используйте, !importantесли вы вынуждены переопределить существующие стили CSS.

display: none !important;
jschnasse
источник