Есть ли противоположность для отображения: нет?

197

Противоположностью visibility: hiddenявляется 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Было бы просто удалить большой список всех возможных значений. (И это, конечно, мое мнение: возможно, людям действительно понравился этот список.)
Пол Д. Уэйт
Вы действительно действительно должны были сделать ответ Ильи Стрельцына принятым. Илья дает «версию» показа: ни одна из них не имеет противоположности, которая решает практическую проблему, лежащую в основе вашего вопроса, в то время как ответ, который вы выбрали для принятия, по сути, просто говорит «нет». Что, конечно, верно, но намного, намного, намного менее полезно. Это для программистов, а не для лингвистов.
Математические облака

Ответы:

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
27
мой голос за «лысый» пример :) Очень простой для понимания пример!
Джеспер Ренн-Йенсен
2
Все прочитанное, я думаю про себя "отличный пример, да, да, они все противоположны display:none" тогда ты читаешь ", точно так же, как нет ни одной прически, которая была бы противоположна лысому " Wow plus 1, хорошо сказано.
Chef_Code
2
Любая прическа является противоположностью лысой.
АдъюнктПрофессорФалькон
@AdjunctProf ProfessorFalcon: ну, вроде. Я бы сказал, что бритая голова под номером один намного меньше противоположна лысому, чем кефаль.
Пол Д. Уэйт,
85

Истинной противоположности display: noneнет (пока).

Но display: unsetочень близко и работает в большинстве случаев.

От MDN (Сеть разработчиков Mozilla):

Неустановленное ключевое слово CSS - это комбинация начальных и наследуемых ключевых слов. Как и эти два других ключевых слова в формате CSS, его можно применять к любому свойству CSS, включая сокращение CSS all. Это ключевое слово сбрасывает свойство к его унаследованному значению, если оно наследует от своего родителя, или к его начальному значению, если нет. Другими словами, он ведет себя как ключевое слово наследования в первом случае и как начальное ключевое слово во втором случае.

(источник: https://developer.mozilla.org/docs/Web/CSS/unset )

Обратите внимание также, что display: revertв настоящее время разрабатывается. Смотрите MDN для деталей.

RockPaperLz- Маска это или Шкатулка
источник
Как насчет 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 = '' подвержен ошибкам, потому что «старые волосы» могут быть не отображением по умолчанию, а «блоком» или «ячейкой таблицы» или чем-то еще. Насколько я вижу, удаление класса «.invisible», как здесь, является единственной безошибочной реализацией «положить волосы назад». Итак, делай так, всегда
mathheadinclouds
6

ты можешь использовать

display: normal;

Это работает как обычно .... Это небольшой взлом в CSS;)

indera
источник
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, их функции показа и скрытия ведут себя так, как если бы была противоположность показа none. Когда вы прячете, а затем снова показываете элемент, он будет отображаться точно так же, как и до того, как был скрыт. Они делают это, сохраняя старое значение свойства display при скрытии элемента, чтобы при повторном его отображении он отображался так же, как и до того, как вы его спрятали. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Это означает, что если вы установите div, например, для отображения inline, или inline-block, и вы скрываете его, а затем снова показываете, он снова будет отображаться как inline-inline-block, как было раньше

<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();
    });

Обратите внимание, что свойство display для div будет оставаться постоянным даже после того, как оно было скрыто (display: none) и показано снова.

user3589536
источник
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 при обновлении полей, но в моем случае в этом не было необходимости. Возможно, не самое элегантное решение, но оно сработало для меня!

TonyP
источник
1

Вы можете использовать дисплей: блок

Пример :

<!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

противоположность «none» - это «flex» при работе с реагировать на нативный.

NEELAMADHAB
источник
-2

visibility: hidden скрывает элемент, но элемент их с DOM. И в случае отображения: ни один это удалит элемент из DOM.

Таким образом, у вас есть возможность для элемента, чтобы скрыть или показать. Но как только вы удалите его (я имею в виду не отображать), у него не будет четкого противоположного значения. display имеет несколько значений, таких как display: block, display: inline, display: inline-block и многие другие. Вы можете проверить это из W3C.

Хардик Сондагар
источник
2
Почему не какие-либо другие значения для display?
Пол Д. Уэйт
1
Это должен быть полный список? Это не.
Ry-
-3

Вы можете использовать это, display:block;а также добавитьoverflow:hidden;

бел
источник
1
Пожалуйста, прочитайте существующие ответы, прежде чем добавлять свои. С прошлого мая есть хороший, хорошо проголосованный и принятый ответ, а также ответ с отрицательным общим количеством голосов , более или менее идентичный вашему.
Квентин
Я видел ответ. Дисплей: Unset не работает, а также дисплей: блок. Мое мнение :) @Quentin
Bel
И display: blockне очень хорошо работает на <span>или или <td>... и предыдущий ответ уже упоминал display: block.
Квентин
2
Вы отредактировали ответ, чтобы упомянуть overflow: hidden. Зачем? Какой смысл добавлять это? Это не имеет ничего общего с удалением display: none.
Квентин
-4

Лучшая «противоположность» - вернуть значение по умолчанию:

display: inline
TimNguyenBSM
источник
Просто хочу прояснить, что свойство display не имеет значения по умолчанию, однако элемент html имеет. Значением DIV по умолчанию будет display: block, а SPAN будет по умолчанию отображать: inline. Но свойство display само по себе не имеет значения по умолчанию.
Кевиниус