Як приховати елементи, не маючи місця на сторінці?


228

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

Як я можу змусити їх візуально повністю зникнути, наче вони взагалі не знаходяться в DOM (але фактично не видаляючи їх з DOM)?


Це питання дуже мертве, але я додаю коментар, оскільки нещодавно я опинився в ситуації, яку можуть зіткнутися інші. Мені потрібно було приховати елемент і зберегти йогоoffsetTop , і display:noneвстановив offsetTopби 0. Моє рішення тут було використовувати visibility: hiddenпотім встановити ширину і висоту на 0. Як тільки мені потрібно було зробити елемент знову видимим, я видалив три атрибути за допомогою Javascript. Трохи хакітне рішення, але воно працює добре для майже всіх випадків використання.
раптом

Відповіді:


301

Спробуйте налаштувати display:noneприховування та налаштувати display:blockпоказ.


неможливо видалити елемент з дому людини. також використовуючи цю опцію. читайте запитання
Пранай Рана

26
в повному обсязі елементи повинні бути display: block, деякі повинні бути встановлені в display: inline(наприклад, <span>чи <a>або <img>елементи DOM).
Мауро

2
@pranay питання говорить про те, щоб приховати їх, щоб не видаляти їх з DOM.
Мауро

6
@pranay: Питання не дуже добре виражене, але Huusom вирішує проблему, яка виникає у користувача.
Клаудіо Реді

1
Поліпшення: створити клас CSS під назвою hiddenз display: none. Додайте клас до елемента, щоб приховати його, видаліть його show. При видаленні його displayвластивість відновлюється до елемента за замовчуванням.
Алехандро С Де Бака

44

використовувати стиль замість того, як

<div style="display:none;"></div>

1
На жаль, це не працює для мене - за допомогою дисплея: жоден досі не залишає порожнього місця.
mbuc91

15

Використовувати display:noneце хороший варіант просто видалити елемент, Але він також буде видалений для екранізаторів . Існують також дискусії, якщо це впливає на SEO. Є хороша, коротка стаття на цю тему на A List Apart

Якщо ви дійсно хочете приховати, а не видалити елемент, краще скористайтеся:

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

Як і це, його можуть читати також читачі екранів.

Єдиним недоліком цього методу є те, що цей DIV насправді надається та може вплинути на його ефективність , особливо на мобільних телефонах.


2
якщо ви вирішите позиціонувати щось абсолютне, з яким ви можете в більшості випадків працювати visibility: hidden;, скажімо, у вас є інші абсолютні елементи, у них не буде конфлікту для простору, а лише конфлікту z-index. Тільки для того, щоб сховати стихію, з якою я б пішовvisibility
Dejan.S

10

Подивіться, замість visibility: hidden;використання display: none;. Перший варіант буде ховатися, але все ще займає простір, а другий варіант приховатиме і не займе місця.


6

Відповідь на це запитання говорить про використання display: none та display: block, але це не допомагає тим, хто намагається використовувати переходи css для показу та приховування вмісту за допомогою властивості видимості.

Це також зводило мене з розуму, оскільки використання дисплея вбиває будь-які переходи css.

Одне рішення - додати це до класу, який використовує видимість:

overflow:hidden

Для цього робота залежить від макета, але він повинен зберігати порожній вміст у діві, в якому він перебуває.


3
Якщо ви граєте з видимістю: приховано та наочно: видно і встановіть позицію свого елемента: виправлено у вас не буде такої проблеми, це як магія
Джон Бальвін Аріас

6

показ: жоден не є рішенням, це повністю приховує елементи зі своїм простором.

Розповідь про display:noneіvisibility: hidden

visibility:hidden означає, що тег не видно, але на ньому виділено простір.

display:noneзасіб повністю приховує елементи зі своїм простором. (хоча ви все ще можете взаємодіяти з ним через DOM)


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зупиняє відображення вмісту, але все ще використовує вертикальний / горизонтальний простір, дисплей: жоден не видаляє вертикальний / горизонтальний простір для елемента.
Мауро

Ні, це не так. видимість: приховано; робить елемент невидимим, але він все ще займає місце. дисплей: немає; змушує документ вести себе так, ніби його там ніколи не було.
Оллі Ходжсон

1
Потім видаліть цю відповідь.
BalusC

3

Toggle displayне дозволяє плавно переходити CSS. Замість цього перемкніть і те, visibilityі те max-height.

visibility: hidden;
max-height: 0;

Це корисно при роботі з анімацією. Тому що ми ховаємо елемент за межами видимої області, використовуючи щось подібне transform: translateX(-100%). Ми не хочемоdisplay: none
zhuhang.jasper

2

ось по-різному відновлення повернення їх після відображення: жодне. не використовувати display: block / inline etc. etc. Замість цього (якщо використовується JavaScript) встановіть для властивості css для '' (тобто порожнім)


1
$('#abc').css({"display":"none"});

це приховує вміст, а також не залишає порожнього місця.


1

вище моїх знань це можливо чотирма способами

  1. HTML<button style="display:none;"></button>
  2. CSS #buttonId{ display:none; }
  3. jQuery $('#buttonId').prop('display':'none');& $("#buttonId").css('opacity', 0);

1

дисплей: жоден варіант не найкраще уникати білого простору на сторінці


2
Здається, це лише повторення інших відповідей.
Панг

0

Використовуйте, !importantякщо вас змусять переосмислити існуючі стилі CSS.

display: none !important;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.