Является ли изменение свойства отображения по умолчанию хорошей практикой?

TL; DR. Изменять свойство display по умолчанию в моем CSS - плохая практика?

Проблема

Недавно в нашем проекте нам пришлось расположить 2 тега заголовка так, чтобы они выглядели как один. У них был одинаковый размер шрифта и похожий стиль, поэтому единственная проблема заключалась в том, как разместить один рядом с другим. У нас было две разные идеи по этому поводу, и мы обсудили, стоит ли изменять свойство display по умолчанию.

Итак, наш самый простой код

<div class="container">
    <h1>Header:</h1>
    <h2>my header</h2>
</div>

Результат, который мы хотели бы получить:

Заголовок: мой заголовок

Примечание. Код должен состоять из 2 разных заголовков, потому что в мобильной версии мы хотим отображать их в отдельных строках (поэтому оставим значение по умолчанию display: block).

Подход №1: используйте display: inline

Это довольно прямолинейно. Блочные элементы стали встроенными, поэтому они располагаются в одной строке. Недостатком этого подхода является то, что свойства отображения по умолчанию для h1 и h2 были изменены.

Подход № 2: используйте float

H1 можно расположить слева с помощью свойства float: left. При таком подходе свойство отображения по умолчанию остается неизменным, но потребуются некоторые взломы, если длина .container недостаточна для размещения обоих заголовков в одной строке.

Вопрос

Все это приводит к простому вопросу: является ли плохой практикой изменение свойства по умолчанию display элементов HTML? Нарушает ли это стандарт и его следует избегать, если возможно? Или это наш хлеб с маслом, и это не имеет особого значения, если код семантически правильный (поэтому заголовки помещаются в h1, статьи помещаются в article и т. Д.)


person dotintegral    schedule 16.06.2016    source источник
comment
Код должен состоять из 2 разных заголовков, потому что в мобильной версии мы хотим отображать их в отдельных строках. Ваша проблема не в изменении типа отображения по умолчанию, а в неправильном использовании заголовков. Тот факт, что заголовок может занимать несколько строк, не означает, что он становится двумя отдельными заголовками (не меньше разного ранга!).   -  person BoltClock    schedule 16.06.2016
comment
Предположим, что нам нужно иметь два заголовка. Или забудем на время о заголовках.   -  person dotintegral    schedule 16.06.2016
comment
Просто комментарий к исходной проблеме, которая у вас была. Лучше семантически и с точки зрения кода просто добавить элемент span внутри основного заголовка. Вот пример.. Вторая часть перейдет на новую строку при размере окна ‹640 пикселей.   -  person Bram Vanroy    schedule 19.06.2016
comment
Что когда-нибудь случалось с простым нацеливанием на нужные структуры и использованием старого доброго CSS для переопределения свойств по умолчанию с помощью селекторов? Я не вижу необходимости в этом вопросе. Я понятия не имею, как он получил столько голосов.   -  person Anthony Rutledge    schedule 21.06.2016
comment
@dotintegral Это я, или некоторые из этих ответов пытаются оправдать глобальное изменение основных значений свойств CSS по умолчанию (отображение, видимость и т. д.), когда, за исключением сброса CSS, я не могу придумать ничего, что могло бы предложить делать это лучше всего?   -  person Anthony Rutledge    schedule 21.06.2016
comment
это действительно только ты.   -  person dippas    schedule 22.06.2016
comment
@AnthonyRutledge, как правильно выбирать элементы в CSS выходит за рамки этого вопроса. Не зацикливайтесь на форматировании.   -  person Nils Kaspersson    schedule 22.06.2016
comment
Этот вопрос не касается глобального сброса отображаемого значения. Подразумевается использование селекторов для нацеливания только на определенные элементы. Вопрос в том, что нам делать с этими выбранными элементами.   -  person Mchl    schedule 22.06.2016
comment
@Mchl Все это приводит к простому вопросу: не является ли плохой практикой изменять свойство отображения элементов HTML по умолчанию?   -  person Anthony Rutledge    schedule 22.06.2016


Ответы (9)


Отвечая на ваш главный вопрос:

tl; dr - это плохая практика - изменять свойство display по умолчанию в моем CSS?

NO


ПОЧЕМУ?

A: Потому что все дело в семантике

Элементы, атрибуты и значения атрибутов в HTML определены (данной спецификацией) как имеющие определенные значения (семантику). Например, элемент ol представляет упорядоченный список, а атрибут lang представляет язык содержимого.

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


