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

n1313
источник
Ваше форматирование может привести к путанице в том, что тэги 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.

Duroth
источник
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%;
     }
htmldrum
источник
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>
Nigel
источник
Это прекрасно работает, а также обходит ограничение ответа @ htmldrum
Anupam
11

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

Yoda
источник
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.

DeFliGra
источник
Не могли бы вы конкретнее сказать, какая часть вашего css решила проблему? Это поможет другим понять ответ.
Фрэнк Брайс
Работайте довольно хорошо для меня, спасибо! Но не хватает какой-то информации.
Виниций Мораес
4

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

<br></br>

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

<br> or 
<br/> 

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

keithphw
источник
4

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

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

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

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

robinwkurtz
источник
работал для меня, чтобы управлять размером по вертикали на уровне пикселей внутри 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 и может быть или не быть кросс-браузер совместимым.

Jonn
источник
Впервые слышу об этой собственности. Можете ли вы объяснить это более подробно, пожалуйста?
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: "" }
T.Todua
источник
upvote для отображения: нет. это то, что я в итоге сделал!
Брайан
1

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

Drizien
источник
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 с высотой строки, чтобы получить желаемый эффект. Если вы сделаете его встроенным для каждого элемента, он должен работать в большинстве браузеров и электронной почты (но это слишком сложно для обсуждения здесь).

Liam
источник
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;
}
JGallardo
источник
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

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

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

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

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

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

user7212232
источник
Да, я определил «большой» класс для <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) в электронных письмах.
Дейв Бертон