CSS break-inside — розрив усередині елемента


Властивість break-inside визначає, як розриви сторінок, стовпців або регіонів повинні вести себе всередині сформованого контейнера. Якщо контейнер не сформовано, властивість ігнорується.

Властивість break-inside

Наприклад, при роботі з макетами з декількома стовпцями, ви можете віддати перевагу упорядкованим спискам у межах одного стовпця (замість того, щоб переходити до наступного стовпця через частину списку). У цьому випадку ви можете використовувати властивість break-in, щоб уникнути цієї небажаної перерви.

Кожна можлива точка перерви (інакше кажучи, межа кожного елемента) залежить від трьох властивостей: значення break-after, значення break-before та значення break-inside.

Щоб визначити, чи необхідно зробити перерву між колонками, застосовуються наступні правила:

  1. Якщо будь-яке з трьох потрібних значень є примусовим значенням переривання (always, left, right, page, column, або region), воно має перевагу. Якщо більше ніж одне значень робить перерву, то береться один елемент, який являється останнім у потоці (тобто, значення break-before має перевагу над значенням break-after, яке самостійно має перевагу над break-inside)
  2. Якщо будь-яке з трьох потрібних значень уникає перерви (avoid, avoid-page, avoid-region, avoid-column), перерва не буде застосована в потрібному місці.
автор: Svitlana

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

автор: NagarD

Порада

Також зауважте, що на момент написання більшість браузерів підтримують властивість у специфікації CSS 2.1, але не останню специфікацію. Тому в деяких браузерах, ця властивість може не працювати, або працювати некоректно.

автор: Svitlana

Синтаксис

break-inside: auto | avoid | avoid-page | avoid-column;

Властивість break-inside може отримувати 5 значень:

auto

Ні вказує, ні забороняє переривання сторінки або стовпця.

автор: Svitlana

avoid

Уникання переривання сторінки після основного контейнера.

автор: Svitlana

avoid-page

Уникання переривання сторінки після основного контейнера.

автор: Svitlana

avoid-column

Уникання переривання колонки після основного контейнера

автор: Svitlana

avoid-region

Уникання переривання області після основного контейнера.

автор: Svitlana

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

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
50 65 10 37 12 10
column and avoid-column Full support Не підтримується Full support Full support 12.0 10.0
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
50 50 65 10
column and avoid-column Full support Не підтримується Full support

Приклади

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

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

HTML

<div class="multicol">
  <h3>Заголовок</h3>
  <p>Це дуже довгий список:</p>
  <ul>
    <li>Пункт номер 1</li>
    <li>Пункт номер 2</li>
    <li>Пункт номер 3</li>
    <li>Пункт номер 4</li>
    <li>Пункт номер 5</li>
    <li>Пункт номер 6</li>
    <li>Пункт номер 7</li>
    <li>Пункт номер 8</li>
    <li>Пункт номер 9</li>
    <li>Пункт номер 10</li>
  </ul>
  <p>Завдяки властивості <code>break-inside: avoid;</code> список (той що ліворуч) розташований в одній колонці, хоча у першій ще залишилося для нього місце!</p>
</div>

CSS

.multicol {
  background-color: lightyellow;
  padding: 10px;

  /* Safari and Chrome */
  -webkit-column-count: 3;
  -webkit-column-rule: 2px dotted coral;

  /* Firefox */
  -moz-column-count: 3; 
  -moz-column-rule: 2px dotted coral;

  /* CSS3 */
  column-count: 3; 
  column-rule: 2px dotted coral;
}

.multicol ul {
  -webkit-column-break-inside: avoid;
  column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
}
автор: Svitlana

Список із break-inside: avoid не дозволяє розірвати себе між колонками: якщо цілим він не вміщається — переїде в наступну колонку повністю.

HTML

<div class="cols">
    <p>Багатоколонкова верстка ділить текст автоматично: браузер сам вирішує, де перервати рядок і почати нову колонку. Що довший текст, то краще видно поділ — тому цей абзац навмисно багатослівний і ще й трохи повторюється, щоб колонкам було чим заповнитися.</p>
    <ul>
        <li>перший пункт</li>
        <li>другий пункт</li>
        <li>третій пункт</li>
    </ul>
</div>

CSS

.cols {
    columns: 2;
    column-rule: 1px solid #ccc;
}

ul {
    break-inside: avoid;
    background: #eef6ff;
}
автор: Svitlana

Дві колонки з картками: break-inside: avoid не дає жодній картці розколотися на межі колонки — вона цілком переїжджає в наступну.

HTML

<div class="cols">
    <div class="card">Картка перша. Кілька рядків тексту, щоб їй було що розривати.</div>
    <div class="card">Картка друга. Кілька рядків тексту, щоб їй було що розривати.</div>
    <div class="card">Картка третя. Кілька рядків тексту, щоб їй було що розривати.</div>
    <div class="card">Картка четверта. Кілька рядків тексту, щоб їй було що розривати.</div>
    <div class="card">Картка п'ята. Кілька рядків тексту, щоб їй було що розривати.</div>
</div>

CSS

.cols {
    column-count: 2;
    column-gap: 20px;
    width: 420px;
}

.card {
    break-inside: avoid;
    margin-bottom: 12px;
    padding: 10px;
    background: #f0f4f8;
    border-left: 4px solid #0172ad;
    font: 14px/1.5 sans-serif;
}
автор: NagarD

Значення у дії

HTML

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

<p><strong>Ця властивість може не підтримуватися Вашим браузером!</strong></p>

<p><em>В якості значень для властивості Ви можете використовувати auto i avoid - дві властивості, що підтримуються більшістю з браузерів та відповідють останній специфікації CSS.</em></p>

<div class="inputs">
  <input id="auto" checked name="break-inside" type="radio"/>
  <label for="auto">auto</label>
  <message for="auto">Ні вказує, ні забороняє переривання сторінки або стовпця.</message>
  
  <input id="avoid" name="break-inside" type="radio"/>
  <label for="avoid">avoid</label>
  <message for="avoid">Уникання переривання сторінки після основного контейнера.</message>
</div>

<p id="message">Ні вказує, ні забороняє переривання сторінки або стовпця.</p>

<hr>

<div class="multicol">
  <h3>Заголовок</h3>
  <p>Це дуже довгий список:</p>
  <ul id="block">
    <li>Пункт номер 1</li>
    <li>Пункт номер 2</li>
    <li>Пункт номер 3</li>
    <li>Пункт номер 4</li>
    <li>Пункт номер 5</li>
    <li>Пункт номер 6</li>
    <li>Пункт номер 7</li>
    <li>Пункт номер 8</li>
    <li>Пункт номер 9</li>
    <li>Пункт номер 10</li>
  </ul>
  <p>А це ще просто текст, не звертайте уваги на нього...</p>
</div>

CSS

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

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

p, h4 {
  margin-top: 0;
}

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

.multicol {
  background-color: lightyellow;
  padding: 10px;

  /* Safari and Chrome */
  -webkit-column-count: 3;
  -webkit-column-rule: 2px dotted coral;

  /* Firefox */
  -moz-column-count: 3; 
  -moz-column-rule: 2px dotted coral;

  /* CSS3 */
  column-count: 3; 
  column-rule: 2px dotted coral;
}

#block {
  -webkit-column-break-inside: auto;
  column-break-inside: auto;
  page-break-inside: auto;
  break-inside: auto;
}

#text {
  height: 60px;
  background-color: #eee;
  padding: 16px 0;
}

message {
  display: none;
}

JS

const message = document.querySelector('#message');

document.querySelectorAll('.inputs input').forEach((el) => el.addEventListener('change', function () {

  var messageText = document.querySelector("message[for='" + this.id + "']");
  message.textContent = messageText?.textContent ?? '';

  document.querySelectorAll('#block').forEach((n) => n.style.setProperty('break-inside', this.id));

}));
автор: Svitlana

Коментарі

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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