Итак, в вашем случае, если вам действительно нужно иметь 2 заголовка семантически, вы можете изменить их стили, включая свойство display.

Однако если вам не нужно иметь два семантических заголовка, а только исключительно косметика / дизайн (адаптивный код), то вы делаете это неправильно.

Взгляните на этот пример:

<h1>Welcome to my page</h1>
<p>I like cars and lorries and have a big Jeep!</p>
<h2>Where I live</h2>
<p>I live in a small hut on a mountain!</p>

Поскольку HTML передает смысл, а не представление, ту же страницу можно использовать в небольшом браузере на мобильном телефоне без каких-либо изменений страницы. Вместо заголовков, написанных большими буквами, как, например, на настольном компьютере, браузер на мобильном телефоне может использовать текст того же размера для всей страницы, но с заголовками, выделенными жирным шрифтом.

В этом примере основное внимание уделяется заголовкам, но тот же принцип применим ко всей семантике в HTML.

** В приведенной выше цитате я обращаю внимание **

PS. Помните, что заголовки h1 - h6 нельзя использовать для разметки подзаголовков (или субтитров), если только они не должны быть заголовком для новый раздел или подраздел.


Имея в виду все вышесказанное, вот несколько (хороших) подходов:

Если вы делаете два заголовка исключительно для дизайна, тогда:

  • добавьте span внутри h1, используя media query либо с использованием подхода сначала мобильные (min-width), либо немобильного подхода (max-width).

Плюсы - легко управляемы с помощью CSS, меняя только свойства.

МИНУСЫ - добавление дополнительной HTML-разметки с использованием media queries.

h1 {
  /* demo only */
  background: red;
  margin:0
}
@media (max-width: 640px) {
  span {
    display: block
  }
}
<div class="container">
  <h1>Header:<span> my header</span></h1>
</div>

Если вам нужно использовать два заголовка семантически, тогда:

  • используйте flexbox макет.

Плюсы - нет необходимости добавлять дополнительную HTML-разметку или использовать медиа-запросы, это самый гибкий в настоящее время в CSS (в основном это минусы из вышеупомянутого варианта).

Минусы - IE10 и более ранние версии не поддерживают или частично поддерживают, Могу ли я использовать flexbox? (альтернативой для IE10 и ниже будет ТАБЛИЦЫ CSS)

.container {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  /*demo only*/
  background: red;
}

h1,
h2 {
  /*demo only*/
  margin: 0;
}

h2 {
  /*640px will be flex-basis value - can be changed as prefered */
  flex: 0 640px;
}
<div class="container">
  <h1>Header:</h1>
  <h2>my header</h2>
</div>

Источники:

person dippas    schedule 19.06.2016
comment
Цель и переопределение. - person Anthony Rutledge; 21.06.2016
comment
идентификаторы, классы, промежутки и блоки существуют по какой-то причине. Настройте таргетинг на нужную структуру, а затем используйте селекторы для переопределения. Цель и переопределение. - person Anthony Rutledge; 21.06.2016
comment
Неужели вы собираетесь использовать этот аргумент? Я просто прошу подробного объяснения вашего комментария .. Я знаю значение цели, а затем отменяю ее. Но я не считал лучшего подхода, учитывая два заголовка .., чем макет flexbox. Только с одним заголовком, который выполняется с помощью тега span. Опять хотите объяснить комментарий и отрицательный голос? - person dippas; 21.06.2016
comment
Я объяснил это. Обновите ваш браузер. - person Anthony Rutledge; 21.06.2016
comment
Затем прочтите мое объяснение использования flexbox. Все дело в том, чтобы использовать меньше разметки HTML. Зачем здесь использовать ID или классы? Не нужно .. Это перебор. Если вы видите мой 1-й вариант, я использую диапазон. - person dippas; 21.06.2016
comment
Черт возьми, используйте чистые селекторы CSS, если это помогает вашей лодке. Основной ответ на общий вопрос, особенно о свойстве отображения, - нет. - person Anthony Rutledge; 21.06.2016
comment
Я не вижу причин для отрицательного голоса только потому, что тогда я не представил вариант с идентификаторами и / или классами. - person dippas; 21.06.2016
comment
Что касается использования классов и идентификаторов, то так сложно понять, что это всего лишь простая демонстрация, даже если есть класс .container, обертывающий заголовки, поэтому они ограничены, скажем, для этого класса, если вы нацеливаетесь на них в CSS, например .container h1, но Опять же, это всего лишь демонстрация, зачем нужно использовать классы / идентификаторы, если вопрос не в этом? - person dippas; 22.06.2016
comment
@dippas, Энтони Ратледж тоже проголосовал против меня. Он неопределенно прокомментировал эту цель и переопределить malarkey, и в моем ответе у меня есть переключение классов. Итак, очевидно, что он либо не удосужился прочитать ответы, либо не может понять вопрос и / или ответы. - person zer00ne; 22.06.2016
comment
@dippas Я понимаю вопрос лучше, чем вы. Фраза «изменить свойство отображения по умолчанию для элементов HTML» является самым широким возможным языком CSS, подразумевающим глобальный селектор. Вы можете прочитать пример и основать свой ответ на нем, или вы можете прочитать реальный, фундаментальный вопрос и дать на него здравый ответ. - person Anthony Rutledge; 22.06.2016
comment
видимо вы не лучше меня поняли этот вопрос;) хотя я понял вашу точку зрения. Но не все дело в этом вопросе. Вот почему я считаю несправедливым серийное отрицательное голосование в (почти каждом) ответе, приведенном здесь. - person dippas; 22.06.2016
comment
@AnthonyRutledge, это просто мое впечатление, или вы приняли отрицательный голос, но сожалеете об этом, а затем быстро снова проголосовали против? просто интересуюсь... - person dippas; 22.06.2016
comment
@ Похоже на принятие желаемого за действительное. Щелчок был ошибочным. - person Anthony Rutledge; 22.06.2016
comment
так что после всех объяснений вы все еще собираетесь оставить голос против? Хорошо, просто чтобы знать - person dippas; 22.06.2016
comment
Спасибо за ваши старания, диппа. Лодка репутации направляется к вам :) - person Mchl; 24.06.2016
comment
Ну, я не думаю, что этот ответ действительно заслуживает +500, в любом случае поздравляю - person Medet Tleukabiluly; 24.06.2016
comment
@MedetTleukabiluly, ваш ответ определенно не заслуживает его, но эй, спасибо :) - person dippas; 24.06.2016
comment
lol Я действительно хорошо провел время в этом вопросе. В любом случае @dippas хороший ответ. Я также посмотрел на некоторые другие ответы, которые вы написали, и они были действительно хорошими. Я сделал несколько заметок. В любом случае поздравляю! :) - person Jaqen H'ghar; 25.06.2016
comment
Спасибо @ JaqenH'ghar :) - person dippas; 25.06.2016

tl; dr - это плохая практика - изменять свойство отображения по умолчанию в моем CSS?

Нет. Как заявили сами W3C; HTML передает смысл, а не представление .

Как автор HTML, ваша задача - структурировать страницу так, чтобы каждый раздел страницы нес предполагаемую семантику, как описано в документации, чтобы программное обеспечение (браузеры, программы чтения с экрана, роботы ...) могло правильно интерпретировать ваш контент.

Как автор CSS, ваша задача - изменить стиль по умолчанию для правильной разметки, чтобы представить ее так, как вы хотите. Сюда входит изменение свойств display по умолчанию, равно как и изменение color по умолчанию.

Однако любое программное обеспечение может решить, что определенное использование свойств CSS изменяет способ их интерпретации вашей страницы. Например, поисковая система может решить, что текст, имеющий тот же color, что и background родительского объекта, не должен иметь веса для их системы ранжирования.

Что касается подзаголовков, считается неправильным разметить подзаголовок с помощью элемента <hX>. . Что вам следует сделать, так это выбрать один элемент <hX>, заключить его в <header> и заключить текст типа подзаголовка в <p>, <span> или аналогичные.

Ниже приводится пример правильных подзаголовков, взятых из документации W3C:

<header>
  <h1>HTML 5.1 Nightly</h1>
  <p>A vocabulary and associated APIs for HTML and XHTML</p>
  <p>Editor's Draft 9 May 2013</p>
</header>

Обратите внимание на расхождение между спецификацией W3C и спецификацией WHATWG, где последняя использует элемент <hgroup> для этой конкретной цели. , в то время как прежний устарел. Я лично придерживаюсь примера W3C, но большая часть программного обеспечения все еще будет понимать hgroup, вероятно, в течение многих-многих лет, если вы предпочитаете подход WHATWG. Фактически, некоторые утверждают, что WHATWG следует выполнять вместо W3C, когда спецификации различаются.

