CSS column-fill — вирівнювання висоти колонок


Властивість column-fill визначає, як заповнювати стовпці - збалансовувати чи ні.

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

автор: Svitlana

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

автор: NagarD

Нотатка

На даний момент використання цієї властивості обмежене і не працює в жодному сучасному браузері!

автор: Svitlana

Синтаксис

column-fill: balance|auto|initial|inherit;

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

balance

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

автор: Svitlana

auto

Стовпці заповнюються послідовно. Ширина стовпчиків буде різною.

автор: Svitlana

initial

Встановлює властивість у значення без задання.

автор: Svitlana

inherit

Вказує на спадковість властивості від свого батьківського елемента (якщо відповідна властивість встановлена).

автор: Svitlana

balance-all

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

автор: Svitlana

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

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
50 52 9 37 12 10
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
50 50 52 9

Приклади

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

Висота контейнерів фіксована. З balance (типово) текст ділиться між колонками порівну; з auto спершу вщент заповнюється перша колонка, і лише потім починається наступна.

HTML

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

CSS

.cols {
    columns: 3;
    height: 140px;
    margin-bottom: 12px;
    border: 1px solid #ccc;
}

.balance { column-fill: balance; }
.auto    { column-fill: auto; }
автор: Svitlana

Той самий текст із заданою висотою: balance ділить його між трьома колонками порівну, auto заповнює першу до низу.

HTML

<p class="label">column-fill: balance (типово)</p>
<div class="cols balance">Багатоколонковий блок сам ріже текст на колонки. Висота тут задана явно, тому різницю видно одразу: одне значення розподіляє текст порівну між трьома колонками, а друге заповнює першу до самого низу й лише потім переходить до наступної. Без заданої висоти обидва значення дають однаковий результат.</div>

<p class="label">column-fill: auto</p>
<div class="cols fill">Багатоколонковий блок сам ріже текст на колонки. Висота тут задана явно, тому різницю видно одразу: одне значення розподіляє текст порівну між трьома колонками, а друге заповнює першу до самого низу й лише потім переходить до наступної. Без заданої висоти обидва значення дають однаковий результат.</div>

CSS

body {
  font-family: sans-serif;
  padding: 16px;
}

.label {
  font-size: 13px;
  color: #666;
  margin: 0 0 6px;
}

.cols {
  column-count: 3;
  column-gap: 16px;
  /* без цього рядка обидва блоки виглядали б однаково */
  height: 110px;
  font-size: 13px;
  line-height: 1.4;
  border: 1px solid #bbb;
  padding: 8px;
  margin-bottom: 18px;
}

.balance {
  column-fill: balance;
}

.fill {
  column-fill: auto;
}
автор: NagarD

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

HTML

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

<p><strong>Увага! На даний момент використання цієї властивості обмежене і не працює в жодному сучасному браузері!</strong></p>

<div class="inputs">
  <input id="auto" checked name="column-fill" type="radio"/>
  <label for="auto">auto</label>
  <message for="auto">Контент рівномірно розподіляється між колонок. Ширина стовпчиків буде однаковою. За замовчуванням.</message>
  
  <input id="balance" name="column-fill" type="radio"/>
  <label for="balance">balance</label>
  <message for="balance">Стовпці заповнюються послідовно. Ширина стовпчиків буде різною.</message>
</div>

<p id="message">Контент рівномірно розподіляється між колонок. Ширина стовпчиків буде однаковою. За замовчуванням.</p>

<hr>

<div id="block">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
  consequat.</p>
</div>

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 {
  color: #353535;
  background: gold;
  padding: 10px;
  margin-bottom: 36px;

  -webkit-column-count: 3;
  -moz-column-count: 3;
  column-count: 3;

  -webkit-column-rule: 2px dashed #666;
  -moz-column-rule: 2px dashed #666;
  column-rule: 2px dashed #666;

  -webkit-column-fill: auto; /* Safari and Chrome */
  -moz-column-fill: auto; /* Firefox */
  column-fill: auto; /* CSS3 */
}

#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('column-fill', 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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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