Керівництво по впровадженню css-колонок в адаптивний дизайн

За допомогою колонок CSS ви можете створювати макети в стилі журнальної верстки з невеликим додаванням розмітки, яка буде адаптуватися до будь-якої, навіть до не фіксували ширині. Браузери, які підтримують CSS-columns, зроблять необхідні розрахунки, щоб вписати і розподілити вміст по акуратним колонок. Якщо ви вже працюєте з гумовим макетом, то колонки в цьому випадку будуть підлаштовуватися автоматично. З правильною комбінацією властивостей, колонки CSS є цікавим варіантом для створення макета, який може бути чуйним і підтримує витончену деградацію.

Де оголошувати стилі колонок

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

або
. щоб перетворити його в Багатоколоночних макет.

Керівництво по впровадженню css-колонок в адаптивний дизайн

Оголосити колонки можна трьома різними способами:

  1. За допомогою властивості column-count.
  2. Через column-width.
  3. За допомогою обох властивостей (рекомендується).

живий приклад

Число колонок залишається незмінним навіть тоді, коли змінюється ширина браузера, як продемонстровано на гіф-зображенні нижче.

Використовуйте властивість column-width. щоб виставити ширину колонок.

Наприклад, якщо ви уважно подивитеся на абзац в живому прикладі нижче, ви виявите, що ширина кожної колонки насправді більше ніж 150пк, виставлених у властивості column-width.

живий приклад

Якщо браузер не зможе вмістити щонайменше дві колонки з такою ж шириною як в column-width. тоді браузер переформує колонки таким чином, щоб в результаті макет став один стовпчик.

Гіф-зображення нижче демонструє як поводяться колонки, коли звужується ширина браузера. До речі, на відміну від властивості column-count. column-width поводиться цілком чуйне.

Використовуйте column-count та column-width разом для кращого контролю над колонками CSS. Ви можете оголошувати кожне властивість окремо або використовувати скорочену властивість columns.

Коли обидва властивості оголошені, column-count визначає максимальне число колонок, а column-width - мінімальну ширину кожної з них.

На гіф-зображенні нижче демонструється, як використання column-count та column-width разом поводиться при звуженні ширини браузера.

Налаштування колонок

Для настройки CSS-колонок існує кілька наступних властивостей.

column-gap

Щоб регулювати інтервал між колонками використовуйте column-gap.

Для більшості браузерів дефолтний значення властивості column-gap одно 1em. Ви ж можете виставити своє значення за умови, що воно буде не менше нуля.

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

На гіф-зображенні нижче демонструється, як браузер прибирає розбивку на колонки при зменшенні ширини, і проміжок при цьому зникає.

column-rule

Щоб додати вертикальні лінії між колонками, використовуйте властивість column-rule.

Ця властивість є скороченням для column-rule-width. column-rule-style і column-rule-color. Воно будується по тій же структурі, що і властивість border.

Як і в разі сcolumn-gap. вертикальні лінії зникнуть, якщо ширина браузера буде занадто вузька. Це можна побачити на зображенні нижче.

column-span

Щоб перервати поточний потік колонки, використовуйте, застосовуйте властивість column-span для дочірніх елементів. На час написання статті Firefox не підтримував це властивість (але ви можете піти і проголосувати за цей баг на Bugzilla).

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

Керівництво по впровадженню css-колонок в адаптивний дизайн

column-fill

Щоб змінити механізм заповнення колонок вмістом, використовуйте column-fill. На даний момент це властивість підтримується тільки в Firefox.

Коли ми встановлюємо висоту елементу-контейнера колонок, поведінку Firefox відрізняється від поведінки інших браузерів. Firefox буде автоматично підтримувати баланс вмісту, в той час як інші браузери будуть заповнювати колонки послідовно.

На зображенні нижче порівнюється поведінка Firefox з іншими браузерами, коли ми встановлюємо висоту елементу-контейнера колонок.

Керівництво по впровадженню css-колонок в адаптивний дизайн

