Css перенос текста в блоке: Укрощаем длинный текст средствами HTML и CSS — Блог

Содержание

Укрощаем длинный текст средствами 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">
      Двухсот&shy;восьмидесяти&shy;восьми&shy;киллограммовый тролль
    </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 является устаревшим, но сохраняется для совместимости со старыми версиями браузеров.

Свойства word-wrap и word-break на первый взгляд делают одно и то же, но есть небольшие отличия. Word-wrap считается более общим, тогда как word-break предусматривает специальное поведение для китайского, японского и корейского языков. Word-wrap начинает не поместившееся слово с новой строки, а word-break нет. Однако word-break является более приоритетным по отношению к 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 (исключение составляют неразрывный пробел &amp;nbsp; и неразрывный дефис &amp;#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>&amp;shy;</code>). Переносы будут добавлены только там и тогда, когда это необходимо, чтобы слово поместилось в контейнер.</p> <p>В HTML5 появился тег <strong>&lt;wbr/&gt;</strong>, обладающий схожим эффектом, однако он не добавляет символ переноса в месте разрыва слова, что выглядит уже не так красиво.</p> <pre> &lt;html&gt; &lt;head&gt; &lt;style&gt; .card { width: 200px; height: 250px; background: #7cd4ae; padding: 10px; display: inline-block; margin: 2em; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt; &lt;img src=»troll.jpg»&gt; Двухсот&amp;shy;восьмидесяти&amp;shy;восьми&amp;shy;киллограммовый тролль &lt;/div&gt; &lt;div&gt; &lt;img src=»troll.jpg»&gt; Двухсот&lt;wbr/&gt;восьмидесяти&lt;wbr/&gt;восьми&lt;wbr/&gt;киллограммовый тролль &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p>&nbsp;</p> <p><img alt=»» src=»/documents/10136/1129663/Article+18+-+3.png/04451e1d-9f02-48c5-8f66-b18ac5d042e8?t=1546979243873″ /></p> <p>&nbsp;</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> &lt;html&gt; &lt;head&gt; &lt;style&gt; .description { width: 100px; background: #7cd4ae; word-wrap: break-word; word-break: break-all; /* более приоритетно */ } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;div lang=»ru»&gt; Верховный суд Лос-Анджелеса решит судьбу огромнейшего трёхсотвосьмидесятикилограммового изумруда &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p>&nbsp;</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 имеется несколько вариантов:

  • Использование символа мягкого разрыва ­ — позволяет задать место разрыва сложного слова. При изменении размеров окна браузера на следующую строку переносится только часть длинного слова, стоящая после &shy , а после первой половины выводится знак переноса, похожий на дефис:

  • Использование тега — элемент появился в HTML 5 . Он также служит для указания браузеру места для разрыва сложного или длинного слова. Но в отличие от предыдущего спецсимвола этот тег не выводит в месте « разлома » знак переноса, что может негативно сказаться на читаемости всего текста:

Перенос слов средствами CSS

Перед тем, как запретить перенос слов в CSS , давайте рассмотрим несколько свойств, способных разрешить основную проблему:

  1. 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 .

  1. word-break – устанавливает правила переноса строк внутри контейнера, если они не помещаются в него по ширине. Это новое свойство, и его поддержка была реализована в CSS3 . Оно является валидным, но предназначено для работы со строками, поэтому перенос слов может производиться грамматически неправильно.

Свойство принимает три значения:

  • normal – используются правила переноса, установленные по умолчанию;
  • word-break – перенос строк осуществляется автоматически, чтобы слово поместилось в установленные по ширине размеры контейнера;
  • keep-all – отключает автоматический перенос слов в китайском, японском и корейском. Для остальных языков действие значения аналогично normal.

  1. hyphens – новое свойство, которое появилось с выходом CSS3 . Оно устанавливает, как браузер будет осуществлять перенос слов в выводимом тексте. Свойство принимает несколько значений:
  • none – отключает перенос слов в CSS ;
  • manual ( значение по умолчанию ) – слова переносятся в тех участках текстового блока, где это задано с помощью тега или мягкого переноса (­) ;
  • auto – браузер автоматически переносит слова на основе своих настроек.

должен присутствовать атрибут lang со значением «ru» (lang=»ru»).

Свойство поддерживается последними версиями IE , Opera и Firefox . Для каждого из них прописывается своя строчка CSS . Hyphens не поддерживается Google Chrome . Пример:

Запрет переноса слов

Иногда нужно сделать так, чтобы строка отображалась полностью без разрыва. Запрет переноса слов в css можно реализовать несколькими способами:

  • С помощью неразрывного пробела &nbsp , который устанавливается в местах переноса строки или слов;
  • Задав свойству 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&nbsp;banded&nbsp;killifish&nbsp;convict&nbsp;blenny&nbsp;saury&nbsp;threadsail&nbsp;beluga&nbsp;sturgeon.&nbsp;Indian&nbsp;mul&nbsp;mora&nbsp;cisco&nbsp;masu&nbsp;salmon,&nbsp;roosterfish&nbsp;requiem&nbsp;shark&nbsp;longnose&nbsp;lancetfish&nbsp;bluefish&nbsp;red&nbsp;snapper&nbsp;Sacramento&nbsp;splittail&nbsp;giant&nbsp;danio.</p>
</body>
</html>

Мы назначили стандартный стиль переноса по словам для первого блока текста, стиль nowrap — для второго, и стиль nowrap со свойством hidden и многоточием — для третьего. Для четвертого образца мы назначили стиль sammy-wrap, но здесь мы обходим перенос строк по умолчанию, вставляя в код HTML неразрывные пробелы (&nbsp;). Если вам нужно предотвратить разрывы строки в одном частном случае, неразрывные пробелы могут помочь сделать это быстро.

Откройте файл 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
Мобильный / планшетный

Указанная выше «частичная» поддержка связана с тем, что старые браузеры поддерживают перенос слов , но не перенос через переполнение . Использование обоих может обеспечить обратную совместимость.

Черновая версия спецификации W3C редактора включает новое значение, называемое пробелов , которое имеет дело с последовательностями «сохраненных» символов пробелов.Нет известных браузеров, поддерживающих эту функцию, и она не включена в рабочую черновую версию спецификации.

разрыв слов | CSS-уловки

Свойство word-break в CSS можно использовать для изменения, когда должен произойти разрыв строки. Обычно разрывы строк в тексте могут происходить только в определенных пробелах, например, когда есть пробел или дефис.

В приведенном ниже примере мы можем вместо сделать разрыв слова между буквами:

  .element {
  слово-разрыв: сломать все;
}  

Если мы затем установим ширину текста равной на , слово будет разрываться на каждую букву:

См. Текст «Настройка пера по вертикали» с разрывом слова с помощью CSS-Tricks (@ css-tricks) на CodePen.

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

См. Ссылки «Исправление пера с разрывом слова» от CSS-Tricks (@ css-tricks) на CodePen.

Значения

  • нормальный : используйте правила по умолчанию для разбиения по словам.
  • break-all : любое слово / буква может перейти на следующую строку.
  • keep-all : для китайского, японского и корейского текста слова не разорваны. В остальном это то же самое, что нормальный .

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

Полное использование с необходимыми префиксами поставщиков:

  -ms-word-break: сломать все;
     слово-разрыв: сломать все;

     / * Нестандартно для WebKit * /
     слово-разрыв: слово-разрыв;

-webkit-дефисы: авто;
   -moz-дефисы: авто;
        дефисы: авто;  

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

 ). 

