Клавиша / esc

hyphens

Говорим браузеру, как переносить слова, которые не поместились в строку.

Время чтения: меньше 5 мин

Кратко

Скопировано

Свойство hyphens говорит браузеру, как переносить длинные слова, которые не помещаются в строку: не переносить вовсе, переносить только там, где в HTML стоит мягкий перенос, или расставлять дефисы самостоятельно.

Пример

Скопировано
        
          
          <p lang="ru">  Объявление: требуется  авто&shy;мото&shy;вело&shy;фото&shy;теле&shy;радио&shy;монтёр.</p>
          <p lang="ru">
  Объявление: требуется
  авто&shy;мото&shy;вело&shy;фото&shy;теле&shy;радио&shy;монтёр.
</p>

        
        
          
        
      
        
          
          p {  hyphens: manual;  width: 160px;}
          p {
  hyphens: manual;
  width: 160px;
}

        
        
          
        
      
Открыть демо в новой вкладке

В демо показаны все три значения. При none слово выходит за границу блока. При manual переносы происходят только там, где стоят символы &shy;. При auto браузер расставляет переносы сам, без каких-либо подсказок в тексте.

Как понять

Скопировано

Длинное слово, которое не помещается в строку, браузер по умолчанию не разрывает — ждёт подсказки от автора. Это и есть режим manual: переносы появляются только там, где в тексте стоит символ мягкого переноса &shy;.

Режим auto переключает браузер в режим словаря: он знает правила переноса по слогам для конкретного языка и расставляет дефисы сам. Чтобы это заработало, нужно обязательно указать язык через атрибут lang:

        
          
          <html lang="ru">
          <html lang="ru">

        
        
          
        
      

Без lang браузер не знает, какие правила применять, и auto ведёт себя как manual.

Как пишется

Скопировано

none

Скопировано

Слова не переносятся никогда — даже если выходят за границу контейнера. Удобно для заголовков или подписей к кнопкам, где перенос с дефисом выглядел бы странно.

manual

Скопировано

Значение по умолчанию. Переносы появляются только там, где в тексте стоят специальные символы:

  • &shy; (U+00AD) — мягкий перенос. Невидим в тексте; дефис появляется только при реальном переносе строки.
  • или &#8208; (U+2010) — жёсткий дефис. Виден в тексте всегда, независимо от переноса.

auto

Скопировано

Браузер расставляет переносы сам, по правилам переноса по слогам для языка текста. Если в тексте есть &shy;, они учитываются в первую очередь.

Работает для русского, английского и большинства европейских языков — в современных браузерах есть встроенные словари переносов. Для поддержки старых версий Safari добавьте вендорный префикс:

        
          
          p {  -webkit-hyphens: auto;  hyphens: auto;}
          p {
  -webkit-hyphens: auto;
  hyphens: auto;
}

        
        
          
        
      

Chrome и Firefox используют разные алгоритмы расстановки переносов и разные словари. Для одного и того же русского текста они могут перенести слова в разных местах. Это нормально: оба варианта соответствуют правилам русского языка, просто каждый браузер использует свою реализацию. Если конкретные места переносов критичны, используйте &shy; вручную для одинакового поведения во всех браузерах.

Подсказки

Скопировано

💡 Свойство наследуется. Можно задать hyphens: auto на <body>, и переносы включатся сразу для всего текста на странице.

💡 hyphens отвечает за дефисы при переносе, а не за разбивку слов как таковую. Если нужно просто не допустить выход текста за границу то используйте overflow-wrap.

💡 Если применить word-break: break-all, слова будут разрываться без дефисов в любом месте, а hyphens перестанет работать.

Поддержка в браузерах:
  • Chrome 55, поддерживается
  • Edge 79, поддерживается
  • Firefox 43, поддерживается
  • Safari 17, поддерживается
О Baseline

На практике

Скопировано

Алёна Батицкая советует

Скопировано

🛠 hyphens: auto особенно нужен в многоколоночных макетах. Когда текст разбивается на несколько узких столбцов через columns, длинные слова легко вылезают за границу колонки и вёрстка ломается. Добавьте переносы, и браузер сам расставит дефисы там, где это нужно:

        
          
          .article {  columns: 3;  column-gap: 24px;  hyphens: auto;}
          .article {
  columns: 3;
  column-gap: 24px;
  hyphens: auto;
}

        
        
          
        
      
Открыть демо в новой вкладке

🛠 Если вы включаете переносы глобально, через body или html, не забудьте отключить их там, где дефис будет выглядеть странно: в заголовках, кнопках, навигации. Перенос в середине слова на кнопке или в коротком заголовке выглядит как ошибка.

        
          
          body {  hyphens: auto;}h1, h2, h3, button, nav {  hyphens: none;}
          body {
  hyphens: auto;
}

h1, h2, h3, button, nav {
  hyphens: none;
}