У Firefox ви можете змінити цю поведінку, встановивши column-fill: auto. Завдяки цьому правилу вміст колонок в Firefox буде заповнюватися послідовно. Це можна побачити в живому прикладі нижче.

Оскільки для роботи column-fill в Firefox обов'язково повинна бути встановлена ​​висота, то остання буде змушена зіпсувати гумовий дизайн. Вмісту доведеться збільшуватися по горизонталі, тому що воно не може "розтікатися" вертикально через обмеження висоти. Це поведінка продемонстровано на гіф-зображенні нижче. У цьому випадку на допомогу можуть прийти медіа-вирази, додані для управління висотою (про це трохи пізніше)

Браузери, які не підтримують властивість column-fill. при установці висоти для елемента-контейнера колонок, будуть заповнювати колонки вмістом послідовно. Але варто зазначити, що коли будь-якого елементу-контейнера колонок встановлена ​​примусова висота, то незалежно від браузера або від використання column-fill. ця висота все одно зіпсує гумовий дизайн.

обмеження

Переповнення вмісту по горизонталі

Як показано в розділі column-fill. якщо ми додамо висоту до колоночному елементу, то останній буде розтягуватися по горизонталі, щоб вмістити свій вміст. Переповнення вмісту поламає макет і користувачам доведеться дивитися в іншу сторону.

Можливе рішення: створити медіа-запит з з функцією min-width і написати в ньому правило для висоти.

У демо-прикладі нижче, я звужувала вікно браузера, щоб зрозуміти, коли колонки починають переповнюватися і записала це число. Потім я написала медіа-запит з функцією min-width. прописавши їй значення, отримане в момент переповнення колонок, і змінила значення самої висоти всередині медіа-запиту.

Як показано на гіф-зображенні нижче, коли колонкам починає не вистачати місця, значення висоти стає більше висоти екрану, і колонки розміщуються вертикально.

Можливе рішення: створити медіа-запит з функцією min-height, щоб активізувати колонки.

У прикладі нижче, колонки будуть активізовані, тільки якщо стовпчик елемент перевищує висоту 400 пікселів. Я прийшла до цього числа звужуючи ширину браузера до моменту, коли колонки починають перебудовуватися. Потім я скоригувала висоту браузера, відштовхуючись від тієї точки, коли колонки почали провалюватися під вьюпорте. Я використовувала це число для значення функції min-height в медіа-запиті.

На гіф-зображенні нижче видно, що стовпчик елемент повинен бути щонайменше 400 пікселів у висоту, щоб його контент відображався в колонках.

підтримка браузерами

CSS-колонки мають пристойну підтримку браузерами (IE10 +), але все ще вимагають префікси для всіх властивостей. Дізнатися більше подробиць про відповідні властивості можна на Can I Use.

Навіть якщо ваш улюблений браузер не підтримує мульти-стовпчик макет, враховуйте, що він легко може перетворитися в одне-стовпчик макет за допомогою витонченої деградації. CSS-колонки схожі на ескалатор доставки контенту (як красномовно висловився Мітч Хедберг)

Керівництво по впровадженню css-колонок в адаптивний дизайн

Багатоколоночних макет не може зламатися, він може тільки стати одне-стовпчик.

P.S. Це теж може бути цікаво:

Не минуло й півроку з останньої зміни робочого процесу W3C, як керівництву Консорціуму надійшла пропозиція застосувати нарешті цей новий процес на ділі. І списати вже неактуальні специфікації HTML в музей, щоб вони не заплутували розробників, «прикидаючись» актуальними.

Ще один модуль CSS, про який ми розповідали, непомітно дозрів до статусу, з якого W3C радить починати повсякденне використання новинок. Властивість contain дозволяє обмежувати зміни дерева відтворення, перерисовку CSS-боксів і зміни їх розмірів в межах елемента. Тому воно так важливо ...
ДАЛІ

З Парижа (на фото), де недавно проходила зустріч робочої групи CSS, прилетіла цікава новина: властивості grid-row-gap і grid-column-gap, а також їх скорочення grid-gap ...