Однако в вашем конкретном примере я не уверен, почему вы в первую очередь решили разделить <h1> на два элемента. Если то, что вы пометили как <h1>, на самом деле должно быть общим «ярлыком» для заголовка, то его, вероятно, следует рассматривать как подзаголовок. Если вам нужно разделить его для стилизации, оберните две части текста в <span> как таковые:

<h1>
  <span>Header:</span>
  <span>my header</span>
</h1>
person Nils Kaspersson    schedule 19.06.2016
comment
Спасибо за ответ, Нильс. Я действительно хотел бы как-нибудь разделить награду между тобой и @dippas. - person Mchl; 24.06.2016

tl; dr - это плохая практика - изменять свойство отображения по умолчанию в моем CSS?

Это хорошая практика, но тщательно выбирайте, когда ее использовать, потому что это может привести к критическим структурным ошибкам.

Почему это хорошая практика

Свойство display открыто для изменений. Это делает HTML простым и универсальным. Элементы HTML имеют значение по умолчанию display, которое соответствует общему поведению - то, что вы обычно хотели бы. Но их не нужно хранить и манипулировать ими, чтобы имитировать другое display свойство. Подумайте, например, о <div>. Очевидно, что в большинстве случаев вы хотите, чтобы у него было display: block;, но время от времени гораздо больше подходит display: flex;.

Давайте посмотрим на действительно распространенный пример списков. <li> имеет свойство display list-item, которое разбивает строки для каждого нового элемента.

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

Но горизонтальные списки тоже очень распространены. Так почему же нет специального элемента для элементов горизонтального списка? Написание специального элемента для каждого общего display поведения добавляет сложности. Вместо этого, соглашение, , также предложенное W3C, состоит в том, чтобы установить для свойства <li> display значение inline .

ul li {
  display:inline;
}
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

display: inline-block; как альтернатива float

float уже много лет широко используется при верстке страниц. Проблема в том, что он не был создан для этой задачи, а изначально был разработан для обтекать элементы текстом. Хорошо известная float проблема заключается в том, что не плавающие элементы не распознают плавающие дочерние элементы, потому что они удаляются из обычного потока документа. Вы также не можете перемещать элемент централизованно. вы ограничены только левым или правым поплавком.

display намного больше подходит для верстки во много раз. display: inline-block; указывает браузерам разместить этот элемент встроенным, но рассматривать его как элемент уровня блока. Это означает, что мы можем использовать inline-block вместо float, чтобы расположить ряд элементов рядом. Он более интуитивно понятен и исключает поплавки <div class="clearfix"></div>, что является дополнительным несемантический элемент в вашем HTML.

Поплавки полезны, когда необходимо переместить элемент, чтобы другой контент страницы обтекал его. Но нет необходимости постоянно загонять их на службу сложной планировке.

Чего следует избегать при изменении display

При изменении свойства display помните:

Установка свойства отображения элемента изменяет только способ отображения элемента, а НЕ его тип.

<span> тестовый пример:

В ранних версиях HTML <span> считается элементом встроенного уровня, а <div> - элементом уровня блока. Элементы встроенного уровня не могут иметь внутри элементов блочного уровня. Присвоение <span> display:block; не меняет его категории. Это по-прежнему элемент встроенного уровня, и по-прежнему не может быть <div> внутри.

HTML5 представил модели содержания. Каждый элемент HTML имеет модель содержимого: описание ожидаемого содержимого элемента. HTML-элемент должен иметь содержимое, которое соответствует требованиям, описанным в модели содержимого элемента. <span> может содержать только фразовое содержание. Это означает, что вы по-прежнему не можете вложить <div> (содержимое потока) в <span>. Присвоение <span> display:block; все равно не меняет этого.

Избегайте:

span {
  display:block;
}

<span>
  <div>
    Still Illegal!
  </div>
<span>

В заключение, изменение свойства display по умолчанию - это, безусловно, наш хлеб с маслом. Помните, что он изменяет только способ отображения элемента, а НЕ его тип, и используйте его правильно.

Теперь об исходной проблеме с двумя заголовками:

Что касается комментариев:

Предположим, что нам нужно иметь два заголовка. Или забудем на время о заголовках. - автором

А также к комментарию:

