Чи є протилежне відображенню: жодне?


197

Протилежність visibility: hiddenIS visibility: visible. Так само, чи існує протилежне display: none?

Багато людей плутаються, розуміючи, як показати елемент, коли він є display: none, оскільки це не так зрозуміло, як використання visibilityвластивості.

Я міг би просто використовувати visibility: hiddenзамість display: none, але це не дає такого ж ефекту, тому я не збираюся з цим.


35
Не впевнений, чому це зменшення голосів і закриття запитів. Це на тему (наразі 143 368 запитань щодо CSS щодо переповнення стека), це проблема в реальному світі, і це гарне питання допомогти людям вивчити мову належним чином.
Пол Д. Уейт

4
@Paul Можливо, люди не помітили, що це самовідповідь, і подумали, що це малий дослідний зусилля (адже всі дослідницькі зусилля - у відповідь)
Річард Тінгл

11
Навіщо турбуватися задавати питання, якщо ваша відповідь - скопіювати / вставити таблицю з w3schools.com/cssref/pr_class_display.asp ?
Білл Ящірка

1
@RichardTingle: ах, хороший момент. @MohammadAreebSiddiq: Ах, я не думав, що вашу відповідь потрібно видалити. Просто видалити великий список усіх можливих displayзначень було б добре. (І це лише моя думка, звичайно: можливо, людям дуже сподобався цей список, який знаходиться там.)
Пол Д. Вейт

ви справді справді справді мали би зробити відповідь Іллі Стрельцина прийнятою. Ілля дає "версію" відображення: жодна, у якої НЕ є протилежне, що вирішує практичну проблему, що лежить в основі вашого питання, тоді як відповідь, яку ви вирішили прийняти, по суті, просто говорить "ні". Що впевнене, що правда, але набагато набагато менш корисна. Це для програмістів, а не для лінгвістів.
mathheadinclouds

Відповіді:


178

display: noneне має прямої протилежності, як visibility:hiddenце робить.

visibilityВластивість вирішує , чи є елемент видимим чи ні. Тому він має два стани ( visibleі hidden), які протилежні один одному.

displayВласності, однак, вирішує , які правила розмітки елемент буде слідувати. Є кілька різних видів правил для того, як елементи будуть лежати себе в CSS, тому існує кілька різних значень ( block, inline, і inline-blockт.д. - дивіться документацію для цих значень тут ).

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

Усі інші значення displayвикликають, що елемент є частиною сторінки, тому в певному сенсі вони все протилежні display:none.

Але немає жодної цінності, прямої зворотності display:none- так само, як немає жодної зачіски, протилежної "лисий".


2
Я помічаю, що ви згадували display: initialу видаленій самовідповіді - для браузерів, які реалізують CSS2.1, це синонім display: inline. Він не скидається displayдо стандартного для браузера даного елемента - це не те, що означає "початкове значення".
BoltClock

26
мій голос за "лисий" приклад :) Дуже простий для розуміння приклад!
Jesper Rønn-Jensen

1
Ціле прочитане я думаю собі "чудовий приклад, так, так, вони всі протилежні display:none" тоді ти читаєш "так само, як немає жодної зачіски, яка є протилежною лисий " Вау плюс 1, чудово сказано.
Chef_Code

2
Будь-яка зачіска протилежна лисій.
AdjunctProfessorFalcon

@AdjunctProfessorFalcon: ну, начебто. Я б сказав, що голена під номером одна голова набагато менше протилежної лисині, ніж кефал.
Пол Д. Уейт

84

Справжньої протилежності display: noneнемає (поки що).

Але display: unsetдуже близько і працює в більшості випадків.

Від MDN (Мережа розробників Mozilla):

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

