Як створити прихований роздільник, який не створює розрив рядка або горизонтальний простір?


354

Я хочу мати прихований прапорець, який не займає місця на екрані.

Якщо у мене це є:

<div id="divCheckbox" style="visibility: hidden">

Я не бачу цього прапорця, але він все одно створює новий рядок.

Якщо у мене це є:

<div id="divCheckbox" style="visibility: hidden; display:inline;">

він більше не створює нову лінію, але займає горизонтальний простір на екрані.

Чи є спосіб мати прихований div, який не займає місця (вертикальний чи горизонтальний?)


Чи є користь для такого діва?
Jonno_FTW

6
@Jonno: Це зазвичай використовується в AJAX. Скажімо, у вас є список елементів з трикутниками розкриття. Ви хочете, щоб деталі або піддірець з'являлися, коли користувач натискає трикутник розкриття. Тож, що ви робите, - це помістити <div id = "theID" style = "display: none;"> куди слід надходити деталі. Потім, коли користувач натискає на трикутник, ви переміщуєте трикутник у положення "на півдорозі" (вказуючи на південний схід) та запускаєте запит AJAX, щоб заповнити <div>. Коли запит AJAX закінчується, ви повертаєте трикутник на південь і виймаєте "display: none;" від стилю <div> '. Бібліотека script.aculo.us робить це багато.
Майк Десимоне

Відповіді:


715

Використовуйте display:none;

<div id="divCheckbox" style="display: none;">
  • visibility: hidden приховує елемент, але він все одно займає місце в макеті.

  • display: none повністю видаляє елемент з документа, він не займає місця.


42
показати ще раз (лише на випадок, коли комусь потрібно, як і я) -<div id="divCheckbox" style="display: inline-block;">
anujin

14
@anujin: Чому inline-block? Значенням за замовчуванням displayдля div є block!
МММ

Чи є спосіб зробити протилежне? Щоб змінити div з display: noneна display: inline-blockабо еквівалент, без показаного тепер діва займає простір і переміщувати мої інші елементи DOM навколо?
bpromas

1
можливо, варто оновити відповідь, щоб включити глобальний атрибут HTML, прихований, який доступний з HTML5.1, який в основному той самий, що й сказати, display: noneхоча прямо з HTML. Однак будь-яке використання displayвластивості перекриває поведінку hiddenглобального атрибута.
Marius Mucenicu

54

З моменту випуску HTML5 можна просто зробити:

<div hidden>This div is hidden</div>

Примітка. Це не підтримується деякими старими браузерами, особливо IE <11.

Документація щодо прихованих атрибутів ( MDN , W3C )


1
Це більш семантично правильніше, ніж приховування за допомогою CSS, воно краще для доступності, і його підтримують усі основні браузери. Це має бути прийнята відповідь у 2020 році.
Робін Мітраль

29

Використовуйте style="display: none;". Крім того, вам, мабуть, не потрібно мати DIV, просто встановлення стилю display: noneна прапорець, ймовірно, буде достатньо.


Мені потрібно приховати повідомлення попередження про завантаження сторінки і хотів показати це ще раз при натисканні кнопки. Спробував, visibility: hiddenале це показало порожній простір. style="display: none;"працював як маленький шарм :)
sohaiby

8

На додаток до відповіді CMS ви можете розглянути питання про те, як ввести стиль у зовнішній таблицю стилів та призначити стиль id, наприклад, такий:

#divCheckbox {
display: none;
}

+1, це дійсно гарна пропозиція, але як показати лише один прапорець, не впливаючи на видимість усіх інших прапорців?
Овайс Куреші

1
@dotNetSoldier Старе питання, але тут має бути відповідь. У вас є клас css під назвою invis, і ви додаєте / видаляєте його з прапорець або діл за id за допомогою JS.
ДаніельST

8

Оскільки вам слід зосередитись на зручності використання та загальних рисах CSS, а не використовувати ідентифікатор, щоб вказати на конкретний елемент компонування (що призводить до величезних чи декількох файлів css), ви, ймовірно, замість цього використовуєте справжній клас у вашому пов'язаному файлі .css:

.hidden {
visibility: hidden;
display: none;
}

або для мінімалістичного:

.hidden {
display: none;
}

Тепер ви можете просто застосувати його через:

<div class="hidden"> content </div>

код виглядає набагато чистіше таким чином! Я вважаю за краще провести клас над стилем інлайнеру
Гаррі Чо

5

Розглянемо <span>можливість виділити невеликі сегменти розмітки для стилю, не порушуючи компонування. Це може здатися більш ідіоматичним, ніж намагатися змусити <div>не відображати себе - якщо насправді сам прапорець не може бути викладений так, як вам потрібно.


4

Показати / приховати натисканням миші:

<script language="javascript">

    function toggle() {

        var ele = document.getElementById("toggleText");
        var text = document.getElementById("displayText");

        if (ele.style.display == "block") {

            ele.style.display = "none";
            text.innerHTML = "show";
        }
        else {

            ele.style.display = "block";
            text.innerHTML = "hide";
        }
    }
</script>

<a id="displayText" href="javascript:toggle();">show</a> <== click Here

<div id="toggleText" style="display: none"><h1>peek-a-boo</h1></div>

Джерело: Ось


4

Щоб запобігти зайняттю будь-якого місця, не знімаючи його з DOM, використовуйте hidden.

<div hidden id="divCheckbox">

Щоб запобігти зайняттю будь-якого місця та також видалити його з DOM, використовуйте display: none.

<div id="divCheckbox" style="display:none">

3

Щоб приховати елемент візуально , але зберегти його в html, ви можете використовувати:

<div style='visibility:hidden; overflow:hidden; height:0; width:0;'>
  [content]
</div>

або

<div style='visibility:hidden; overflow:hidden; position:absolute;'>
  [content]
</div>

Що може піти не так display:none? Він повністю видаляє елемент з html, тому деякі функції можуть бути порушені, якщо їм потрібно отримати доступ до чогось із прихованого елемента.


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