Этот вопрос не касается глобального сброса отображаемого значения. Подразумевается использование селекторов для нацеливания только на определенные элементы. Вопрос в том, что нам делать с этими выбранными элементами. - лицом, назначившим награду

Два заголовка рядом друг с другом не только для изменения мобильного макета, но и по-разному. Исходный пример простой и правильный, так что это действительно хороший способ.

h1, h2 {
  display: inline;
}
<div class="container">
    <h1>Header:</h1>
    <h2>my header</h2>
</div>

Он следует правилам HTML и не требует дополнительных взломов.

person Jaqen H'ghar    schedule 20.06.2016
comment
Цель и переопределение. - person Anthony Rutledge; 21.06.2016
comment
@AnthonyRutledge Зачем отвергать ответ с нулевой оценкой, если кто-то явно приложил много усилий, чтобы написать его? Вам не кажется, что комментария достаточно? В любом случае, не могли бы вы полностью объяснить свой комментарий? Я пытался понять это, клянусь, понял ... И я также прочитал все ваши комментарии к ответу на диппы, но не понял его ... Пожалуйста, не будьте саркастичны и объясните это в контексте моего ответа с примером, если вы можете . Спасибо, я буду признателен. - person Jaqen H'ghar; 22.06.2016
comment
@Effort не отменяет ошибочности вашего ответа. Я объяснил, что нацеливание и переопределение - это часть элегантности CSS. Свойство display в основном универсально во всех браузерах (таблица стилей браузера) для различных структурных элементов HTML. Отступы и поля отличаются, потому что они могут сильно отличаться в кроссбраузерности. Вот почему был изобретен сброс CSS. Медиа-запросы были созданы для решения многих проблем, которые поднимает этот вопрос. Нет необходимости изменять значение свойства отображения по умолчанию для данного элемента. Это просто тупо. - person Anthony Rutledge; 22.06.2016
comment
@Jaquen Этот сайт придерживается дарвиновской философии. Лучшие ответы поднимаются на вершину, а худшие имеют тенденцию к исчезновению. Просто так оно и есть. - person Anthony Rutledge; 22.06.2016
comment
@AnthonyRutledge, спасибо за объяснение. Не могли бы вы перечитать конец моего ответа? Фрагмент кода в конце явно не совет. Это код OP, который я вставил туда только для удобства читателей. Я также четко заявил, что отвечаю на него так, как будто исходный вопрос не касался корректировки макета для мобильных устройств. Я ответил на него для общего случая реальной потребности в двух заголовках рядом (как для настольных компьютеров, так и для мобильных устройств), поэтому он не имеет ничего общего с медиа-запросами (и опять же - это даже не предложение о том, как это сделать). Пожалуйста, прочтите конец ответа еще раз, мой друг, спасибо - person Jaqen H'ghar; 22.06.2016
comment
@ JaqenH'ghar stackoverflow.com/questions/37853141/ - person dippas; 22.06.2016
comment
@dippas извини, я не понимаю моего друга. Я прочитал все комментарии в вашем ответе раньше, а также новый сейчас. не могли бы вы немного объяснить контекст? Спасибо - person Jaqen H'ghar; 22.06.2016
comment
Предположительно проблема в том, что нужно было сделать что-то вроде <div class="container"> <h1 class="h1-class">Header:</h1> <h2 class="h2-class">my header</h2> </div>, а затем настроить / переопределить значения по умолчанию, используя в CSS .h1-class { properties}. Так что, учитывая, что это демонстрация, нет смысла делать это, к тому же у него есть родительский класс с классом .container, так что это было бы излишеством в html разметке и дополнительном CSS. И это причина наших голосов против - person dippas; 22.06.2016
comment
@dippas спасибо за разъяснения. Теперь я уверен, что это не имеет ничего общего с моим ответом ... - person Jaqen H'ghar; 22.06.2016
comment
Вы слишком много думаете об этом. - person Melinda; 22.06.2016
comment
@ Мелинда, да, я думаю, ты прав ... Я просто хотел знать, есть ли проблемы с моим ответом - person Jaqen H'ghar; 22.06.2016
comment
Вопрос: Все это приводит к простому вопросу: является ли плохой практикой изменение свойства отображения элементов HTML по умолчанию? - person Anthony Rutledge; 22.06.2016
comment
Прочитав ваши комментарии здесь и другие ответы, я понял проблему. Вы явно не поняли вопрос ... или ответы .. Вопрос (и ответы) НЕ касаются использования элементов html вместо классов в качестве селекторов css. они касаются изменения свойства отображения элементов (с любым классом селектора / идентификатором / ...). Я действительно не знаю, как вы так поняли вопрос, но что меня действительно озадачивает, так это то, как вы думали, что ответы (не только мои) предполагают, что использование этой техники селекторов является хорошей практикой. Думаю, вы не читали ответы ... ну, они длинные ... - person Jaqen H'ghar; 22.06.2016
comment
@ JaqenH'ghar Venom бесполезен в Интернете. - person Anthony Rutledge; 22.06.2016
comment
@AnthonyRutledge, тогда мы можем договориться в одном :) - person Jaqen H'ghar; 22.06.2016
comment
Мне очень нравится этот ответ JaqenH'ghar. В нем упоминаются некоторые интересные темы, которые не затрагивались в других ответах. Однако я чувствую, что ответ @dippas отвечает на вопрос самым прямым и исчерпывающим образом. - person Mchl; 24.06.2016
comment
@Mchl спасибо! Мне тоже понравился ответ на диппа, поэтому я попытался затронуть другие темы. Он заслуживает награды, поэтому я счастлив, что он ее получил :) Спасибо за положительный отзыв! - person Jaqen H'ghar; 24.06.2016

