Следует ли любой ценой избегать <br /> и <hr /> в веб-дизайне?

Я постоянно нахожу места, где мне нужно использовать тег <br />, потому что CSS не может делать то, что мне нужно. Разве <br /> не считается частью «дизайна», а не частью структуры документа? Какое приемлемое использование для этого? Должны ли те же правила применяться и к <hr />?

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

Я хочу показать это:

<address>1234 south east Main St. Somewhere, Id 54555</address>

как это:

1234 south east main st.
Somewhere, Id 54555

Почему вы превращаете этот вопрос в дубликат вашего другого вопроса? stackoverflow.com/questions/462585/…

George Stocker 20.01.2009 22:33

Горток - Мне кажется, это нормально. Его предыдущий вопрос был о том, как добиться определенного эффекта. Этот вопрос больше касается философии дизайна и, по сути, спрашивает, стоило ли ему вообще задавать другой вопрос. Они не дубликаты.

Joshua Carmody 20.01.2009 22:42

@ Джошуа: Вы пропустили мой вопрос, другой вопрос, связанный с тем, что ему не нужно использовать BR или HR для достижения того же. Это отличный вопрос; но я не хочу, чтобы кто-то закрыл его, потому что он дублирует ответы на другой вопрос.

George Stocker 20.01.2009 22:46

Этот вопрос возник из более глубоких проблем, которые поднимает другой вопрос.

Micah 20.01.2009 22:57

К вашему сведению, я просто хотел бы указать, что тег <address> предназначен для разметки информации об авторе документа. Это семантически не предназначено для разметки уличных адресов: w3schools.com/TAGS/tag_address.asp

Scott Muc 21.01.2009 02:19
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
42
5
26 851
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Интересный вопрос. Я всегда использовал <br/> как возврат каретки (и, следовательно, как часть контента, на самом деле). Не уверен, что это правильный путь, но он мне хорошо послужил.

<hr/> с другой стороны ...

что такое разрыв строки. Горизонтальная линейка также имеет свое место в содержании, но не так часто используется.

Steve Perks 21.01.2009 01:16

<hr /> и <br />, как и все остальное, могут быть использованы для создания дизайна, хотя этого быть не должно. <hr /> предназначен для визуального разделения частей текста, но в локализованном смысле. <br /> предназначен для того же, но без горизонтальной линии.

Использование <hr /> на сайте в качестве дизайна было бы недостатком дизайна, но в этом посте, например, было бы правильно использовать и <br />, и <hr />, поскольку этот раздел текста все равно должен быть разделом текста, даже если изменилась верстка сайта.

Я бы не сказал любой ценой, но если вы хотите быть пуристом, эти теги не имеют ничего общего со структурой и всем, что связано с макетом, но HTML должен отделять контент от презентации. <hr /> может быть реализован через CSS и <br/> за счет правильного использования других тегов, таких как <p>.

Если не хотите быть пуристом, воспользуйтесь ими :)

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

Steve Perks 21.01.2009 01:21

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

В каких случаях вы чувствуете, что вынуждены использовать теги BR?

<hr/> и <br/> являются презентационными элементами, которые не имеют смысловой ценности для документа, поэтому с точки зрения пуристов да, их следует избегать.

Думайте о HTML не как о презентационном инструменте, а как о документе, который должен быть самоописывающим. <hr/> и <br/> не добавляют семантического значения - они представляют собой очень конкретное представление в браузере.

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

и br, и hr имеют семантическую цель для разделения контента. Если вы имеете дело с контентом, то разрыв строки или горизонтальная линейка являются обоснованными элементами, но они практически не используются в дизайне и макете сайта.

Steve Perks 21.01.2009 01:15

HR абсолютно имеет смысловое значение. Гораздо сложнее утверждать, что BR имеет какое-либо семантическое значение вне контекста презентации. Однако в теле текстовых узлов он может иметь семантическое значение. Я соблюдаю правило: используйте его между текстовыми узлами, а не элементами. Если он используется между двумя элементами, он используется для презентации. Это не означает, что BR следует использовать для разрыва абзацев. В сегодняшнем HTML BR практически не используется, что не решается более явным элементом.