(джерело: https://developer.mozilla.org/docs/Web/CSS/unset )

Зауважте також, що display: revertзараз розробляється. Детальніше див. У MDN .


Про що display: initial?
Flimm

31

Під час зміни елемента displayв Javascript, у багатьох випадках підходящим варіантом "скасувати" результат element.style.display = "none"є element.style.display = "". Це видаляє displayдекларацію з styleатрибуту, повертаючи фактичне значення displayвластивості до значення, встановленого в таблиці стилів для документа (до типового для браузера, якщо не визначено в іншому місці). Але більш надійний підхід - мати клас на кшталт CSS

.invisible { display: none; }

та додавання / видалення назви цього класу до / з element.className.


2
Якщо ви хочете перевизначити .element { display: none }(визначено, наприклад, у CSS lib), .element { display: '' !important }це не вийде. Ви повинні скористатися.element { display: unset !important }
tanguy_k

2
Я розповів про "скасування" display:noneлише в JavaScript. Звичайно, порожній рядок не працюватиме в CSS, оскільки це недійсне значення. Ховевер, display: unsetви пропонуєте не відновити, наприклад, за замовчуванням display:blockдля a <div>або за замовчуванням display:table-rowдля a <tr>, він фактично перетворює все на display:inline(так само display:initial). Щоб відновити значення елемента за замовчуванням для веб-переглядача display:revert, воно є , але воно не підтримується ( caniuse.com/#feat=css-revert-value ).
Ілля Стрельцин

Це має бути прийнятою відповіддю. Прийнята відповідь має гарне порівняння з "протилежною лисиною", але нічого не допомагає бідному програмісту зіткнутися з реалізацією "зробити лисий" - "зараз, покласти волосся назад". Ця відповідь говорить про те, як вирішити цю практичну проблему. Element.style.display = '' є схильним до помилок, оскільки "старе волосся" може бути не відображенням за замовчуванням, а "блоком" або "коміркою таблиці" чи будь-яким іншим. Наскільки я бачу, видалення класу ". Невидимий" - це єдине безкоштовне реалізація "повернути волосся назад". Отже, робіть це так завжди
mathheadinclouds

6

ви можете використовувати

display: normal;

Він працює як звичайно .... Це невеликий злом у css;)


2
Чому це зменшується? Це поганий спосіб зробити це чи? Це добре працює для столів, але чи варто використовувати щось інше?
Бенджамін Карлог

4
Значення "normal" не є дійсним значенням для displayвластивості, тому воно просто ігнорується і ефективно працює як element.style.display = ''призначення (див. Мою відповідь вище).
Ілля Стрельцин

27
тож іншими словами, ви могли використати display: chunk norris;для того ж ефекту, трохи більшим ударом.
Кевін Б

1
Якщо ви хочете перевизначити .element { display: none }(визначено, наприклад, у CSS lib), .element { display: normal !important }це не вийде. Ви повинні скористатися.element { display: unset !important }
tanguy_k

4

Я використовую display:block; Це працює на мене


Це корисно лише для елементів, які ви хочете відображати як block, але це не те, що ви хочете, як правило, для inlineелемента, наприклад, <span>наприклад.
Flimm

3

Як пояснює Пол, немає буквальної протилежності відображення: жоден HTML не має, оскільки кожен елемент має інший дисплей за замовчуванням, і ви також можете змінювати дисплей класовим чи вбудованим стилем тощо.

Однак якщо ви використовуєте щось на зразок jQuery, їх функції показу та приховування ведуть себе так, ніби не було протилежної відображення жодної. Коли ви ховаєте, а потім знову показуєте елемент, він відображатиметься точно таким же чином, як і раніше. Вони роблять це, зберігаючи старе значення властивості відображення при приховуванні елемента, так що коли ви його знову покажете, воно відображатиметься так само, як це було зроблено до того, як ви його сховали. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Це означає, що якщо ви встановите діб, наприклад, для відображення вбудованого чи вбудованого блоку, і приховати його, а потім показати його ще раз, він знову відобразиться як відображення вбудованого чи вбудованого блоку, як і раніше

<div style="display:inline" >hello</div>
<div style="display:inline-block">hello2</div>
<div style="display:table-cell" >hello3</div>

сценарій:

  $('a').click(function(){
        $('div').toggle();
    });

Зауважте, що властивість відображення Div залишатиметься незмінною навіть після того, як вона була прихована (display: none) та знову показана.


1
"display: table-cell" був потрібним мені. Не згадувався ні в одній іншій відповіді.
Бендечко

1

Що стосується дружнього стилю для друку, я використовую наступне:

/* screen style */
.print_only { display: none; }

/* print stylesheet */
div.print_only { display: block; }
span.print_only { display: inline; }
.no_print { display: none; }

Я використовував це, коли мені потрібно було надрукувати форму, що містить значення, і поля введення було важко друкувати. Тому я додав значення, загорнуті в тег span.print_only (div.print_only використовувався в іншому місці), а потім застосував клас .no_print до полів введення. Тож на екрані ви побачили б поля введення, а при надрукуванні - лише значення. Якщо ви хочете пофантазувати, ви можете використовувати JS для оновлення значень в тегах span, коли поля оновлювались, але це не було необхідним у моєму випадку. Можливо, не найелегантніше рішення, але воно працювало для мене!


1

Ви можете використовувати display: block

Приклад:

<!DOCTYPE html>
<html>
<body>

<p id="demo">Lorem Ipsum</p>

<button type="button" 
onclick="document.getElementById('demo').style.display='none'">Click Me!</button>
<button type="button" 
onclick="document.getElementById('demo').style.display='block'">Click Me!</button>

</body>
</html> 

0

Я зіткнувся з цим завданням під час створення програми, де хотів таблицю, приховану для певних користувачів, а не для інших.

Спочатку я встановив це як display: none, але потім display: inline-block для тих користувачів, які я хотів його побачити, але у мене виникли проблеми з форматуванням, які ви могли б очікувати (стовпці консолідації або загалом брудні).

Як я працював навколо цього, було спершу показати таблицю, а потім зробити "display: none" для тих користувачів, які я не хотів її бачити. Таким чином, він форматувався нормально, але потім зникав у міру необхідності.

Трохи бічного рішення, але може допомогти комусь!


0

навпаки "жоден" є "гнучким" під час роботи з рідними реагуючими.


-2

видимість: прихований приховає елемент, але елемент - їх з DOM. І у випадку відображення: жоден він не видалить елемент з DOM.

Таким чином, у вас є можливість елемента або приховати, або приховати. Але як тільки ви видалите його (я маю на увазі відображення жодного), воно не має чіткого протилежного значення. дисплей має декілька значень, як дисплей: блок, дисплей: вбудований, дисплей: вбудований блок та багато інших. ви можете перевірити це у W3C.


2
Чому б не будь-яке інше значення для display?
Пол Д. Уейт

1
Це повинен бути вичерпний перелік? Це не.
Ри-


-3

Ви можете використовувати це, display:block;а також додатиoverflow:hidden;


1
Прочитайте наявні відповіді, перш ніж надсилати свої власні. Є хороша, добре схвалена і прийнята відповідь з травня минулого року, а також відповідь з негативною загальною кількістю голосів, яка більш-менш ідентична вашій.
Квентін

Я побачив відповідь. Дисплей: Скидання не працює, а також блок Display:. Моя думка :) @Quentin
Бел

І display: blockне працює добре на a <span>чи a <td>… і попередню відповідь уже згадували display: block.
Квентін

2
Ви відредагували відповідь на згадку overflow: hidden. Чому? Який сенс додати це? Це не має нічого спільного з скасуванням а display: none.
Квентін

-4

Кращим "протилежним" було б повернути його до значення за замовчуванням, яке є:

display: inline

Просто хочу уточнити, що властивість відображення не має значення за замовчуванням, проте html-елемент робить. Значенням DIV за замовчуванням буде display: block, SPAN за замовчуванням відображатиме: inline. Але властивість відображення самостійно не має значення за замовчуванням.
кевіній
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.