Конечно, изменение поведения по умолчанию излишне и даже может снизить производительность. В качестве субъективного решения я бы рекомендовал использовать flex (но я не уверен в его производительности, хотя вы можете его погуглить), он широко поддерживается и не меняет никаких свойств css элемента, это просто макет, проверьте это из

.container {
  display: flex;
  justify-content: flex-start;
  flex-direction: column;
  align-items: baseline;
}
.container.mobile {
  flex-direction: row;
}
web
<div class="container">
  <h1>Header:</h1>
  <h2>my header</h2>
</div>
<hr />
mobile
<div class="container mobile">
  <h1>Header:</h1>
  <h2>my header</h2>
</div>

Обратите внимание, что h1 стиля остаются прежними

person Medet Tleukabiluly    schedule 19.06.2016
comment
Спасибо за Ваш ответ - person Mchl; 24.06.2016

Изменение свойств CSS по умолчанию - не лучшая идея, и этого следует избегать, чтобы предотвратить нежелательные недостатки в вашей разметке. Вместо этого вы должны дать "id" или лучше "class" всем элементам html, которые вы хотите настроить, и выполнить для них стилизацию.

Кроме того, использование css типа «h1», «div» и т. Д. Является самым медленным способом, поскольку движок пытается найти все эти элементы на странице.

В вашем примере не имеет значения использовать display или float, если вы даете своим элементам h1 класс css.

Кроме того, использование правильных элементов html для улучшения семантики может быть полезно для таких вещей, как SEO и т. Д.

person abeyaz    schedule 16.06.2016
comment
Это был простой пример. Но если я добавлю классы, будет ли изменение отображения на основе классов независимо от отображения элементов по умолчанию, по-прежнему хорошей практикой? - person dotintegral; 16.06.2016
comment
Да, это лучшая практика. Собственно, так и должно быть. Классы нужны для того, чтобы различать одни и те же элементы на одной странице с разным внешним видом. - person abeyaz; 16.06.2016
comment
Почему изменение свойств CSS по умолчанию - плохая идея? Все элементы имеют значения по умолчанию, присвоенные всем свойствам, поэтому любой CSS, который вы напишете , изменит значение по умолчанию. - person Nils Kaspersson; 19.06.2016
comment
Дело в том, что изменение свойств на tags может быть плохой идеей. Вместо этого измените конкретно то, что вы хотите изменить. Например, span { display: block; } может быть не очень хорошей идеей, но span.blockspan { display: block; } или #myspan { display: block; } или просто .blockspan { display: block; } могли бы сделать работу лучше и не испортить что-либо еще на остальной части страницы. - person Nikhil Girraj; 22.06.2016

Лучше всего сгруппировать два заголовка в hgroup и изменить свойство отображения для мобильных и других представлений с помощью запроса @media.

<hgroup class="headingContainer">
  <h1>Main title</h1>
  <h2>Secondary title</h2>
</hgroup>

Элемент HTML (элемент группы заголовков HTML) представляет заголовок раздела. Он определяет единственный заголовок, который участвует в структуре документа как заголовок неявного или явного раздела, к которому он принадлежит.