crush 30.06.2015 17:34

Нет почему? Это полезные конструкции.


Добавление этого дополнения (с сопровождающим его персоналом) на тот случай, если мой краткий ответ будет истолкован как недостаточно продуманный. ;)

Это может быть и часто является невероятной тратой времени - время, которое обычно платит кто-то другой - попытка придумать кроссбраузерные решения с ограничением CSS для проблем пользовательского интерфейса, которые могут решить за две секунды. Почему некоторые специалисты по пользовательскому интерфейсу тратят так много времени, пытаясь придумать «чистые» способы обхода, используя проверенные конструкции HTML, такие как разрывы строк и горизонтальные правила, для меня полная загадка; оба тега, среди многих других, являются полностью законными и действительно могут быть использованы вами. «Чистый» в этом смысле - ерунда.

Один дизайнер, с которым я работал, просто не мог заставить себя это сделать; он тратил часы, иногда дни, пытаясь «закодировать» это, и все равно придумывал что-то, что не работало в Opera. Я обнаружил, что это совершенно сбивает с толку. Чувак, добавь BR, готово. Абсолютно легально, работает как шарм, и все довольны.

Я - сторонник абстрактного представления, не поймите меня неправильно; мы все делаем все возможное. Но будьте благоразумны. Если вы потратили пять часов, пытаясь придумать какой-то способ достичь в сценарии того, что BR дает вам прямо сейчас, и боги не будут обрушиваться на вас за это, тогда сделайте это и двигайтесь дальше. Скорее всего, если это так проблематично, в любом случае может быть что-то не так с вашим решением.

<br> - это HTML-способ обозначения разрыва строки, поскольку другого способа сделать это нет.

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

Не каждый разрыв строки является началом нового абзаца, и упаковка текста в <div> (например) просто для того, чтобы избежать <br>, кажется мне излишне параноидальной. Почему они тебя беспокоят?

Вы правильно говорите, что <br/> - это единственный способ выразить разрыв строки в HTML, но это то, что может быть лучше выражено в CSS, где он принадлежит.

Andrew Hare 20.01.2009 22:17

"можно лучше выразить": Как?

Tomalak 20.01.2009 22:28

Кроме того: «где это место» - я считаю, что предположение что неверно. Разрывы строк не являются частью презентации. Они являются частью данных. Назовите тег <br> необходимым компромиссом, если хотите.

Tomalak 20.01.2009 22:31

Я понимаю, что вы имеете в виду, но правильный макет с помощью CSS устраняет необходимость в презентационных элементах, таких как <br/>, и если вам действительно нужен разрыв строки, вы можете очистить левую часть своего элемента.

Andrew Hare 20.01.2009 22:40

Давайте согласимся с тем, что разрыв строки означает разрыв строки. Я не думаю, что его следует использовать в качестве спейсера, что действительно было бы «презентационным использованием». Разрыв последовательного текста, обертывание обеих частей в <span>, чтобы вы могли «очистить: слева» на одной из них, - это неправильный способ сделать это, ИМО.

Tomalak 20.01.2009 22:48

Это плохое использование, если вы идете строго.

<br/> и <hr/> не являются частью контента. Например, <hr/> обычно используется для разделения блоков текста. Но это невозможно с нижней границей? И <br/> во многих случаях рассматривается как способ ограничить текст определенной формой, чего нельзя было достичь с помощью css?

Конечно, вы не станете Строгим, не волнуйтесь особо.

Я считаю, что использование абсолютно избегая общепринятого решения (даже если оно устарело) - это то же самое, что проектирование таблицы с тегами <div> вместо тегов <table>, просто чтобы вы могли использовать <div>.

При разработке своего веб-сайта вы, вероятно, не будете требовать использовать теги <br />, но я все же могу представить их полезными, например, там, где требуется ввод пользователя.

Я не вижу ничего неправильный с использованием <br />, но не сталкивался со многими ситуациями, когда я использую их обязательный. В большинстве случаев, вероятно, есть более элегантные (и более красивые) решения, чем использование тегов <br />, если это то, что вам нужно для вертикального разделения контента.

