Розрив рядка (як <br>), використовуючи лише css


84

Чи можливо в чистому css, тобто без додавання додаткових тегів html, зробити розрив рядка як <br>? Я хочу розрив рядка після <h4>елемента, але не раніше:

HTML

<li>
  Text, text, text, text, text. <h4>Sub header</h4>
  Text, text, text, text, text.
</li>

CSS

h4 {
  display: inline;
}

Я знайшов багато подібних запитань, але завжди з відповіддю на зразок "використовувати дисплей: блок;" , що я не можу зробити, коли судно <h4>повинно залишатися на одній лінії.


Чому цей елемент є h4? Чому ви використовуєте його у такому місці?
toniedzwiedz

Нам цікаво, з якої причини ви не хочете використовувати <br/>?
Філіп Кіркбрайд,

1
Причина: у мене надзвичайно багато елементів списку. І мені також було цікаво, чи існує елегантне рішення. Зазвичай не приємно використовувати теги br між елементами (і я бачу заголовок як власний елемент)
Стівен

@Tom, це спрощений приклад. У мене є текст som і заголовки в кожному елементі списку.
Стівен

Відповіді:


134

Це працює так:

h4 {
    display:inline;
}
h4:after {
    content:"\a";
    white-space: pre;
}

Приклад: http://jsfiddle.net/Bb2d7/

Фокус походить звідси: https://stackoverflow.com/a/66000/509752 (щоб отримати додаткові пояснення)


10
\aозначає розрив рядка, символ U + 000A, і пропонує white-space: preбраузерам розглядати це як розрив рядка при отриманні.
Jukka K. Korpela

Добре, дякую @ JukkaK.Korpela. Тоді чому це взагалі не відображається як розрив рядка? Хоча це рішення просте, воно все одно замінить інші команди пробілу.
Стівен

3
@Steeven, вона перекриває тільки початкове значення white-spaceна :afterпсевдо-елемента, який містить тільки розрив рядка. І це потрібно, оскільки в HTML за замовчуванням розрив рядка у вмісті елемента еквівалентний пробілу і не спричиняє розриву рядка у відтвореному документі.
Jukka K. Korpela

3
@Alshten, спасибі, має сенс і повністю дивує мене одночасно.
sonjz

Ніколи б не подумав про це. Шкода, що не можна вставити HTML!
Lodewijk

7

Спробуйте

h4{ display:block;}

у вашому css

http://jsfiddle.net/ZrJP6/


1
плюс деяке розумне використання margin-bottomмає привести вас туди.
Джеремі Головац

4
Але якщо я добре розумію, h4 повинен знаходитись у тому ж рядку, що і текст раніше. З дисплеєм: блок, перед h4 є розрив рядка.
адріантоїн

Що? margin-bottomпоставить h4 у той самий рядок, що і попередній текст?
Стівен

!! Це не робоче рішення: у такому браузері, як Safari, у вашому рядку буде "display: none" !!
Грегдебрик,

5

Ви можете використовувати ::afterдля створення 0pxблоку -height після <h4>, який ефективно переміщує будь-що після символу <h4>в наступний рядок:

h4 {
  display: inline;
}
h4::after {
  content: "";
  display: block;
}
<ul>
  <li>
    Text, text, text, text, text. <h4>Sub header</h4>
    Text, text, text, text, text.
  </li>
</ul>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.