Поскольку hgroup определяет единый заголовок для раздела, изменение свойства отображения в hgroup не является практикой.

person Muhammad Nasir    schedule 22.06.2016
comment
hgroup устарел и больше не поддерживается ни одним браузером. Рекомендуется использовать header или div. - person zer00ne; 22.06.2016

Вам следует использовать:

$('element').css('display','');

Это установит для отображения значение по умолчанию для элемента в соответствии с текущим каскадом CSS.

Например:

<span></span>

$('span').css('display','none');

$('span').css('display','');

приведет к span с display: inline.

Но:

span { display: block }

<span></span>

$('span').css('display','none');
$('span').css('display','');
person as7    schedule 23.06.2016
comment
Вопрос не в том, как это сделать (не меньше с jQuery). Речь идет о том, что следует делать. - person Mchl; 24.06.2016

Вы также можете использовать гибкую коробку для упорядочивания элементов, например

<div class="container" style="display: flex;">
    <h1>Header:</h1>
    <h2>my header</h2>
</div>

Попробуйте прочитать это руководство по гибкости, это действительно здорово и легко https://css-tricks.com/snippets/css/a-guide-to-flexbox/

person Community    schedule 20.06.2016

person    schedule
comment
Цель и переопределение. - person Anthony Rutledge; 21.06.2016
comment
Эм ... да, взгляните на мой Plunker, третья демонстрация переключает классы . В моем Plunker есть 3 демонстрации, охватывающие 3 различных способа манипулирования display. 2 - это чистые решения CSS, поскольку есть теги CSS, но нет JS. И я добавил другое решение с некоторым JS в качестве лучшей альтернативы. Когда вы голосуете против, внимательно прочтите ответ. Еще лучше, сначала оставьте комментарий, дождитесь ответа, и если ответ не был удовлетворительным, то во что бы то ни стало выразите свое несогласие с плохим ответом, проголосовав против. Если я не понимаю вашего утверждения, поясните, пожалуйста. - person zer00ne; 22.06.2016
comment
В: Все это приводит к простому вопросу: это плохая практика - изменять свойство отображения элементов HTML по умолчанию? - person Anthony Rutledge; 22.06.2016
comment
Какая теория? То, что является плохой или хорошей практикой, - это просто мнение, оно не подкреплено никакими спецификациями, техническими требованиями, синтаксисом - ничем, что мешает, запрещает или наказывает любого человека, код или организацию за то, что вы считаете плохим или хорошим. В реальной жизни бывают ситуации, когда значения по умолчанию повернуты на 180 градусов и не являются крайними случаями. Я никогда не голосую против, основываясь только на мнении, что неправильно, а что правильно. Мое решение не имеет ничего общего с этой частью вопроса. Есть несколько частей, на которые необходимо дать ответы в виде мнения и технических советов. Мое решение относится к последнему - person zer00ne; 22.06.2016
comment
inline-block не всегда лучший выбор, чем inline. Иногда требуется, чтобы элемент встроенного уровня создавал встроенное поле вместо контейнера блока. Например, вы хотите сопереживать тексту внутри абзаца с помощью <em>, и вы хотите, чтобы он разбивался на несколько строк. - person Oriol; 23.06.2016
comment
Согласен, inline определенно имеет свое применение, я имел в виду, что мне никогда не приходилось менять элемент display на inline. Добавление соответствующего элемента в таких обстоятельствах - лучший выбор. - person zer00ne; 23.06.2016
comment
Спасибо за ваши усилия @ zer00ne. Я считаю, что ваш ответ немного хаотичен и не имеет источников. Мне очень понравились примеры плункеров, но я думаю, что для вашего ответа было бы полезно добавить списки плюсов / минусов для каждого подхода на SO. Спасибо еще раз! - person Mchl; 24.06.2016
comment
Я больше о результатах, чем о разговорах. Добро пожаловать, @Mchl, было весело. Не хватает ресурсов? У меня было 14 ссылок, так что действительно стоит подумать об подчеркивании якорей. - person zer00ne; 25.06.2016
comment
Под «источниками» я имел в виду ссылки на официальные спецификации или статьи, подобные той, что есть в блоге hongkiat. Ссылки на MDN или другие вопросы SO, несомненно, полезные, но (по моему личному мнению) не приносят особой ценности для ответа на этот вопрос. Я сказал это раньше и скажу еще раз - жаль, что можно принять / наградить только одним ответом. - person Mchl; 25.06.2016