Пока вы не используете <br/> для формирования абзацев, вы, вероятно, в порядке в моей книге;) Ненавижу видеть:

<p>
  ...lengthy first paragraph...
  <br/>
  <br/>
  ...lengthy second paragraph...
  <br/>
  <br/>
  ...lengthy third paragraph...
</p>

Что касается адреса, я бы сделал это так:

<address class = "address">
  <span class = "street">1100 N. Wullabee Lane</span><br/>
  <span class = "city">Pensacola</span>, <span class = "state">Florida</span> 
  <span class = "zip">32503</span>
</address>

Но это, вероятно, потому, что я люблю jQuery и хотел бы получить доступ к любой из этих частей в любой момент :)

почему бы просто не использовать тег <address>? <address> 1100 N. Wullabee Lane <br/> Пенсакола, Флорида <br/> 32503 </address>

Birk 21.01.2009 17:17

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

Sampson 21.01.2009 19:20

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

Matthew Crumley 21.01.2009 19:40

Зачем ставить br после улицы, а не указывать улицу для display: block? Причина в том, что BR является встроенным и, таким образом, может вызвать разрыв строки во встроенном элементе, в то время как содержание уровня блока во встроенном элементе недопустимо?

crush 30.06.2015 17:26

@crush Вы можете заблокировать .street. Элемент address также по умолчанию является block. Я подозреваю, что в то время решение использовать элемент <br> было произвольным.

Sampson 30.06.2015 23:12

@JonathanSampson Так оно и есть. Я даже не заметил, что вы используете <address>. Думаю, я предположил, что он был вложен в <p> или что-то в этом роде. Нужно больше сна

crush 01.07.2015 02:13

На самом деле это не ответ. Это просто то, что вам нравится и что вы ненавидите, без каких-либо рассуждений (кроме рассуждений о личном вкусе). - изменить: забудь, это ответ 6 1/2 лет. Боже, как идет время.

Sebastian Mach 08.09.2015 13:50
Ответ принят как подходящий

Нет ничего плохого в использовании <br /> или <hr />. Ни один из них не является устаревшим тегом, даже в новой черновой спецификации HTML 5 (соответствующий информация о спецификациях). На самом деле, трудно утверждать правильное использование тега <br /> лучше, чем сам W3C:

The following example is correct usage of the br element:

<p>P. Sherman<br>
42 Wallaby Way<br>
Sydney</p>

br elements must not be used for separating thematic groups in a paragraph.

The following examples are non-conforming, as they abuse the br element:

<p><a ...>34 comments.</a><br>
<a ...>Add a comment.<a></p>

<p>Name: <input name = "name"><br>
Address: <input name = "address"></p>

Here are alternatives to the above, which are correct:

<p><a ...>34 comments.</a></p>
<p><a ...>Add a comment.<a></p>

<p>Name: <input name = "name"></p>
<p>Address: <input name = "address"></p>

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

Изменить 1:

Еще одна мысль, которая у меня возникла после того, как я впервые нажала кнопку «post», - в последние годы среди веб-разработчиков было много настроений против <table>, и не без оснований. Люди злоупотребляли тегом <table>, используя его для верстки и форматирования сайта. Это не то, для чего он нужен, поэтому вы не должны использовать его таким образом. Но означает ли это, что вам следует никогда использовать тег <table>? Что, если у вас действительно есть таблица качества в вашем коде, например, если вы пишете научную статью и хотите включить периодическая таблица элементов? В этом случае использование <table> полностью оправдано, оно становится семантической разметкой вместо форматирования. То же самое и с <br />. Когда это часть вашего контента (то есть текст, который должен разрываться в этих местах, чтобы быть правильным английским), используйте его! Когда вы делаете это просто из соображений форматирования, лучше всего попробовать другой способ.

Также стоит процитировать спецификацию <hr> HTML5, которая четко объясняет его семантическое значение: «Элемент hr представляет собой тематический разрыв на уровне абзаца, например, изменение сцены в рассказе или переход к другой теме в разделе справочника».

user56reinstatemonica8 26.02.2013 18:17