Связанные

Поддержка браузера

Настольный компьютер
Android Chrome Android Firefox Android iOS Safari
91 89 4,4
Chrome Firefox IE Edge Safari
23 49 11 1812 6,1
Android Chrome Android Firefox Android iOS Safari
91 89 4.4 7,0-7,1

Safari и iOS поддерживают значение для всех , но не для всех

Обработка длинных слов и URL-адресов (принудительные разрывы, расстановка переносов, многоточие и т. Д.)

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

Например:

В URL обычно нет пробелов, поэтому они часто являются виновниками.

Вот большой фрагмент со всеми задействованными игроками CSS:

 .dont-break-out {

  / * Технически они одинаковы, но используются оба * /
  переполнение-обертка: слово-прерывание;
  перенос слов: слово-разрыв;

  -ms-word-break: сломать все;
  / * Это опасный метод в WebKit, так как он везде ломает * /
  слово-разрыв: сломать все;
  / * Вместо этого используйте нестандартный: * /
  слово-разрыв: слово-разрыв;

  / * Добавляет дефис в месте разрыва слова, если поддерживается (без мигания) * /
  -ms-дефисы: авто;
  -moz-дефисы: авто;
  -webkit-дефисы: авто;
  дефисы: авто;

}  

Это решит проблему для нас:

Вот совок:

  • переполнение-перенос: слово прерывания; гарантирует, что длинная нить будет завернута в контейнер и не вырвется из контейнера.Вы также можете использовать word-wrap , потому что, как сказано в спецификации, они буквально являются просто альтернативными именами друг для друга. Некоторые браузеры поддерживают одно, а не другое. Firefox (проверено v43) поддерживает только перенос слов . Blink (проверено Chrome v45) примет любой.
  • Когда overflow-wrap используется сам по себе, слова будут ломаться везде, где им нужно. Если есть символ «допустимого разрыва» (например, буквальное тире), он там прервется, в противном случае он просто сделает то, что ему нужно.
  • Вы также можете использовать дефиса , потому что тогда он попытается со вкусом добавить дефис там, где он ломается, если браузер его поддерживает (Blink не поддерживает на момент написания, Firefox делает).
  • разрыв слова: разбить все; сообщает браузеру, что можно разбивать слово везде, где это необходимо. Несмотря на то, что это так или иначе, я не уверен, в каких случаях это необходимо на 100%.

Если вы хотите, чтобы дефисы были более ручными, вы можете предложить их в своей разметке.Смотрите больше на странице MDN.

Поддержка браузера

Для
разрыв слов :
Настольный компьютер
Chrome Firefox IE Edge Safari
44 15 5.5 1212 9 12 9 Планшетный ПК
Android Chrome Android Firefox Android iOS Safari
91 89 91 9.0-9,2
Для
hypens :
Настольный компьютер
9015 10 * 9015 Мобильный Планшет
Chrome Firefox IE Edge Safari
88 6 * 10 * 12 *49 12 *
Android Chrome Android Firefox Android iOS Safari
91 89 91 4.2-4,3 *
Для
переполнение-обертка :
Настольный компьютер
Chrome Firefox IE Edge Safari
23 49 11 1812 6,1
Android Chrome Android Firefox Android iOS Safari
91 89 4.4 7,0-7,1
Для
переполнения текста :
Настольный ПК
Chrome Firefox IE Edge Safari
4 7 6 1212 12 мобильный
Android Chrome Android Firefox Android iOS Safari
91 89 2.1 3,2

Предотвращение переполнения с помощью многоточия

Другой подход, который следует рассмотреть, — это полное усечение текста и добавление эллипсов в местах, где строка текста попадает в контейнер:

  .ellipses {
  переполнение: скрыто;
  белое пространство: nowrap;
  переполнение текста: многоточие;
}  

Хорошая особенность использования text-overflow заключается в том, что он поддерживается повсеместно.

Примеры

См. Перо с переносом длинных слов от CSS-Tricks (@ css-tricks) на CodePen.

См. Эллипсы пера от CSS-Tricks (@ css-tricks) на CodePen.

См. Статью Криса Койера (@chriscoyier) на CodePen.

Дополнительные ресурсы

Для SCSS-наклонного

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

  @mixin word-wrap () {
  переполнение-обертка: слово-прерывание;
  перенос слов: слово-разрыв;
  -ms-word-break: сломать все;
  слово-разрыв: сломать все;
  слово-разрыв: слово-разрыв;
  -ms-дефисы: авто;
  -moz-дефисы: авто;
  -webkit-дефисы: авто;
  дефисы: авто;
}  
  @mixin ellipsis () {
  переполнение: скрыто;
  белое пространство: nowrap;
  переполнение текста: многоточие;
}  

дефисов | CSS-уловки

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

Обратите внимание, что дефиса зависит от языка. Его способность находить возможности прерывания зависит от языка, определенного в атрибуте lang родительского элемента. Пока поддерживаются не все языки, и поддержка зависит от конкретного браузера.

Синтаксис

  .element {
  дефисы: нет | руководство | авто
}  
дефиса: нет

