CSS hyphens — перенос слів зі знаком дефіса


Властивість hyphens контролює переноси тексту в елементах рівня блоку.

Властивість hyphens

Ви можете заборонити перенесення, контролювати його або дозволити браузеру автоматично вставляти дефіс, де це можливо.

Словник переносів зберігається в браузері і підключається при наявності атрибута lang з кодом мови. Так, для російського мови слід додати lang = "ru" до елементу <html> або безпосередньо до абзацу тексту. Правила переносів визначаються браузером і можуть розрізнятися.

автор: NagarD

Загальний опис

автор: NagarD

Порада

Також зверніть увагу на HTML-елемент <wbr>, який дозволяє встановити розрив рядку тексту, але не обов'язково з переносом тексту.

автор: NagarD
Нотатка

Правила переносу тексту не визначаються специфікацією і можуть відрізнятися від браузера до браузера.

автор: NagarD
Нотатка

Слова ніколи не переносяться на розривах рядків, навіть якщо символи всередині слів показують, де переноси можуть або повинні йти.

автор: NagarD
Нотатка

Chrome та Opera підтримують виключно значення auto та тільки на платформах Android та Mac.

автор: NagarD

Синтаксис

hyphens: none | manual | auto;

Властивість hyphens може отримувати 3 значень:

none

Перенесення не відбувається, навіть якщо рядок не вміщається у контейнері.

автор: NagarD

manual

Перенесення відбувається лише коли у тексті наявні спеціальні символи, які явно вказують на можливість перенесення.

автор: NagarD

auto

Браузер автоматично вирішує можливість перенесення слів.

автор: NagarD

Значення без задання: manual
Наслідує: Так
Анімується: Ні
JavaScript синтаксис: block.style.hyphens = '';

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
55 43 17 42 79 10*
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
55 55 43 17

Приклади

+ запропонувати свій приклад у пісочниці

Однакові вузькі колонки: без переносів довге слово розтягує рядок або лишає дірки, з auto браузер сам розставляє дефіси за словником мови (тому важливий атрибут lang; словники залежать від платформи).

HTML

<p lang="uk" class="none">Найхарактеристичніші словосполучення випробовують вузьку колонку.</p>
<p lang="uk" class="auto">Найхарактеристичніші словосполучення випробовують вузьку колонку.</p>

CSS

p {
    width: 140px;
    border: 1px solid #ccc;
    padding: 6px;
}

.none { hyphens: none; }
.auto { hyphens: auto; }
автор: NagarD

Простий приклад використання властивості

HTML

<ul>
  <li><code>none</code>
    <p lang="en" class="none">An extreme&shy;ly very looo&shy;ooong word</p>
  </li>  
  <li><code>manual</code>:
    <p lang="en" class="manual">An extreme&shy;ly very looo&shy;ooong word</p>
  </li>
  <li><code>auto</code>:
    <p lang="en" class="auto">An extreme&shy;ly very looo&shy;ooong word</p>
  </li>
</ul>

CSS

ul {
	padding: 0;
	margin: 0;
	list-style: none;
}

ul li {
	display: inline-block;
	margin: 36px;
}
	
p { 
  width: 45px;
  padding: 2px;
  font-size: 17px;
  border: 4px solid #666;
}

p.none {
  -webkit-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

p.manual {
  -webkit-hyphens: manual;
  -ms-hyphens: manual;
  hyphens: manual;
}

p.auto {
  -webkit-hyphens: auto;
  -ms-hyphens: auto;
  hyphens: auto;
}
автор: NagarD

Три вузькі колонки з тим самим текстом: none ігнорує навіть м'який дефіс, manual рве слово рівно там, де стоїть &shy;, auto шукає місце переносу сам.

HTML

<div class="cols">
    <div>
        <b>hyphens: none</b>
        <p lang="uk" class="none">Наша електро&shy;енцефало&shy;графія показала неспо&shy;діваний результат.</p>
    </div>
    <div>
        <b>hyphens: manual</b>
        <p lang="uk" class="manual">Наша електро&shy;енцефало&shy;графія показала неспо&shy;діваний результат.</p>
    </div>
    <div>
        <b>hyphens: auto</b>
        <p lang="uk" class="auto">Наша електроенцефалографія показала несподіваний результат.</p>
    </div>
</div>

CSS

body {
    font-family: Georgia, serif;
    font-size: 16px;
    padding: 16px;
}

.cols {
    display: flex;
    gap: 16px;
}

.cols > div {
    width: 150px;
}

b {
    font-family: monospace;
    font-size: 12px;
    color: #666;
}

p {
    text-align: justify;
    border: 1px solid #ccc;
    padding: 6px;
    margin-top: 6px;
}

.none {
    -webkit-hyphens: none;
    hyphens: none;
}

.manual {
    -webkit-hyphens: manual;
    hyphens: manual;
}

.auto {
    -webkit-hyphens: auto;
    hyphens: auto;
}
автор: NagarD

Демонстрація дії значень властивості

HTML

<p>Вибери потрібні значення для <code>hyphens</code>:</p>

<select id="form">
  <option value="none" name="value2" selected>none</option>
  <option value="manual" name="value2">manual</option>
  <option value="auto" name="value2">auto</option>
</select>

<p id="text"></p>

<hr>

<p id="block">An extreme&shy;ly very looo&shy;ooong word</p>

CSS

* {
  box-sizing: border-box;
  padding: 0;
}

body {
  text-align: center;
  font-family: monospace;
  font-size: 17px;
  line-height: 1.5;
  color: #222;
}


#form {
  padding: 8px 16px;
  font-size: 19px;
}

#block {
  margin: 75px auto 0 auto;
  background: gold;
  width: 50px;
  padding: 6px;
  font-size: 18px;
  color: #222;
  text-align: left;
}

JS

var block = document.getElementById('block');
var form = document.getElementById('form');
var text = document.getElementById('text');

var textArray = { 'none': 'Перенесення не відбувається, навіть якщо рядок не вміщається у контейнері.',
  'manual': 'Перенесення відбувається лише коли у тексті наявні спеціальні символи, які явно вказують на можливість перенесення.',
  'auto': 'Браузер автоматично вирішує можливість перенесення слів.' };

form.onchange = function change() {

  var newVal = getNewValue();
  block.style.hyphens = newVal;
  text.innerHTML = textArray[newVal];

};

function getNewValue() {

  var result = '';

  for (var i = 0; i < form.options.length; i++) {if (window.CP.shouldStopExecution(0)) break;
    if (form.options[i].selected == true) {
      result = form.options[i].value;
    }
  }window.CP.exitedLoop(0);

  return result;

}
//# sourceURL=pen.js
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід