Как изменить высоту <br>?


263

У меня есть большой абзац текста, который разделен на подпункты с <br>:

<p>
  Blah blah blah.
  <br/>
  Blah blah blah. Blah blah blah. Blah blah blah.
  <br/>
  Blah blah blah.
</p>

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

Я пробовал настройку <br>«s line-heightи heightс display: block, я также Гуглом и Stack Overflow-й изд кратко, но не нашел никакого решения. Возможно ли это даже без изменения макета?


Ваше форматирование может привести к путанице в том, что тэги br имеют значение высоты. Как указано ниже, это просто разрывы строк. Вы пытались сделать что-нибудь подобное в вашем текстовом редакторе?
Йорг

Изменение высоты <br> семантически неправильно. <br> означает, что вы просто помещаете в текст еще одну строку, а отдельный абзац должен иметь фиксированную высоту строки. Если какой-то текст отделен, это должен быть отдельный абзац.
Робо Робок


1
@JohnHenckel Немного вводит в заблуждение, поскольку <p>теги не могут содержать <div>теги, см. Этот пост
deseosuho

1
Иногда код, который нам дали для форматирования, не является тем, что мы можем контролировать. Именно в это время вы начинаете говорить себе: «Я не могу добавить теги <p> ... возможно, если я просто изменю высоту звездочек, которые вместо этого используются в качестве разделителей»
Брайан

Ответы:


275

Css:

br {
   display: block;
   margin: 10px 0;
}

Решение, вероятно, не совместимо с разными браузерами, но это как минимум. Также рассмотрите установку line-height:

line-height:22px;

Для Google Chrome рассмотрите настройку content:

content: " ";

Кроме этого, я думаю, что вы застряли с решением JavaScript.


31
Это НЕ работает в: IE7, Opera10, Chrome2. В Firefox это поле создает двойной размер. Вы должны указатьmargin-top: 10px;
трепет

8
Добавьте content:" "атрибут к этому стилю, и он отлично работает в Chrome
anushr

8
Это решение работает в Firefox. Для браузеров на основе webkit вы можете добавить line-height. В конце концов это что-то вроде br { display:block; margin-top:10px; line-height:22px; }.
Ктулху

2
@awe: Лучшее решение было бы margin:10px 0 0для тех, кто не хочет, чтобы это было в два раза больше.
Кайла

1
У меня не работает ... Я тоже попробовал код @ трепета margin-top: 10px;, все еще не работал ....
Кардинал - Восстановить Монику

68

Вот правильное решение, которое фактически поддерживает кросс-браузер:

  br {
        line-height: 150%;
     }

1
Не IE7, насколько я могу судить.
Сергей

30
Это работает для увеличения высоты разрыва строки, но не для ее уменьшения .
Плутон

2
@htmldrum Когда у вас нет возможности изменить HTML, а только CSS, это прекрасно работает. Спасибо! Это должно быть поддержано и расценено как правильный ответ. Думаю.
февраля

@Pluto: ответ Найджела ниже работает для меня, чтобы уменьшить высоту!
Анупам

2
К сожалению, больше не работает в Chrome v.76. Для Edge и IE вам также нужно добавить вертикальное выравнивание: верх. Я разместил решение здесь: stackoverflow.com/a/29674365/562862
Дейв Бертон

48

Итак, взгляды выше получили в основном аналогичный ответ, но здесь он очень лаконичен. Работает в Opera, Chrome, Safari & Firefox, скорее всего IE тоже?

br {
            display: block; /* makes it have a width */
            content: ""; /* clears default height */
            margin-top: 0; /* change this to whatever height you want it */
}

3
Это. Это правильно по отношению к заявленному вопросу. И это также единственный ответ на странице, который действительно сделал то, что мне было нужно.
Xodarap777

Ни один из других ответов не работал для меня, пока я не изменил содержание. Это правильный ответ, ИМО.
Ксандор

39

Другой способ - использовать HR . Но, и здесь есть хитрость, сделайте ее невидимой.

Таким образом:

<hr style="height:30pt; visibility:hidden;" />

Чтобы сделать чище перерыв BR, смоделированный с помощью HR: Btw работает во всех браузерах !!

{ height:2px; visibility:hidden; margin-bottom:-1px; }

1
Мне пришлось добавить маржу: 0px для IE8
IvanH

34
Это ужасное злоупотребление тегами HTML, лучше использовать <p></p>с полями, а не уничтожать<hr />
Серж Саган

Этот трюк хорош, но чтобы получить более точный результат, вы должны использовать поля: 0 и границы: 0.
MAChitgarha

25

Насколько я знаю <br>, не имеет высоты, это просто вызывает разрыв строки. У вас есть текст с некоторыми переносами строк в дополнение к автоматическим переносам, а не подпункты. Вы можете изменить межстрочный интервал, но это повлияет на все строки.


1
Кажется, что на самом деле нет пути. Я даже пытался поиграть со свойствами: before и: after, но ... :(
n1313

1
Я знаю, что это очень старо, но у @Isaac Minogue есть правильный способ сделать это. Изменение contentсвойства делает свое дело.
Ксандор

22

У меня просто была эта проблема, и я обошел ее, используя

<div style="line-height:150%;">
    <br>
</div>

Это прекрасно работает, а также обходит ограничение ответа @ htmldrum
Anupam

11

Вы можете применить высоту строки к этому <p>элементу, чтобы линии стали больше.


4
Да, конечно, но это не то, что я хочу.
n1313

1
Чем это будет отличаться от того, что вы хотите? Это увеличит расстояние между строками.
Йорг

У меня чуть больше девяти бла в моем тексте. Представьте себе несколько килобайт текста, разделенных на три блока по три символа.
n1313

Если вы примените высоту строки к <br>тегу, то принудительные разрывы строк будут больше, чем
переносимые переносы

1
Похоже, вы хотите три абзаца, а не использовать <br/>
Крис Чилверс

7

Я не пробовал псевдоэлемент :before/ :afterCSS2 прежде, в основном потому, что он поддерживается только в IE8 (это касается браузеров IE) . Это может быть единственно возможным решением CSS:

br:before {
    display: block;
    margin-top: 10px;
    content: "";
}

Вот пример на QuirksMode .


Да, я возлагал большие надежды на: before {content}; тоже, но это подвело меня.
n1313

Впрысните это куда-нибудь, это должно работать. Увы, это не работает в IE6 / 7.
Филипп Дупанович

5

У меня была мысль, что вы могли бы использовать:

br:after {
    content: ".";
    visibility: hidden;
    display: block;
}

Но это не сработало на Chrome или Firefox.

Просто подумал, что упомяну это, если это случится с кем-то еще, и я избавлю их от неприятностей.


5
br {   
    content: "";
    margin: 2em;
    display: block;
    margin-bottom: -20px; 
 }

Работает в Firefox, Chrome & Safari. Не проверял в Проводнике. (Windows-планшет выключен.)

Разрывы строк, размер шрифта работает по-разному в Firefox и Safari.


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

Работайте довольно хорошо для меня, спасибо! Но не хватает какой-то информации.
Виниций Мораес

4

Интересно, что если тег разрыва записан в полной форме следующим образом:

<br></br>

тогда CSS-высота строки: 145% работает. Если тег разрыва записывается как:

<br> or 
<br/> 

тогда это не работает, по крайней мере, в Chrome, IE и Firefox. Weird!


4

Что работает для меня, так это добавление этой строки между тегами абзаца ... но это не лучшее решение.

<br style="line-height:32px">

-------- Редактировать ---------

Я столкнулся с проблемами с ПК / Mac с этим ... Он дает тексту новую высоту строки, но не делает разрыв строки ... Вы можете захотеть сделать некоторые тесты самостоятельно. Сожалею!


работал для меня, чтобы управлять размером по вертикали на уровне пикселей внутри UIWebView на IOS.
Диванн

Я столкнулся с проблемами с ПК / Mac с этим ... Он дает тексту новую высоту строки, но не делает разрыв строки ... Вы можете захотеть сделать некоторые тесты самостоятельно. Сожалею!
robinwkurtz,

4

И помните, что (неправильное) использование <hr>тега, как предложено где-то, приведет к его завершению <p>, поэтому забудьте об этом решении.
Если, например, что-то стилизовано для окружения <p>, этот стиль исчезает для остальной части содержимого после <hr>вставки.


Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любой пост .
Glitch Desire

Не критика и не просьба. Просто пытаюсь сказать, что произойдет, если вы поместите тег hr в тег ap, как это было предложено. И, как новичок, у меня недостаточно репутации, чтобы комментировать соответствующий пост. Поэтому, пожалуйста, посоветуйте, как еще мне следует сделать такой комментарий (что, IMHO, очень важно в отношении вопроса).
Нильс

4

Вот решение, которое работает в IE, Firefox и Chrome. Идея состоит в том, чтобы увеличить размер шрифта элемента br с размера тела от 14 до 18 пикселей и уменьшить элемент на 4 пикселя, чтобы дополнительный размер находился ниже текстовой строки. Результатом является 4px дополнительного пробела ниже br.

br 
{ 
font-size: 18px; 
vertical-align: -4px; 
}  

vertical-alignКажется, просто использование трюка с brтегом. Я проверял это на IE 11.

3

ОБНОВЛЕНО 13 сентября 2019 года:

Я использую, <br class=big>чтобы сделать разрыв строки слишком большого размера, когда мне это нужно. До сегодняшнего дня я делал это так:

br.big {line-height:190%;vertical-align:top}

(The vertical-align:top было необходимо только для IE и Edge.)

Это работало во всех основных браузерах, которые я пробовал: Chrome, Firefox, Opera, Brave, PaleMoon, Edge и IE11.

Однако недавно он перестал работать в браузерах на основе Chrome : мои «большие» разрывы строк превратились в разрывы строк обычного размера.

(Я не знаю точно, когда они сломали его. По состоянию на 12 сентября 2019 года он все еще работает в моем устаревшем Chromium Portable 55.0.2883.11, но он не работает в Opera 63.0.3368.71 и Chrome 76.0.3809.132 (оба Windows и Android).)

После некоторых проб и ошибок я получил следующую замену, которая работает в текущих версиях всех этих браузеров:

br.big {display:block; content:""; margin-top:0.5em; line-height:190%; vertical-align:top;}

Ноты:

line-height:190% работает во всем, кроме последних версий браузеров на базе Chrome.

vertical-align:top необходим для IE и Edge (в сочетании с line-height:190% ), чтобы получить дополнительное пространство после предыдущей строки, где оно принадлежит, а не частично до и частично после.

display:block;content:"";margin-top:0.5em работает в Chrome, Opera и Firefox, но не в Edge & IE.

Альтернативный (более простой) способ добавить немного дополнительного вертикального пространства после <br>тега, если вы не возражаете против редактирования HTML, заключается в следующем. Работает нормально во всех браузерах:

<span style="vertical-align:-37%"> </span><br>

(Вы можете, конечно, отрегулировать «-37%» по мере необходимости для большего или меньшего разрыва.) Вот демонстрационная страница, которая включает в себя некоторые другие варианты темы:

https://burtonsys.com/a_little_extra_vertical_space_for_br_tag.html



28 мая 2020 г .:

Я обновил демонстрационную страницу; теперь он демонстрирует все вышеперечисленные методы:

https://burtonsys.com/a_little_extra_vertical_space_for_br_tag.html


2

Майкл и Йода оба правы. Что вы можете сделать, это использовать <p>тег, который, будучи тегом блока, использует нижнее поле для смещения следующего блока, так что вы можете сделать что-то похожее на это, чтобы увеличить интервал:

<p>
    A block of text.
</p>
<p>
    Another block
</p>

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


1
Спасибо за ваш ответ, но я заявил, что не могу сейчас изменить этот макет. Конечно, я изменю это на что-то более разумное, когда это будет возможно, но сейчас - извините.
n1313

1

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


1

Вы также можете использовать свойство "block-quote" в CSS. Это сделало бы так, чтобы это не влияло на ваши отдельные строки, но позволяло вам устанавливать параметры только для разрывов между абзацами или «блочных кавычек».

ОБНОВЛЕНИЕ:
я стою исправлено. "blockquote" на самом деле является свойством html. Вы используете его так же, как <p> и </ p> в своей работе. Затем вы можете установить параметры для вашей цитаты блока в css, как

blockquote { margin-top: 20px }

Надеюсь это поможет. Это похоже на настройку параметров на BR и может быть или не быть кросс-браузер совместимым.


Впервые слышу об этой собственности. Можете ли вы объяснить это более подробно, пожалуйста?
n1313

Я стою исправлено. "blockquote" на самом деле является свойством html. Вы используете его так же, как <p> и </ p> в своей работе. Затем вы можете установить параметры для вашей цитаты блока в css, например: blockquote {margin-top: 20px} и т. Д. И т. Д.
Jonn

1

Кажется, вы не можете отрегулировать высоту БР, но вы можете сделать так, чтобы она надежно исчезла с помощью дисплея: нет

Наткнулся на эту страницу при поиске решения по следующему:

У меня есть ситуация, когда сторонний платежный шлюз (Worldpay) позволяет вам настраивать их платежные страницы максимум с 10k CSS и HTML (сценарий не разрешен), которые вставляются в тело их шаблона, а также после нескольких BR, тегов FONT и т. Д. В сочетании с DTD, который переводит IE7 / 8 в режим Quirks, кросс-браузерная настройка становится настолько сложной, насколько это возможно!

Отключение BR делает вещи более последовательными ...


1

Я использую эти методы, но я не знаю, если кросс-браузер

================= Метод 1 ==================

br {
    display:none;
}

ИЛИ

================= Метод 2 ==================

br {
    display: block;
    margin-bottom: 2px;
    font-size:2px;
    line-height: 2px;
}
br:before {
    display: block;
    margin-top: 2px;
    content: "";
}
br:after {
    content: ".";
    visibility: hidden;
    display: block;
}

ИЛИ

================= Метод 3 ==================

br:after { content: "" }
br { content: "" }

upvote для отображения: нет. это то, что я в итоге сделал!
Брайан

1

Попробуйте использовать line-heightатрибут CSS в вашем pтеге, который содержит этот brтег. Помните, что вы можете использовать idсвои pтеги, если хотите изолировать их, хотя, возможно, лучше использовать divдля изоляции IMO.


1

Извините, если кто-то уже сказал это, но простое решение - поиграть с вашей "высотой строки". Если вы используете слишком много места, когда используете разрыв строки, это просто потому, что у вас слишком высокая высота строки. Вы можете исправить это в CSS (но знайте, что это повлияет на все, что использует это свойство) или вы можете использовать встроенный стиль для переопределения CSS.


Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любой пост . - Из Обзора
JRodDynamite

Я не согласен. Вопрос ОП заключался в том, как отрегулировать высоту разрыва строки. Вы не можете, поэтому вы регулируете высоту линии для достижения желаемого эффекта.
Даниэль Сиддалл

1

Мне пришлось разработать решение для преобразования HTML в PDF и вертикального центрирования текста в ячейках таблицы, но ничего не получалось, кроме ввода простого <br>

Поэтому, не задумываясь, я изменил размер по вертикали, настроив размер шрифта (в pt).

<font style="font-size: 4pt"><br></font>

0
<span style="line-height:40px;"><br></span> 

Вы должны сделать это встроенным и для каждого
элемента, но он должен работать в большинстве браузеров Fiddle с высотой строки, чтобы получить желаемый эффект. Если вы сделаете его встроенным для каждого элемента, он должен работать в большинстве браузеров и электронной почты (но это слишком сложно для обсуждения здесь).


1
Так зачем размещать это, если вы не собираетесь приводить примеры? Вся идея сайта является то , что вы делаете это обсуждать.
Пол

0

Это помогло мне, когда я не смог заставить интервал стилей работать из тега span:

        <p style='margin-bottom: 5px' >
            <span>I Agree</span>
        </p>
        <span>I Don't Agree</span>

0

использование <div>

<div>Content 1</div>Content 2

Это позволяет новую линию без вертикального пробела.

Это становится

<div>Content 1</div>Content 2


0

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

br {
    content: " ";
    display: block;
}

Для решения конкретной проблемы я должен был иметь определенное расстояние между строками. Я добавил поле сверху и снизу.

br {
    content: " ";
    display: block;
    margin: 0.25em 0;
}

0

Я заставил его работать в IE7, используя комбинацию решений, но в основном упаковывая Br в DIV, как предлагали Найджел и другие. Добавил Id и запустил at = "server", чтобы я мог удалить BR при удалении флажка из ряда флажков.

.narrow {
    display: block;
    margin: 0px;
    line-height: 0px;
    content: " "; 
}
<div class="narrow" run at="server"><br></br></div>

0

Возможно, использование двух тегов br - самое простое решение, которое работает со всеми браузерами. Но это повторяется.

<p>
content
</p>
<br /><br />
<p>
content
</p>
<br /><br />
<p>
content
</p>

0

Как насчет простого добавления абзаца вместо разрыва строки, например,

бла ла ля бла бла абла ля ля бла бла абла ля ля бла бла

бла ла ля бла бла абла ля ля бла бла абла ля ля бла бла

бла ла ля бла бла абла ля ля бла бла абла ля ля бла бла

Затем вы можете указать высоту строки или отступы или что-то для этого р


Да, я определил «большой» класс для <br> и <p>. «<br class=big>» добавляет пробел между строками, а «<p class = big>» добавляет пробел перед абзацем: ‍‍‍‍‍‍ ‍‍ br.big {display: block; Содержание: ""; Запас-топ: 0.5em; высота строки: 190%; vertical-align: top;} ‍‍‍‍‍‍ ‍‍ p.big {margin-top: 1.5em} ‍‍‍‍‍‍ ‍‍ Но проблема с тэгом <p> заключается в том, что он не соответствует стилю почтовых программ. Когда текст электронной почты, содержащий разрывы абзацев, «цитируется» в ответах по электронной почте, расстояние между абзацами часто резко меняется. Поэтому я использую двойные разрывы строк (ctrl-enter в gmail) в электронных письмах.
Дейв Бертон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.