- Укрощаем длинный текст средствами HTML и CSS — Блог
- flex-wrap — CSS | MDN
- Есть ли способ, чтобы перенос длинных слов в блоке div?
- Div без переноса строки — Знай свой компьютер
- Предотвращение разрывов строки с помощью CSS
- Перенос элементов в контейнере — CSS: Flex
- Тэг br, а так ли он нужен?
- перелива-пленка | CSS-уловки
- разрыв слов | CSS-уловки
- Обработка длинных слов и URL-адресов (принудительные разрывы, расстановка переносов, многоточие и т. Д.)
- дефисов | CSS-уловки
- overflow-wrap — CSS: каскадные таблицы стилей
- Перенос и разрыв текста — CSS: каскадные таблицы стилей
- html - Как сделать так, чтобы текст не занимал более 1 строки?
Укрощаем длинный текст средствами HTML и CSS — Блог
Перенос длинных слов
Проблема переноса длинных слов встречается не так редко, как может показаться. Если не брать во внимание слова-рекордсмены вроде “метилпропенилендигидроксициннаменилакрилической кислоты”, порой в установленные макетом страницы рамки не умещаются менее экзотические слова.
Браузеры по умолчанию не разбивают длинные слова на несколько строк. Перенос на новую строку происходит только там, где стоит дефис, пробел или Enter (исключение составляют неразрывный пробел и неразрывный дефис ‑). При некоторых условиях может появиться ползунок горизонтальной прокрутки, но чаще всего слово выйдёт за границы отведённого ему блока.
Немного иначе ведут себя flexbox элементы и таблицы, они игнорируют установленную ширину и всегда растягиваются настолько, чтобы вместить текст целиком. В примере ниже flex-контейнеру было задано ограничение по ширине (width: 300px;), однако видно, что в зависимости от контента блок может занимать больше места. Не самая приятная особенность для верстальщика, уверенного, что в его макете всё рассчитано до пикселя.
Перенос слов средствами HTML
Как говорилось выше, по умолчанию браузер не переносит слова на несколько строк. Отчасти потому, что он может не знать, как это сделать грамотно.
Указать браузеру, в каких местах слово может быть разбито переносом можно с помощью символа мягкого разрыва (­
). Переносы будут добавлены только там и тогда, когда это необходимо, чтобы слово поместилось в контейнер.
В HTML5 появился тег <wbr/>, обладающий схожим эффектом, однако он не добавляет символ переноса в месте разрыва слова, что выглядит уже не так красиво.
<html> <head> <style> .card { width: 200px; height: 250px; background: #7cd4ae; padding: 10px; display: inline-block; margin: 2em; } </style> </head> <body> <div> <img src="troll.jpg"> Двухсот­восьмидесяти­восьми­киллограммовый тролль </div> <div> <img src="troll.jpg"> Двухсот<wbr/>восьмидесяти<wbr/>восьми<wbr/>киллограммовый тролль </div> </body> </html>
Перенос слов средствами CSS
В CSS есть несколько свойств, влияющих на перенос текста.
- overflow-wrap (word-wrap) — управляет переносом длинных слов (normal — не переносить, если перенос не задан явно, break-word — принудительно переносить).
- word-break — управляет переносом длинных слов (normal — не переносить, если перенос не задан явно, break-all — принудительно переносить, keep-all — не переносить, даже если слово содержит дефис).
- hyphens — автоматический перенос слов, основанный на встроенном в браузер словаре переносов (none — не переносить, auto — переносить длинные слова).
Название word-wrap является устаревшим, но сохраняется для совместимости со старыми версиями браузеров.
Свойство hyphens является наиболее мощным и удобным, но его поддержка браузерами пока не идеальна. Плюс оно требует обязательного указания языка в атрибуте lang тега (например, lang=»ru»).
<html> <head> <style> .description { width: 100px; background: #7cd4ae; word-wrap: break-word; word-break: break-all; /* более приоритетно */ } </style> </head> <body> <div lang="ru"> Верховный суд Лос-Анджелеса решит судьбу огромнейшего трёхсотвосьмидесятикилограммового изумруда </div> </body> </html>
<h3>Перенос длинных слов</h3> <p>Проблема переноса длинных слов встречается не так редко, как может показаться. Если не брать во внимание слова-рекордсмены вроде “метилпропенилендигидроксициннаменилакрилической кислоты”, порой в установленные макетом страницы рамки не умещаются менее экзотические слова.</p> <p>Браузеры по умолчанию не разбивают длинные слова на несколько строк. Перенос на новую строку происходит только там, где стоит дефис, пробел или Enter (исключение составляют неразрывный пробел &nbsp; и неразрывный дефис &#8209;). При некоторых условиях может появиться ползунок горизонтальной прокрутки, но чаще всего слово выйдёт за границы отведённого ему блока.</p> <p><img alt=»» src=»/documents/10136/1129663/Article+18+-+1.png/78167a41-190d-4fa6-ad42-94edb58ce6df?t=1546978623888″ /></p> <p>Немного иначе ведут себя flexbox элементы и таблицы, они игнорируют установленную ширину и всегда растягиваются настолько, чтобы вместить текст целиком. В примере ниже flex-контейнеру было задано ограничение по ширине (width: 300px;), однако видно, что в зависимости от контента блок может занимать больше места. Не самая приятная особенность для верстальщика, уверенного, что в его макете всё рассчитано до пикселя.</p> <p><img alt=»» src=»/documents/10136/1129663/Article+18+-+2.png/00d36fc9-bfa7-45e8-ad39-2ab9012e3abc?t=1546978630901″ /></p> <h4>Перенос слов средствами HTML</h4> <p>Как говорилось выше, по умолчанию браузер не переносит слова на несколько строк. Отчасти потому, что он может не знать, как это сделать грамотно.</p> <p>Указать браузеру, в каких местах слово может быть разбито переносом можно с помощью <strong>символа мягкого разрыва</strong> (<code>&shy;</code>). Переносы будут добавлены только там и тогда, когда это необходимо, чтобы слово поместилось в контейнер.</p> <p>В HTML5 появился тег <strong><wbr/></strong>, обладающий схожим эффектом, однако он не добавляет символ переноса в месте разрыва слова, что выглядит уже не так красиво.</p> <pre> <html> <head> <style> .card { width: 200px; height: 250px; background: #7cd4ae; padding: 10px; display: inline-block; margin: 2em; } </style> </head> <body> <div> <img src=»troll.jpg»> Двухсот&shy;восьмидесяти&shy;восьми&shy;киллограммовый тролль </div> <div> <img src=»troll.jpg»> Двухсот<wbr/>восьмидесяти<wbr/>восьми<wbr/>киллограммовый тролль </div> </body> </html></pre> <p> </p> <p><img alt=»» src=»/documents/10136/1129663/Article+18+-+3.png/04451e1d-9f02-48c5-8f66-b18ac5d042e8?t=1546979243873″ /></p> <p> </p> <h4>Перенос слов средствами CSS</h4> <p>В CSS есть несколько свойств, влияющих на перенос текста.</p> <ul> <li>overflow-wrap (word-wrap) — управляет переносом длинных слов (normal — не переносить, если перенос не задан явно, break-word — принудительно переносить).</li> <li>word-break — управляет переносом длинных слов (normal — не переносить, если перенос не задан явно, break-all — принудительно переносить, keep-all — не переносить, даже если слово содержит дефис).</li> <li>hyphens — автоматический перенос слов, основанный на встроенном в браузер словаре переносов (none — не переносить, auto — переносить длинные слова).</li> </ul> <p>Название word-wrap является устаревшим, но сохраняется для совместимости со старыми версиями браузеров.</p> <p>Свойства word-wrap и word-break на первый взгляд делают одно и то же, но есть небольшие отличия. Word-wrap считается более общим, тогда как word-break предусматривает специальное поведение для китайского, японского и корейского языков. Word-wrap начинает не поместившееся слово с новой строки, а word-break нет. Однако word-break является более приоритетным по отношению к word-wrap.</p> <p>Свойство hyphens является наиболее мощным и удобным, но его поддержка браузерами пока не идеальна. Плюс оно требует обязательного указания языка в атрибуте lang тега (например, lang=»ru»).</p> <pre> <html> <head> <style> .description { width: 100px; background: #7cd4ae; word-wrap: break-word; word-break: break-all; /* более приоритетно */ } </style> </head> <body> <div lang=»ru»> Верховный суд Лос-Анджелеса решит судьбу огромнейшего трёхсотвосьмидесятикилограммового изумруда </div> </body> </html></pre> <p> </p> <p><img alt=»» src=»/documents/10136/1129663/Article+18+-+4.png/eeaafee6-6067-4be4-92db-fd8c5b910a93?t=1546979251721″ /></p> <div><textarea name=»blogs-entry-content-2103008_original»></textarea></div> <script type=»text/javascript»>CKEDITOR.disableAutoInline=true;CKEDITOR.env.isCompatible=true;</script>
flex-wrap — CSS | MDN
Свойство CSS flex-wrap
задаёт правила вывода flex-элементов — в одну строку или в несколько, с переносом блоков. Если перенос разрешён, то возможно задать направление, в котором выводятся блоки.
flex-wrap: nowrap;
flex-wrap: wrap;
flex-wrap: wrap-reverse;
flex-wrap: inherit;
flex-wrap: initial;
flex-wrap: unset;
Подробнее по свойствам и общей информации смотрите Using CSS flexible boxes.
Свойство flex-wrap
может содержать одно из следующих ниже значений.
Значения
Допускаются следующие значения:
nowrap
- Расположение в одну линию, может привести к переполнению контейнера. Свойство cross-start эквивалентно start или before в зависимости от значения
flex-direction
. wrap
- Расположение в несколько линий. Свойство cross-start эквивалентно start или before в зависимости от значения
flex-direction
и свойство cross-end противоположно cross-start. wrap-reverse
- Ведёт себя так же, как и
wrap
но cross-start и cross-end инвертированы. Formal syntax
nowrap | (en-US) wrap | (en-US) wrap-reverse
HTML
<h5>This is an example for flex-wrap:wrap </h5>
<div>
<div>1</div>
<div>2</div>
<div>3</div>
</div>
<h5>This is an example for flex-wrap:nowrap </h5>
<div>
<div>1</div>
<div>2</div>
<div>3</div>
</div>
<h5>This is an example for flex-wrap:wrap-reverse </h5>
<div>
<div>1</div>
<div>2</div>
<div>3</div>
</div>
CSS
.content,
.content1,
.content2 {
color: #fff;
font: 100 24px/100px sans-serif;
height: 150px;
text-align: center;
}
.content div,
.content1 div,
.content2 div {
height: 50%;
width: 50%;
}
.red {
background: orangered;
}
.green {
background: yellowgreen;
}
.blue {
background: steelblue;
}
.content {
display: flex;
flex-wrap: wrap;
}
.content1 {
display: flex;
flex-wrap: nowrap;
}
.content2 {
display: flex;
flex-wrap: wrap-reverse;
}
Results
BCD tables only load in the browser
Есть ли способ, чтобы перенос длинных слов в блоке div?
Я знаю, что Internet Explorer имеет стиль переноса слов, но я хотел бы знать, существует ли кроссбраузерный способ сделать это для текста в div.
Предпочтительно CSS, но фрагменты JavaScript тоже будут работать нормально.
edit: да, имея в виду длинные строки, ура, ребята!
css html word-wrapПоделиться Источник rutherford 28 октября 2009 в 16:01
6 ответов
- Метка перенос слов
Есть ли способ сделать перенос слов в элементе управления меткой .NET? Я знаю, что есть альтернативный способ с использованием TextBox , собственность BorderStyle нет, собственность ReadOnly true и set свойства WordWrap и собственность многострочное значение true. Есть ли что-нибудь для лейбла?
- Могу ли я использовать перенос слов браузера из JavaScript?
У меня есть какой-то текст в div. Это может быть любой текст Юникода под солнцем, включая китайский, японский и корейский. Теперь мне нужно взять этот текст и завернуть его в JavaScript каким-то эффективным, но правильным способом. Затем мне нужно вставить > в начале каждой строки и поместить…
319
Читая оригинальный комментарий, Резерфорд ищет кроссбраузерный способ обернуть неразрывный текст (вывод из его использования word-wrap для IE, предназначенного для разрыва неразрывных строк).
/* Source: http://snipplr.com/view/10979/css-cross-browser-word-wrap */
.wordwrap {
white-space: pre-wrap; /* CSS3 */
white-space: -moz-pre-wrap; /* Firefox */
white-space: -pre-wrap; /* Opera <7 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* IE */
}
Я уже некоторое время пользуюсь этим классом, и он работает как заклинание. (примечание: я тестировал только в FireFox и IE)
Поделиться Aaron Bennett 28 октября 2009 в 17:31
41
Большая часть предыдущего ответа не сработала для меня в Firefox 38.0.5. Это произошло…
<div>
// Content goes here
</div>
Документация:
Поделиться Paul Zahra 09 июня 2015 в 10:36
Поделиться NVI 28 октября 2009 в 17:00
- Перенос слов в Eclipse Java?
У меня уже есть перенос слов для Eclipse PHP ( как я могу заставить перенос слов работать в файлах Eclipse PDT для PHP? ). а как насчет Eclipse Java? Существует ли аналогичный инструмент для обертывания строк кода Java?
- Перенос слов в консоль PyCharm Python?
Кто-нибудь здесь знает, если и как я мог бы включить перенос слов в консоли Python для длинных строк? Я не могу видеть их целиком, мне всегда приходится прокручивать окно вправо, чтобы получить всю информацию. У меня есть только 5 предлагаемых кнопок: rerun, stop, close, execute current statement,…
13
Решение Аарона Беннета отлично работает для меня, но мне пришлось удалить эту строку из его кода — > white-space: -pre-wrap;
, потому что она выдавала ошибку, поэтому окончательный рабочий код выглядит следующим образом:
.wordwrap {
white-space: pre-wrap; /* CSS3 */
white-space: -moz-pre-wrap; /* Firefox */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* IE */
}
Большое спасибо!
Поделиться Hugo 30 апреля 2014 в 12:48
0
Как упоминает Дэвид, DIVs по умолчанию переносит слова.
Если вы имеете в виду действительно длинные строки текста без пробелов, то я обрабатываю строку на стороне сервера и вставляю пустые промежутки:
thisIsAreallyLongStringThatIWantTo<span></span>BreakToFitInsideAGivenSpace
Это не точно, так как есть проблемы с размером шрифта и тому подобное. Опция span работает, если контейнер имеет переменный размер. Если это контейнер фиксированной ширины, вы можете просто вставить разрывы строк.
Поделиться DA. 28 октября 2009 в 16:13
0
Вы можете попробовать указать ширину для div, будь то в пикселях, процентах или ems, и в этот момент div останется такой же шириной, и текст будет автоматически переноситься в div.
Поделиться Slevin 28 октября 2009 в 16:50
Похожие вопросы:
Перенос слов в CSS3
Есть ли какой-нибудь другой способ словесно обернуть текст внутри div? Я не могу использовать перенос слов в CSS, так как могу использовать только CSS1 и некоторые CSS2. *Use javascript или CSS…
CSS 2.1: Перенос Текста Внутрь Div
У меня есть HTML и CSS, как показано в http://jsfiddle.net/Lijo/Ydjde / Проблема в том, что текст внутри div не ограничивается div. Он ломает div и пишет. Как мы можем обернуть текст внутри самого…
UITextView перенос символов, но не перенос слов
У меня есть UITextView, на котором я хотел бы отключить перенос слов, но оставить перенос символов включенным. В принципе, я хотел бы иметь длинную строку 200+ символов, которая все еще обертывается…
Метка перенос слов
Есть ли способ сделать перенос слов в элементе управления меткой .NET? Я знаю, что есть альтернативный способ с использованием TextBox , собственность BorderStyle нет, собственность ReadOnly true и…
Могу ли я использовать перенос слов браузера из JavaScript?
У меня есть какой-то текст в div. Это может быть любой текст Юникода под солнцем, включая китайский, японский и корейский. Теперь мне нужно взять этот текст и завернуть его в JavaScript каким-то…
Перенос слов в Eclipse Java?
У меня уже есть перенос слов для Eclipse PHP ( как я могу заставить перенос слов работать в файлах Eclipse PDT для PHP? ). а как насчет Eclipse Java? Существует ли аналогичный инструмент для…
Перенос слов в консоль PyCharm Python?
Кто-нибудь здесь знает, если и как я мог бы включить перенос слов в консоли Python для длинных строк? Я не могу видеть их целиком, мне всегда приходится прокручивать окно вправо, чтобы получить всю…
Визуальный перенос слов или перенос слов в файле
Я использую sublime для автоматического переноса слов python кодовых строк, которые выходят за рамки 79 символов, как определяет Pep-8. Изначально я делал возврат, чтобы не выходить за пределы…
Отключить перенос слов в VS-коде
У меня есть следующие настройки в коде VS, чтобы отключить перенос слов editor.wordWrap: off, editor.wordWrapColumn: -1 Перенос слов по-прежнему не выключен. Это делает VS Code действительно…
В расширении VS Code есть ли способ программно задать параметры конфигурации редактора (например, перенос слов)?
Для расширения, над которым я работаю, наши конечные пользователи предпочли бы иметь такие опции, как перенос слов по умолчанию. Мы хотели бы иметь возможность установить это на уровне языка без…
Div без переноса строки — Знай свой компьютер
Здравствуйте. Необходимо чтобы при нехватке места в родительском блоке, дочерние не переносились на новую строку, а скрывались за правым краем и можно было их скроллить
Подскажите каким образом можно это сделать.
1 ответ 1
Для текста есть такая штука white-space: nowrap; Она делает именно то, что вам надо – текст в одну строку! А чтобы работать с другими объектами как с текстом, надо делать их строчными (inline), или строчно-блочными (inline-block). Тогда один объект будет вести себя как одно слово.
inline-block – еще и гораздо более лучший способ выстроить элементы друг за другом Короче говоря, вот ваше решение: http://jsfiddle.net/M8een/1/
У этого способа есть и свои особенности. На инлайны и на инлайн-блоки (как и на текст) влияет вертикальное выравнивание, которое по умолчанию baseline. Сделав плиточную структуру или, скажем, колонки при помощи инлайн-блока хочешь, чтобы они были выравнены по вертикали по верху и надо дополнительно указывать vertical-align: top;
Задача:
Имеем три блока div, которым присвоено свойство float со значением left.
Эти блоки обтекают друг друга и выстраиваются в одну линию.
Но, если теперь начинать сужать окно браузера, то один блок переносится под другой, когда ему не хватает места в окне. Поэтому такие элементы (со свойством float) называют плавающими.
Но, что делать, если мы не хотим, чтобы эти блоки смещались друг под друга?
Я оказываю услуги в этой области. Если что-то не работает или неправильно отображается, без проблем, подправим. Обратившись, вы можете сэкономить часы и даже дни своего свободного времени.
Больше моих уроков по HTML, CSS и верстке сайтов здесь.
Решение здесь довольно простое. Нужно переназначить родителя для этих блоков и назначить ему фиксированную ширину.
По умолчанию, родителем для них является элемент body с шириной width:auto. Когда мы изменяли ширину окна браузера, изменялась и ширина элемента body.
Float работает следующим образом: если элементу с float не хватает места в родительском элементе, он переносится на новую строку. Это у нас и происходило.
Стоит только добавить новый родительский элемент с фиксированной шириной, как все встает на свои места:
Теперь, сколько бы мы не изменяли ширину окна браузера, блоки с float будут находиться на одной линии.
Будет только появляться горизонтальная полоса прокрутки.
Больше моих уроков по HTML, CSS и верстке сайтов здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Или зарегистрируйтесь через социальные сети:
Труднопереносимыми бывают не только люди, но и слова. К примеру, химическое соединение метилпропенилендигидроксициннаменилакрилическая кислота очень похожа на некоторых людей с « подвывертом »! Не знаем, как справляться с такими трудными личностями, но с переносом слов CSS точно поможет:
Зачем переносить «непереносимое»
В большинстве случаев при отображении текстового содержимого веб-страниц в браузере перенос слов не применяется. Если слово не вмещается целиком в область экрана, то по умолчанию оно полностью « переезжает » на следующую строчку.
Частичный перенос применяется лишь к длинным и сложным словам, состоящим из нескольких терминов и разделенных дефисом. Вот тут и возникают проблемы отображения этих слов на разных по диагонали экранах и в разных браузерах. При этом точно предугадать, как длинное слово будет « выглядеть » на клиентской стороне трудно, поэтому задавать переносы « вручную » бессмысленно:
Решаем проблему переноса слов с помощью HTML
Перед тем, как рассмотреть перенос длинных слов в CSS , изучим возможности решения этой проблемы с помощью языка гипертекста.
Для этого в HTML имеется несколько вариантов:
- Использование символа мягкого разрыва — позволяет задать место разрыва сложного слова. При изменении размеров окна браузера на следующую строку переносится только часть длинного слова, стоящая после ­ , а после первой половины выводится знак переноса, похожий на дефис:
- Использование тега — элемент появился в HTML 5 . Он также служит для указания браузеру места для разрыва сложного или длинного слова. Но в отличие от предыдущего спецсимвола этот тег не выводит в месте « разлома » знак переноса, что может негативно сказаться на читаемости всего текста:
Перенос слов средствами CSS
Перед тем, как запретить перенос слов в CSS , давайте рассмотрим несколько свойств, способных разрешить основную проблему:
- word-wrap – описывает, как производить перенос слов, которые по длине не помещаются в установленные размеры контейнера. Сразу стоит предупредить, что с валидацией этого свойства возникают проблемы, и с реализацией его поддержки в CSS консорциум W3C еще не определился. Поэтому специализированные валидаторы при наличии word-wrap в коде будут выдавать ошибку:
Тем не менее, это свойство «воспринимается» всеми современными браузерами и является эффективным решением проблемы переноса длинных слов. word-wrap принимает следующие значения:
- normal – слова не переносятся;
- break-word – автоматический перенос слов;
- inherit – наследование значения родителя.
Пример, иллюстрирующий применение этого свойства:
В новой спецификации CSS свойство word-wrap было переименовано в overflow-wrap . Оба свойства принимают одинаковые значения. Но поддержка overflow-wrap пока реализована слабо, поэтому лучше использовать старую версию свойства:
Как видно на расположенном выше скриншоте, новое свойство поддерживается Google Chrome , но не поддерживается в IE . Поэтому overflow-wrap лучше не использовать для переноса слов в CSS .
- word-break – устанавливает правила переноса строк внутри контейнера, если они не помещаются в него по ширине. Это новое свойство, и его поддержка была реализована в CSS3 . Оно является валидным, но предназначено для работы со строками, поэтому перенос слов может производиться грамматически неправильно.
Свойство принимает три значения:
- normal – используются правила переноса, установленные по умолчанию;
- word-break – перенос строк осуществляется автоматически, чтобы слово поместилось в установленные по ширине размеры контейнера;
- keep-all – отключает автоматический перенос слов в китайском, японском и корейском. Для остальных языков действие значения аналогично normal.
- hyphens – новое свойство, которое появилось с выходом CSS3 . Оно устанавливает, как браузер будет осуществлять перенос слов в выводимом тексте. Свойство принимает несколько значений:
- none – отключает перенос слов в CSS ;
- manual ( значение по умолчанию ) – слова переносятся в тех участках текстового блока, где это задано с помощью тега или мягкого переноса () ;
- auto – браузер автоматически переносит слова на основе своих настроек.
должен присутствовать атрибут lang со значением «ru» (lang=»ru»).
Свойство поддерживается последними версиями IE , Opera и Firefox . Для каждого из них прописывается своя строчка CSS . Hyphens не поддерживается Google Chrome . Пример:
Запрет переноса слов
Иногда нужно сделать так, чтобы строка отображалась полностью без разрыва. Запрет переноса слов в css можно реализовать несколькими способами:
- С помощью неразрывного пробела   , который устанавливается в местах переноса строки или слов;
- Задав свойству white-space значение « nowrap » ( white-space: nowrap ).
Теперь вы сможете переносить с помощью CSS даже самые длинные слова. Но вот с проблемой труднопереносимых людей вам придется разбираться самостоятельно. Попробуйте воздействовать на них методами CSS – может и получиться, хотя мы сами не проверяли.
Предотвращение разрывов строки с помощью CSS
Введение
Разработчики обычно предпочитают применять на веб-страницах перенос по словам. Перенос по словам ограничивает текст и помогает предотвратить проблемы с дизайном. Также перенос текста по словам позволяет предотвратить необходимость горизонтальной прокрутки. Однако иногда бывает так, что нужно оставить блок текста на одной строке вне зависимости от ее длины. Вы можете предотвращать разрывы строк и перенос текста по словам для определенных элементов, используя свойство CSS white-space
.
В этом учебном модуле мы определим стили одного и того же блока текста четырьмя разными способами, один раз с разрывами строки, а три раза без разрывов строки:
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Это даст вам несколько способов выбрать, нужно ли переносить текст по словам.
Предварительные требования
Для данного обучающего руководства вам потребуется следующее:
Шаг 1 — Предотвращение и форсирование разрывов строки в CSS
На этом шаге мы создадим таблицу стилей с тремя разными классами. Каждый из них будет по разному обрабатывать разрывы строк: первый класс будет разбивать текст на строки стандартным способом, а второй и третий классы запретят создание новой строки и разрыва строки.
Для начала создайте новый файл с именем main.css
, используя nano
или предпочитаемый редактор:
Добавьте в файл следующий код, после чего у вас появятся три класса CSS, использующие несколько свойств, в том числе white-space
:
./main.css
.sammy-wrap {
border-radius: 6px;
background-color: aliceblue;
border: 2px dashed gray;
max-width: 70%;
padding: 1em;
margin-bottom: .4em;
}
.sammy-nowrap-1 {
border-radius: 6px;
background-color: aliceblue;
border: 2px dashed gray;
max-width: 70%;
padding: 1em;
margin-bottom: .4em;
white-space: nowrap;
}
.sammy-nowrap-2 {
border-radius: 6px;
background-color: aliceblue;
border: 2px dashed gray;
max-width: 70%;
padding: 1em;
margin-bottom: .4em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Наш первый класс — .sammy-wrap
. Он определяет шесть общих свойств CSS, в том числе border-radius
, background-color
, border max-width
, padding
и margin-bottom
. Этот класс создает визуальное поле, но при этом не определяет каких-либо специальных свойств переноса текста. Это означает, что строки будут разбиваться по умолчанию.
Наш второй класс — .sammy-nowrap-1
. Он определяет то же поле, что и .sammy-wrap
, но добавляет новое свойство: white-space
. Свойство white-space
имеет множество опций, и все эти опции определяют обработку пробелов внутри заданного элемента. Здесь мы задаем для свойства white-space
значение nowrap
, предотвращающее разрывы строк.
Наш третий класс — .sammy-nowrap-2
. Он добавляет свойство white-space
и еще два дополнительных свойства: overflow
и text-overflow
. Свойство overflow
обрабатывает переполнение
с прокруткой, когда содержимое элемента выходит за границы этого элемента. Свойство overflow
может сделать этот контент доступным для прокрутки, видимым или скрытым. Мы зададим для свойства
overflow значение hidden
, а затем используем свойство text-overflow
для дополнительной настройки. Свойство text-overflow
помогает сообщить пользователю, что часть текста остается скрытой. Мы установили для него значение ellipsis
так, что строка не разрывается и не выходит за пределы поля. CSS скрывает лишний текст и использует значок ...
для обозначения скрытого текста.
Сохраните и закройте файл.
Теперь у нас имеется таблица стилей и мы готовы создать небольшой файл HTML с примерами текста. Далее мы загрузим веб-страницу в браузер и посмотрим, как код CSS может предотвратить появление разрывов строки.
Шаг 2 — Создание файла HTML
После определения классов CSS вы можете применить их к образцам текста.
Создайте и откройте файл с именем index.html
в предпочитаемом редакторе. Обязательно поместите его в ту же папку, что и файл main.css
:
Добавьте в файл следующий код, который установит main.css
как вашу таблицу стилей
, а затем применит классы к полю с образцом текста:
./index.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>How To Prevent Line Breaks with CSS</title>
<link href="main.css" rel="stylesheet">
</head>
<body>
<p > Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.</p>
<p> Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.</p>
<p> Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.</p>
<p > Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.</p>
</body>
</html>
Мы назначили стандартный стиль переноса по словам для первого блока текста, стиль nowrap
— для второго, и стиль nowrap
со свойством hidden
и многоточием
— для третьего. Для четвертого образца мы назначили стиль sammy-wrap
, но здесь мы обходим перенос строк по умолчанию, вставляя в код HTML неразрывные пробелы (
). Если вам нужно предотвратить разрывы строки в одном частном случае, неразрывные пробелы могут помочь сделать это быстро.
Откройте файл index.html
в браузере и посмотрите результаты. Наши четыре текстовых блока будут выглядеть следующим образом:
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Medusafish banded killifish convict blenny saury threadsail beluga sturgeon. Indian mul mora cisco masu salmon, roosterfish requiem shark longnose lancetfish bluefish red snapper Sacramento splittail giant danio.
Мы успешно настроили свойства CSS четырьмя разными способами так, чтобы допускать или не допускать разрывы строк.
Заключение
В этом учебном модуле мы использовали CSS, чтобы предотвратить разрывы строк в текстовом блоке. Мы задали стиль текста внутри поля и добавили свойство white-space
, чтобы заменить правила переноса текста по умолчанию. Чтобы узнать больше о переносе текста по словам и пробелах, изучите свойство white-space
CSS в полном объеме.
Перенос элементов в контейнере — CSS: Flex
При использовании флекс-контейнера элементы стараются вместиться в него без переноса строки. При этом элементы внутри контейнера ведут себя примерно как строчные элементы — занимают только то пространство, которое им необходимо.
See the Pen css_flex_wrap_no-wrap by Hexlet (@hexlet) on CodePen.
Что же произойдёт, если элементам внутри контейнера не хватит места? По логике контейнера элементы обязаны располагаться в одну строку, если не указано другое. Поэтому элементы внутри просто начнут выходить за пределы контейнера, но останутся в одной строке. Это может быть немного неочевидно, но такое поведение частенько помогает сверстать макет, например, эта особенность пригодится при вёрстке слайдеров.
See the Pen css_flex_wrap_wrap by Hexlet (@hexlet) on CodePen.
Я добавил отступы у элементов внутри контейнера, чтобы вы могли увидеть его реальную ширину. Такое поведение хоть и бывает полезным, но не является ожидаемым в большинстве случаев. Как в таком случае переносить элементы? Для этого существует свойство flex-wrap, которое говорит контейнеру переносить дочерние элементы при нехватке места.
Свойство flex-wrap может принимать одно из трёх значений:
- nowrap. Стандартное поведение флекс-контейнера. Элементы не переносятся и располагаются в одну строку даже при нехватке места.
- wrap. Данное значение говорит перенести элементы внутри контейнера при нехватке места.
See the Pen css_flex_wrap_wrap by Hexlet (@hexlet) on CodePen.
- wrap-reverse. То же самое, что и wrap, но происходит не просто перенос, а переворот блоков по главной оси. В данном случае строка со значениями 1 и 2 окажется ниже, в отличие от ситуации с использованием простого wrap
See the Pen css_flex_wrap_wrap-2 by Hexlet (@hexlet) on CodePen.
Использование flex-wrap — отличный выбор при создании адаптивных сайтов. Хоть одно свойство и не может решить всех проблем сразу, но его использование на основном каркасе сайта поможет автоматически переносить элементы на новую строку при нехватке места на мобильных устройствах.
Документация
Тэг br, а так ли он нужен?
Часто можно встретить, что начинающий верстальщик для реализации некоторых своих дизайнерских решений использует тэг <br/>
. Однако остаётся актуальным вопрос «правильное ли это решение?».
На практике встречаются ситуации когда при помощи этого тэга сделаны списки, абзацы, и многое другое. Например, у такого «персонажа» вместо правильной разметки списка:
<ul> <li>Строка Списка первая</li> <li>Строка Списка вторая</li> <li>Строка Списка третья</li> </ul>
Встречается код разряда:
Строка Списка первая<br/> Строка Списка вторая<br/> Строка Списка третья<br/ >
И таких неверных примеров большое количество.
Где не нужен br
Однако, если визуально можно достичь необходимого результата при помощи этого тэга, то почему бы его не использовать?
Ответ прост- этот тэг предназначен для переноса строки, а ни как не для создания списков и абзацев.
Верстка сайта, в котором часто встречается тэг <br/>
, показывает низкую квалификацию «мастера». Для формирования правильной структуры документов искушённый верстальщик может использовать значительное количество специализированных тэгов, среди которых <li>
, <p>
и так далее. А для добавления необходимых визуальных эффектов используют стили css.
Ранее этот тэг использовался, к примеру, при написании стихов, где требовался перенос строки при незаконченной мысли. Однако при желании можно обойтись без него и здесь. Для этого есть даже несколько вариантов, первый это задать с помощью CSS ширину блока, а второй это вместо тэга <p>
использовать тэг <pre>
.
Для тех кто не знает что такое тэг <pre>
— это тег, добавляющий на страницу предформатированный текст. Это значит, что пробелы, переносы строки и т.д. внутри его сохраняются.
При желании мы можем использовать полезные свойства <pre>
у самых рядовых абзацев воспользовавшись кодом:
Хотелось бы отметить, что большинство верстальщиков, которые пишут семантический код, не включили тэг <br/>
в перечень тэгов используемых при такой верстке.
Выводы
- Если возникает необходимость в создании списка на вашей странице, то не стоит использовать тег
<br/>
, для этого существуют теги<ul>, <ol>, <li>
, а если вам не требуется отображение маркера списка, то не стоит возвращаться к злокачественному тегу, а просто стоит в css прописать list-style-type значение none. Например:<ul> <li> Строка первая </li> <li> Строка вторая </li> <li> Строка третья </li> </ul> <style> li { list-style-type: none; } </style>
- При написании текста для формирования абзацев следует использовать тег
<p>
. Ну, а если требуется создать некоторое расстояние между конкретными абзацами нам в помощь придёт CSS, с селекторами first-child, last-child, nth-child – для определения конкретного абзаца и свойствами padding, margin для задания необходимого отступа. Например:Нам нужен какой-нибудь текст. Который имеет несколько абзацев. И перед последним должен быть большой отступ.
Не стоит делать этого так:
Нам нужен какой-нибудь текст.<br/> Который имеет несколько абзацев.<br/> <br/> <br/> И перед последним должен быть большой отступ.
Решение задачи просто. Во первых для каждого абзаца используем необходимый для этого тэг, и HTML код приобретёт вид:
<p> Нам нужен какой-нибудь текст.</p> <p> Который имеет несколько абзацев.</p> <p> И перед последним должен быть большой отступ.</p>
А для создания необходимого промежутка между последним абзацем и текстом используем сss:
p:last-child { padding-top: 25px; } </li>
- И последнее, для создания новой строки можно использовать вспомогательные элементы, к которым относятся
<span>
и<div>
. Например:Контакты: (xx) xxx-xx-xx (xx) xx-xx-xxx bizonoff.net vaden-pro.ru
Это можно сверстать:
<div> <span>Контакты:</span> <span>(xx) xxx-xx-xx</span> <span>(xx) xx-xx-xxx</span> <span>bizonoff.net</span> <span>vaden-pro.ru</span> </div>
Ну а для переносов строк добавляем CSS:
Следовательно, при верстке качественного проекта, можно прекрасно обойтись и без <br/>
, стоит лишь воспользоваться знаниями тэгов и использовать каждый из них по назначению.
Оценок: 10 (средняя 5 из 5)
- 10199 просмотров
Понравилась статья? Расскажите о ней друзьям:
Еще интересное
перелива-пленка | CSS-уловки
Свойство overflow-wrap
в CSS позволяет указать, что браузер может разбивать строку текста внутри целевого элемента на несколько строк в другом неразрывном месте. Это помогает избежать необычно длинной строки текста, вызывающей проблемы с разметкой из-за переполнения.
.example {
переполнение-обертка: слово-прерывание;
}
Значения
-
нормальный
: по умолчанию. Браузер разбивает строки в соответствии с обычными правилами переноса строк.Слова или непрерывные строки не разорвутся, даже если они переполнят контейнер. -
break-word
: слова или строки символов, которые слишком велики, чтобы поместиться в их контейнер, будут разорваны в произвольном месте, чтобы вызвать разрыв строки. Символ дефиса не будет вставлен, даже если используется свойстводефисов
. -
наследовать
: целевой элемент должен наследовать значение свойстваoverflow-wrap
, определенного для его непосредственного родителя.
В приведенной ниже демонстрации есть кнопка переключения, которая позволяет переключаться между нормальным
и контрольным словом
.
См. Демонстрацию переноса пером / переноса слов Луи Лазариса (@impressivewebs) на CodePen.
Чтобы продемонстрировать проблему, которую пытается решить overflow-wrap
, в демонстрации используется необычно длинное слово внутри относительно небольшого контейнера. Когда вы включаете break-word
, слово разрывается, чтобы уместить небольшой объем доступного пространства, как если бы слово было несколькими словами.
Строка неразрывных пробелов ( & nbsp;
) будет обрабатываться таким же образом и также будет разрываться в подходящем месте.
overflow-wrap
полезен при применении к элементам, которые содержат немодерируемый пользовательский контент (например, разделы комментариев). Это может предотвратить нарушение макета веб-страницы длинными URL-адресами и другими непрерывными строками текста (например, вандализмом).
Сходства с разрывом слова
Свойство overflow-wrap
и word-break
ведут себя очень похоже и могут использоваться для решения схожих проблем.Краткое изложение разницы, как объясняется в спецификации CSS:
-
overflow-wrap
обычно используется, чтобы избежать проблем с длинными строками, вызывающими нарушение макета из-за вывода текста за пределы контейнера. -
word-break
определяет возможность мягкого переноса между буквами, обычно связанными с такими языками, как китайский, японский и корейский (CJK).
После описания примеров того, как word-break
может использоваться в контенте CJK, в спецификации говорится: «Чтобы включить дополнительные возможности прерывания только в случае переполнения, см. overflow-wrap
».
Исходя из этого, мы можем предположить, что word-break
лучше всего использовать с неанглийским контентом, который требует определенных правил разбиения слов и который может перемежаться с английским контентом, в то время как overflow-wrap
следует использовать во избежание поломки. макеты из-за длинных строк, независимо от используемого языка.
Исторический
Перенос слов
Свойство overflow-wrap
— стандартное имя для своего предшественника, свойства word-wrap
. Перенос слов
изначально был проприетарной функцией только для Internet Explorer, которая в конечном итоге поддерживалась во всех браузерах, несмотря на то, что не была стандартом.
word-wrap
принимает те же значения, что и overflow-wrap
, и ведет себя так же. Согласно спецификации, браузеры «должны обрабатывать word-wrap
как альтернативное имя для свойства overflow-wrap
, как если бы оно было сокращением overflow-wrap
». Кроме того, все пользовательские агенты должны поддерживать перенос слов
на неопределенный срок по причинам устаревшего характера.
Как overflow-wrap
, так и word-wrap
будут проходить проверку CSS, пока валидатор настроен на проверку на соответствие CSS3 или выше (в настоящее время используется по умолчанию).
Связанные
Дополнительная информация
Поддержка браузера
Desktop
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
23 | 49 | 11 | 18 | 6.1 |