Слова никогда не переносятся при переносе строки, даже если символы внутри слова указывают на то, где перенос может или должен идти.

дефиса: инструкция

Слова прерываются только в тех местах, где внутри слова есть символы, указывающие на возможность разрыва строки. Есть два символа, которые указывают на возможность разрыва строки:

  • U + 2010 (ДЕФИС): «жесткий» дефис указывает на возможность видимого разрыва строки. Даже если линия на этом не разорвана, дефис все равно отображается. Буквально «-».
  • U + 00AD (SHY): невидимый «мягкий» дефис.Этот персонаж не отображается визуально; вместо этого он предлагает место, где браузер может при необходимости прервать слово. В HTML вы можете использовать для вставки мягкого дефиса.
дефис: авто

Слова могут быть разбиты в соответствующих точках расстановки переносов либо в соответствии с символами переноса (см. Выше) внутри слова, либо в соответствии с автоматическим определением соответствующего языка ресурсом для расстановки переносов (если это поддерживается браузером или предоставляется через @ hyphenation-resource ).

Символы условного переноса внутри слова, если они есть, имеют приоритет над автоматическими ресурсами при определении точек переноса в слове.

дефиса: все

Устарело, не используйте . Это было временно только в спецификации для тестирования.

Демо

Демо ниже содержит кучу абзацев и все установлено на дефиса: auto; , чтобы продемонстрировать концепцию расстановки переносов. Атрибут lang установлен на en в родительском элементе.

  Оцените эту ручку! 

Сопутствующие объекты

  • разрыв слова
  • знак дефиса
  • дефис-зона-предел
  • предел-слово-дефис
  • дефис-предельные строки
  • дефис-предел-последний
  • дефис-ресурсы
  • @ ресурс-дефис

Другие ресурсы

Поддержка браузера

Desktop
1 *
Chrome Firefox IE Edge Safari
88 6 * 10 *47 12 *
Мобильный / планшетный
Android Chrome Android Firefox Android iOS Safari
91 89

Safari 5+ требует -webkit- , Firefox 6+ требует -moz- , IE 10+ требует -ms- , iOS 4.2+ требует -webkit- .

Chrome <55 и браузер Android фактически поддерживают -webkit-hyphens: none , значение по умолчанию, но ни одно из других значений.

В Firefox и Internet Explorer автоматическая расстановка переносов работает только для некоторых языков (определяется с помощью атрибута lang ). См. Это примечание для получения полного списка поддерживаемых языков.

Если вы пишете веб-документ, который действительно нуждается в переносе, вы можете использовать Hyphenator.js, библиотеку, основанную на обширном словаре, который автоматически вставляет мягкие дефисы и пробелы нулевой ширины в ваш контент.

Без JavaScript вам придется использовать как переносов, , так и перенос слов :

 .дефис {
  перенос слов: слово-разрыв;
  переполнение-обертка: слово-прерывание;

-webkit-дефисы: авто;
   -moz-дефисы: авто;
        дефисы: авто;
}  

overflow-wrap — CSS: каскадные таблицы стилей

Свойство overflow-wrap CSS применяется к встроенным элементам, устанавливая, должен ли браузер вставлять разрывы строк в строку, которая в противном случае не может быть разбита, для предотвращения выхода текста за пределы поля строки.

Примечание: В отличие от word-break , overflow-wrap создаст разрыв только в том случае, если целое слово не может быть помещено в отдельную строку без переполнения.

Свойство изначально было нестандартным расширением Microsoft без префикса под названием word-wrap и было реализовано в большинстве браузеров с таким же именем. С тех пор он был переименован в overflow-wrap , где word-wrap является псевдонимом.

 
переполнение-обертка: нормальная;
переполнение-обертка: слово-прерывание;
переполнение-обертка: где угодно;


переполнение-обертка: наследование;
переполнение-обертка: начальная;
переполнение-обертка: вернуться;
переполнение-обертка: не установлено;
  

Свойство overflow-wrap задается как одно ключевое слово, выбранное из списка значений ниже.

Значения