@Joshua - простите меня за публикацию в такой старой ветке, но я вижу в вашем профиле, что в последний раз вас видели несколько часов назад, так что вы, по-видимому, все еще активный член SO :). Видите ли, я не могу заметить разницы между «правильным» использованием и «несоответствующим» примерами o_O В обоих случаях тег <br> находится внутри тега <p>. Так в чем же разница? То есть я вижу теги <a> и <input>, но не думаю, что это все.

konrad_firm 14.03.2016 17:35

Привет @konrad_firm. Вы правы в том, что с технической точки зрения эти два использования могут выглядеть одинаково. Разница в смысловом значении. В случае почтового адреса разрыв строки является частью данных. В нем всегда будет разрыв строки, даже если он был написан в Блокноте или на крошечном экране. При «неправильном» использовании разрыв строки используется для презентации. Что, если вы хотите отформатировать две ссылки по-разному на крошечном экране, для программы чтения с экрана или в другой стране? <br> нельзя изменить в CSS, поэтому его следует избегать в презентационных целях. Есть смысл?

Joshua Carmody 14.03.2016 22:00

@Joshua - очень БОЛЬШОЕ спасибо, да, теперь это имеет смысл. Особенно последние два предложения. Наконец, спустя столько лет я понял это :) Еще раз спасибо!

konrad_firm 15.03.2016 10:07

Я вставляю <hr style = "display:none"> между разделами. Например, между столбцами в многоколоночном макете. В браузерах без поддержки CSS разделение по-прежнему будет четким.

ооо, я не уверен насчет этого, хотя это интересная идея. Вы знаете где-нибудь, где обсуждается эта идея?

Steve Perks 21.01.2009 01:23

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

mercator 29.01.2009 01:23

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

С другой стороны, HR является чисто презентационным: горизонтальная линия, горизонтальная линия. Вместо этого используйте border-top / bottom для соседних элементов.

Я лично считаю, что в интересах истинного разделения содержания и стиля следует избегать как <br />, так и <hr />.

Что касается отказа от тегов <br /> в моей собственной разметке, я использую <div> в сочетании со свойством css margin для обработки всего, что требует разрыва строки, и <span> для всего, что было бы встроенным, но с другим «классом содержимого». (явно различая их по атрибуту class).

Чтобы заменить тег <hr /> на css, я просто создаю <div> со свойством css border-top-style, установленным на solid, а остальные три стороны - на none. Свойства margin и padding упомянутого <div> затем обрабатывают фактическое размещение / позиционирование горизонтальной линии.

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

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

Кроме того, если у вас есть много небольшого контента, разделенного HR, Googlebot в настоящее время будет рассматривать его как «N отдельных записей», что может быть вам полезно.

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

Вы можете использовать <br>, но не использовать <hr>.

<BR> - LINE BREAK
— это отображаемая информация. Еще в обычное использование, но использование с ограничениями.

<HR> - ГОРИЗОНТАЛЬНОЕ ПРАВИЛО
- Отображать информацию без семантического значения - никогда не используйте это. «Горизонтальность» по определению является визуальным признаком.

Источник: Руководство по правильному использованию HTML-тегов

Почему «сдержанно» и «никогда»? Какие-нибудь причины?

Yvon 11.08.2014 09:01

HTML предназначен для описания структуры веб-страницы. CSS предназначен для описания презентации. Разрыв строки является структурным, но горизонтальная линейка включает информацию о презентации. Например, если бы мы хотели визуализировать HTML-контент, повернутый на 90 градусов на его сторону, разрыв строки все равно имел бы смысл, но не «горизонтальное» правило.

Geoffrey Hale 12.08.2014 12:18

Вот отрывок из курса, который поможет вам изучить html.

<form>
    <p>Choose your pizza toppings:</p>
    <label for = "cheese">Extra cheese</label>
    <input id = "cheese" name = "topping" type = "checkbox" value = "cheese">
    <br>
    <label for = "pepperoni">Pepperoni</label>
    <input id = "pepperoni" name = "topping" type = "checkbox" value = "pepperoni">
    <br>
    <label for = "anchovy">Anchovy</label>
    <input id = "anchovy" name = "topping" type = "checkbox" value = "anchovy">

Другие вопросы по теме