Перенос длинных слов с помощью CSS
Интернет состоит из контента, контент состоит из слов, а слова могут быть очень и очень длинными. И рано или поздно вебмастер сталкивается с проблемой переноса длинных слов. Эта проблема особенно актуальна для адаптивного дизайна, и для небольших блоков контента. Итак, как же справиться с этой проблемой?
Дефис
Первое решение для переноса длинных слов – с помощью дефиса.
Код CSS
.defisi { -webkit-hyphens: auto; -moz-hyphens: auto; -ms-hyphens: auto; hyphens: auto; }
Поддержка браузерами: CSS-дефисы поддерживаются почти всеми современными браузерами, за исключением Chrome, Opera, Android. Также, очень часто дефис вставляется в местах, ошибочных с грамматической точки зрения.
Обрыв слова
Обрыв слова – это свойство CSS, указывающее на то, следует ли разрывать строки внутри слов.
Код CSS
.obriv-slova { -ms-word-break: break-all; word-break: break-all; word-break: break-word; }
Поддержка браузерами: Обрыв слов поддерживается во всех браузерах, за исключением Opera Mini и старых версий Opera.
Обертка переполнения
Следующее решение – это использование Обертки переполнения (overflow-wrap).
Код CSS
.obertka-perepolneniya { word-wrap: break-word; overflow-wrap: break-word; }
Поддержка браузерами: поддерживается практически во всех браузерах. Примечание: Некоторые браузеры требуют использования «word-wrap» вместо «overflow-wrap».
Многоточие
Еще один вариант – использование многоточий.
Код CSS
.mnogotochiye { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
Поддержка браузерами: поддерживается всеми современными браузерами.
Это работающий метод, но далеко не идеальный.
Финальное решение: Использование Обертки переполнения и дефиса.
Код CSS
.finalnoye-resheniye { overflow-wrap: break-word; word-wrap: break-word; -webkit-hyphens: auto; -ms-hyphens: auto; -moz-hyphens: auto; hyphens: auto; }
Это решение позволит браузеру, который поддерживает его, вставлять дефис, а для не поддерживающих его браузеров вставлять разрыв строки.
Теги: CSS3, HTML5
- 13731
- Опубликовано
- Уроки программирования
- 1 комментарий
- расскажите друзьям
Расскажите о типографике в вёрстке. Часть 4
Типографика в вёрстке
Кегль, интерлиньяж, выключка и регистр
Красная строка, буквица и выделение
Декоративные свойства
Перенос текста
Типографика в вёрстке
Кегль, интерлиньяж, выключка и регистр
Красная строка, буквица и выделение
Декоративные свойства
Перенос текста
Механический перенос слов
Чтобы механически переносить длинные слова или ссылки, вылезающие за полосу набора, используют устаревающее свойство word-break
или современное overflow-wrap
:
Самое длинное существительное без дефиса — водогрязеторфопарафинолечение.
Самое длинное существительное без дефиса — водогрязеторфопарафинолечение. А по сути — это просто лечение грязью, торфом и парафином.
word-break: break-all
переносит каждое слово, а overflow-wrap: break-word
переносит только слова, не влезающие в строку
Чтобы подсказать браузеру, где лучше переносить слова, используют тег <wbr>
. Если же перенос наоборот нужно запретить, например, в имени и фамилии, используют неразрывные пробелы и дефисы или заклинание white-space: nowrap
:
<p> https://this<wbr>.is<wbr> .a<wbr>.really<wbr>.really<wbr> .long<wbr>.website<wbr> .name/with<wbr>/deeper<wbr>/pages </p> <p> Михаил <span>Салтыков-Щедрин</span> </p>
https://this
Михаил Салтыков‑Щедрин
Эстетический перенос слов
Чтобы аккуратно переносить слова с помощью дефисов, используют свойство hyphens
с ключевыми словами manual
(переносить только там, где сказано) и auto
(переносить автоматически).
Важный момент: автоматические переносы основаны на словарях и правилах деления слов на слоги, поэтому без указания языка документа (<html lang="ru">
) переносы не работают.
Встроенный автоматический перенос слов браузером даёт непредсказуемый и не всегда удачный результат, который отличается от браузера к браузеру, поэтому обычно используют hyphens: manual
с «подсказками»:
hyphens: auto
Самое длинное существительное без дефиса — водогрязеторфопарафинолечение. А по сути — это просто лечение грязью, торфом или парафином.
Кофеварка и соковыжималка прекрасны.
hyphens: manual
Самое длинное существительное без дефиса — водогрязеторфопарафинолечение. А по сути — это просто лечение грязью, торфом или парафином.
Кофеварка и соковыжималка прекрасны.
Автоматические переносы не понимают, что «водогрязеторфопарафинолечение» и «соковыжималку» лучше разбивать с учётом морфологии, а не по отдельным слогам. См. правила переносов
См.:
Рас‑ста‑нов‑ка пе‑ре‑но‑сов
Online Hyphenation
Hyphenopoly
Чтобы подсказать браузеру, где лучше перенести слово, используют невидимые мягкие переносы (
). Их расставляют в тексте вручную или с помощью готовых библиотек и программ:
См.:
Рас‑ста‑нов‑ка пе‑ре‑но‑сов
Online Hyphenation
Hyphenopoly
<p> Самое длинное суще­стви­тель­ное без дефиса – водо­грязе­торфо­парафино­лечение. </p>
Если уже расставленные переносы нужно запретить, например, при переходе от мобильной версии к лаптопной или горизонтальной, достаточно hyphens: none
.
P. S. Слова с дефисом браузеры могут автоматически переносить по дефису. Чаще всего такие переносы — зло, потому что мешают читать и воспринимать слово целиком: 22‑й, Поток‑2, 555‑33‑92 или военно‑морской. В таких случаях стоит заменять обычный дефис на неразрывный ‑.
P. P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.
Веб‑разработка
Отправить
Поделиться
Поделиться
Запинить
Твитнуть
Свежак
дефисов | CSS-трюки — CSS-трюки
DigitalOcean предоставляет облачные продукты для каждого этапа вашего путешествия. Начните с бесплатного кредита в размере 200 долларов США!
Свойство hyphens
управляет переносом текста в элементах блочного уровня. Вы можете запретить расстановку переносов вообще, разрешить ее или разрешить только при наличии определенных символов.
Обратите внимание, что дефисов
зависит от языка. Его способность находить возможности перерыва зависит от языка, определенного в
атрибут родительского элемента. Пока поддерживаются не все языки, и поддержка зависит от конкретного браузера.
Синтаксис
.элемент { дефисы: нет | ручной | авто }
дефисы: нет
Слова никогда не переносятся на разрывы строк, даже если символы внутри слова подсказывают, где может или должен быть перенос.
дефисы: вручную
Слова разбиваются только на разрывы строк, если внутри слова есть символы, указывающие на возможность разрыва строки. Есть два символа, которые указывают на возможность разрыва строки:
-
U+2010
(ДЕФИС): «твердый» символ дефиса указывает на видимую возможность разрыва строки. Даже если в этой точке строка фактически не прерывается, дефис все равно отображается. Буквально «-«. -
U+00AD
(SHY): невидимый «мягкий» дефис. Этот персонаж не отображается визуально; вместо этого он предлагает место, где браузер может при необходимости разбить слово. В HTML вы можете использовать­
для вставки мягкого дефиса.
дефисы: авто
Слова могут разрываться в соответствующих точках переноса либо по символам переноса (см. @hyphenation-resource
).
Символы условного переноса внутри слова, если они присутствуют, имеют приоритет над автоматическими ресурсами при определении точек переноса внутри слова.
дефисы: все
Устарело, не используйте . Это было только в спецификации временно для тестирования.
Демонстрация
В приведенной ниже демонстрации есть несколько абзацев, и все установлено на дефисов: auto;
, чтобы продемонстрировать концепцию переноса. Атрибут lang
имеет значение en
в родительском элементе.
Поддержка браузера
Рабочий стол
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
88 | 6* | 10* | 12* | 5.1* |
Mobile / Tablet
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
109 | 107 | 109 | 4.2-4.3* |
Safari 5+ requires -webkit-
, Firefox 6+ требует -moz-
, IE 10+ требует -ms-
, iOS 4.2+ требует -webkit-
.
Chrome < 55 и браузер Android фактически поддерживают -webkit-hyphens: none
, что является значением по умолчанию, но ни одно из других значений.
В Firefox и Internet Explorer автоматический перенос переносов работает только для некоторых языков (определяется атрибутом lang
). Полный список поддерживаемых языков см. в этом примечании.
Если вы пишете веб-документ, который действительно нуждается в переносах, вы можете использовать Hyphenator.js, библиотеку, основанную на обширном словаре, который автоматически вставит в ваш контент мягкие дефисы и пробелы нулевой ширины.
Без JavaScript вам придется полагаться на дефисы
и перенос слов
:
.hyphenate { перенос слов: прерывание слова; overflow-wrap: break-word; -webkit-дефисы: авто; -moz-дефис: авто; дефисы: авто; }
Дополнительная информация
- дефисы в спецификации
- дефисы в MDN
- Перенос слов/расстановка переносов с использованием CSS Кеннет Аукенберг
- «Текущее» состояние переносов слов в Интернете Дэвид Ньютон с разрывами дефисов
спросил
Изменено 8 месяцев назад
Просмотрено 40 тысяч раз
Я хочу разбить длинное слово дефисом в конце первой строки.
Ожидается:
BERUFSBILDUNGSZENT- РОМ
Получил это:
BERUFSBILDUNGSZENT РОМ
Вот мои html и css:
BERUFSBILDUNGSZENTRUM.содержание { максимальная высота: 80 пикселей; ширина: 200 пикселей; переполнение-x: скрыто; перенос слов: прерывание слова; отступ: 10 пикселей; -webkit-дефисы: авто; -moz-дефис: авто; -ms-дефисы: авто; дефисы: авто; вес шрифта: полужирный; размер шрифта: 16px; граница: сплошная 1px #000; }Вы можете проверить мой JSFiddle
- css
- css-дефисы
4
По-видимому, Chrome не делает переносы (по крайней мере, в Windows). Вы можете лучше работать с другими браузерами или платформами. Вы можете использовать
(мягкий дефис), если вы заранее знаете, где хотите разбить. В противном случае, по крайней мере, в Chrome в Windows нет способа получить дефис, когда CSS разбивает длинное слово, если только он не был на входе с самого начала..контент { максимальная высота: 80 пикселей; ширина: 200 пикселей; переполнение-x: скрыто; перенос слов: прерывание слова; отступ: 10 пикселей; вес шрифта: полужирный; размер шрифта: 16px; граница: сплошная 1px #000; }
Использование мягкого дефиса:
BERUFSBILDUNGSZENTRUMИспользование автоматического переноса (не работает в Chrome)Мягкий дефис не отображается, если он там не прерываетсяBERUFSBILDUNGSZENTRUMСм. также этот ответ.
4
Решение в 2022 году:
Если вы добавите атрибут
lang
в свой div и напечатаете «Berufsbildungszentrum» в обычном регистре, используядефисов: auto;
работает, как и ожидалось. Затем вы можете снова использовать заглавные буквы, используяtext-transform: uppercase;
..