нормальный
Строки могут разрываться только в обычных точках разрыва слова (например, в пробелах между двумя словами).
где угодно
Чтобы предотвратить переполнение, неразрывная в противном случае строка символов — например, длинное слово или URL — может быть разорвана в любой момент, если в строке нет допустимых точек разрыва. В точку разрыва не вставляется символ переноса. Возможности мягкого переноса, представленные разрывом слова, учитываются при вычислении внутренних размеров минимального содержимого.
разрывное слово
То же, что и в любом месте , с обычными неразрывными словами, которые могут быть разбиты в произвольных точках, если в строке нет приемлемых точек останова, но возможности мягкого переноса, вводимые разрывом слова, НЕ учитываются при вычислении минимального содержимого внутренние размеры.
 нормальный | слово-разрыв | в любом месте 

Сравнение переноса переполнения, переноса слова и дефисов

В этом примере сравниваются результаты переноса переполнения , переноса слова и переносов при разбиении длинного слова.

HTML
  

Говорят, рыбалка отличная на Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был. ( нормальный )

Говорят, на рыбалке отлично Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был. ( overflow-wrap: где угодно )

Говорят, на рыбалке отлично Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был.( overflow-wrap: break-word )

Говорят, на рыбалке отлично Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был. ( разрыв слова )

Говорят, на рыбалке отлично Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был. ( дефисы , без атрибута lang )

Говорят, на рыбалке отлично Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был.( дефисы , правила английского языка)

Говорят, на рыбалке отлично Озеро Chargoggagoggmanchauggagoggchaubunagungamaugg , хотя сам я там никогда не был. ( дефисы , правила Германии)

CSS
  п {
   ширина: 13em;
   маржа: 2 пикселя;
   фон: золото;
}

.ow -where {
   переполнение-обертка: где угодно;
}

.ow-break-word {
   переполнение-обертка: слово-прерывание;
}

.word-break {
   слово-разрыв: сломать все;
}

.дефисы {
   дефисы: авто;
}
  
Результат

Таблицы BCD загружаются только в браузере

Перенос и разрыв текста — CSS: каскадные таблицы стилей

В этом руководстве объясняются различные способы управления переполненным текстом в CSS.

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

CSS будет отображать переполнение таким образом, потому что выполнение других действий может привести к потере данных. В CSS потеря данных означает, что часть вашего контента исчезает. Таким образом, начальное значение overflow — это , видимое , и мы можем видеть переполненный текст. Как правило, лучше видеть переполнение, даже если оно грязное. Если что-то исчезнет или будет обрезано, как если бы overflow было установлено на hidden , вы могли бы не заметить его при предварительном просмотре вашего сайта.Беспорядочное переполнение по крайней мере легко обнаружить, а в худшем случае ваш посетитель сможет увидеть и прочитать контент, даже если он выглядит немного странно.

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

Чтобы найти минимальный размер блока, который будет содержать его содержимое без переполнения, установите для свойства width или inline-size значение min-content .

Использование min-content , таким образом, является одной из возможностей переполнения ящиков.Если можно позволить коробке увеличиваться до минимального размера, необходимого для содержимого, но не больше, использование этого ключевого слова даст вам такой размер.

Если поле должно быть фиксированного размера или вы хотите, чтобы длинные слова не переполнялись, то свойство overflow-wrap может помочь. Это свойство разбивает слово, если оно слишком длинное, чтобы поместиться в отдельной строке.

Примечание: Свойство overflow-wrap действует так же, как нестандартное свойство word-wrap .Свойство word-wrap теперь обрабатывается браузерами как псевдоним стандартного свойства.

Можно попробовать альтернативное свойство разрыв слова . Это свойство разорвет слово в точке переполнения. Это вызовет разрыв, даже если размещение слова на новой строке позволит отображать его без разрывов.

В следующем примере вы можете сравнить разницу между двумя свойствами в одной строке текста.

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

В приведенном ниже примере есть флажок и метка. Допустим, вы хотите, чтобы этикетка порвалась, если она окажется слишком длинной для коробки. Однако вы не хотите, чтобы он ломался сразу после флажка.

Чтобы добавить дефисы при разрыве слов, используйте свойство дефисов CSS . Используя значение auto , браузер может автоматически разбивать слова в соответствующих точках переноса, следуя любым правилам, которые он выбирает.Чтобы иметь некоторый контроль над процессом, используйте значение manual , затем вставьте в строку символ жесткого или мягкого разрыва. Жесткий разрыв ( - ) всегда сломается, даже если в этом нет необходимости. Мягкий разрыв ( ) прерывается только в том случае, если разрыв необходим.

Если вы знаете, где вы хотите разорвать длинную строку, то также можно вставить элемент HTML . Это может быть полезно в таких случаях, как отображение длинного URL-адреса на странице.Затем вы можете добавить свойство, чтобы разбить строку в нужных местах, чтобы ее было легче читать.

В приведенном ниже примере текст разрывается на месте .

html - Как сделать так, чтобы текст не занимал более 1 строки?

html - Как сделать так, чтобы текст не занимал более 1 строки? - Переполнение стека

Присоединяйтесь к Stack Overflow , чтобы учиться, делиться знаниями и строить свою карьеру.

Спросил

Просмотрено 272к раз

Есть ли перенос по словам или какой-либо другой атрибут, препятствующий переносу текста? У меня высота и переполнение: скрыто , а текст все равно рвется.

Должен работать во всех браузерах, до CSS3.

Ишервуд

46.7k1515 золотых знаков101101 серебряный знак134134 бронзовых знака

  div {
  белое пространство: nowrap;
  переполнение: скрыто;
}  
  
тестирование большого количества текста, который просто не переносится, потому что это слишком длинное сообщение с таким количеством бесполезных слов, которые вы не можете прочитать сегодня, несмотря на все ваши усилия, включая растяжение браузера ширину до максимальной длины, если, однако, вы не использовали функцию уменьшения масштаба вашего браузера или вручную изменили CSS, и в этом случае вы определенно обманываете и разрушаете эту забавную маленькую игру, в которой я набираю столько слов, сколько можно уместить в один смехотворно долгий пробег предложение Анно Домини двадцать первого века, используя мою традиционную клавиатуру и два монитора с разрешением 1080p, прилагая все усилия, чтобы кропотливо болтать снова и снова, но просто не совсем повторяя себя, за исключением повторного использования пары слов в нескольких местах в этом HTML, хотя Было бы примерно в тысячу раз проще, чем то, что я делаю в этот день, бессмысленно избегать работы, несмотря на ее бесполезность, учитывая, что это приведет только к последствиям для моей Если мне придется усерднее работать, чтобы наверстать упущенное позже, конечно, все это, несмотря на усилия модератора, чтобы смягчить мои обширные усилия, чтобы сделать это отчасти приятным для чтения, делая его как можно дольше, кто может или не может отменить это изменение, несмотря на его полезность, так как предыдущее редактирование содержало только четыре слова, которые невозможно было обернуть даже без изменений CSS из-за их краткости, что неизменно создает больше вопросов, чем ответов, таких как можно найти в разделе комментариев, именно поэтому я создал это усилие, направленное на решение одного из вопросов о назначении атрибута переполнения, который, если вы изменили, вы теперь увидите, позволяет вам прочитать весь этот текст за счет преимуществ функций горизонтальной прокрутки, но с другой стороны, если использовалось только переполнение и text-wrap был пропущен, вы продолжите видеть вертикальную полосу прокрутки, если вы не установите фиксированную высоту для этого div, и в этом случае вы обязательно должны увидеть эту vertica l переполнение скрыто, хотя это могло бы произойти только в том случае, если вы не поместили этот пример в полноэкранный режим, за исключением того, что ваше окно просмотра установлено на достаточно маленькую высоту, которая на самом деле может быть дополнительно определена на указанное количество строк, а не на одну, используя набор высоты к множеству свойств CSS, определяемых line-height, которые могут быть процентами от белого пространства, и это действительно скроет вертикальное переполнение этой горы текста, что я действительно очень удивлен, что вам удалось задержаться здесь, чтобы прочитать из-за его легкомысленного характера на знаменитом сайте, известном программистам как Stack Overflow, и за это я поздравляю вас с потенциально потраченным впустую временем

Примечание: работает только с блочными элементами.Если вам нужно сделать это для ячеек таблицы (например), вам нужно поместить div внутри ячейки таблицы, поскольку ячейки таблицы имеют отображение ячейки таблицы, а не блок.

Начиная с CSS3, это также поддерживается для ячеек таблицы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *