Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Колонки Основы вёрстки контента

Создание колонок с текстом, до прихода стандарта CSS3, было достаточно сложным делом. Приходилось использовать различные свойства позиционирования и следить за тем, чтобы колонки не «развалились» в процессе добавления информации.

Пример многоколоночного текста на CSS

Посмотрите на пример выше. При всей визуальной лёгкости, создание такого макета вызывало трудности. Чаще всего проблема возникала в переносе текста в колонках. Для решения этой задачи использовали несколько блоков со строго отведённой информацией. Ни о каких автоматических переносах или изменении статьи не могло идти и речи.

Сейчас же эта задача решается всего двумя(!) свойствами. Эти и некоторые другие свойства мы рассмотрим в данном уроке.

Создание колонок

Для создания колонок в CSS существует свойство column-count. Оно полностью соответствует своему названию. Достаточно указать количество колонок и браузер всё сделает за вас.

<article class="columns-2">
  <p>David Bowie, original name David Robert Jones, (born January 8, 1947, London, England—died January 10, 2016, New York, New York, U.S.), British singer, songwriter, and actor who was most prominent in the 1970s and best known for his shifting personae and musical genre hopping.</p>
  <p>To call Bowie a transitional figure in rock history is less a judgment than a job description. Every niche he ever found was on a cusp, and he was at home nowhere else—certainly not in the unmoneyed London suburb where his childhood was as dingy as his adult life would be glitzy. While this born dabbler’s favourite pose was that of a Great Artist beguiled by rock’s possibilities as a vehicle, in truth he was more a rocker drawn to artiness because it worked better than any other pose he had tried (not that he was not eclectic—he admired Anthony Newley and Jacques Brel and studied mime with Lindsay Kemp).</p>
</article>
.columns-2 {
  column-count: 2;
}

Важно: информация внутри колонок обрабатывается «как есть». Это значит, что все отступы сохраняются. В случае с параграфами стоит сбрасывать верхний отступ. Это позволит держать первый параграф на одной линии с другими колонками.

.columns-2 p {
  margin-top: 0;
}

По умолчанию, колонки делятся равномерно внутри контейнера и суммарно они займут всё доступное пространство. Повлиять на это поведение можно свойством column-width — с его помощью задаётся оптимальная ширина колонок. Слово «оптимальная» является главным. В отличие от свойства width здесь не устанавливается чёткая ширина и если места в контейнере хватает, то колонки будут растягиваться на всю доступную ширину.

Зачем нужно такое поведение? Представьте, что у нас есть длинный текст в две колонки. Например, как в первом изображении в этом уроке. Без указания оптимальной ширины браузер будет выстраивать две колонки при любой ширине устройства. Если эта ширина будет 300 пикселей, то колонки поделятся по 150 пикселей. Ужасная картина.

Чтобы не допустить такого, можно выставить оптимальную ширину. Если браузер не сможет выдать такую ширину колонке, то контент будет выстроен в одну колонку. Вот уже и адаптивность. А ведь это только первые уроки :)

.columns-2 {
  column-count: 2;
  column-width: 250px;
}

Перейдите на сайт CodePen и попробуйте сузить окно браузера. В определённый момент колонки уйдут, и весь текст будет выстроен в одну колонку.

Отступы между колонками

В примерах выше вы могли заметить, что браузеры автоматически проставляют отступы между колонками. Чаще всего не стоит доверять браузеру. Одно из правил вёрстки и программирования: явное лучше неявного. По умолчанию расстояние между колонками равно 1em. Единица измерения em отсчитывается от размера шрифта. Если размер шрифта равен 16 пикселям, то и 1em равен 16 пикселям.

Задать отступы между колонками можно с помощью свойства column-gap. Кстати это свойство вы встретите ещё много раз. Оно достаточно универсально.

Вы можете использовать различные единицы измерения внутри свойства column-gap. Для примера возьмём значения в пикселях. В будущих уроках вы познакомитесь и с другими единицами измерения.

.columns-2 {
  column-count: 2;
  column-gap: 30px;
  column-width: 250px;
}

Попробуйте изменить значение свойства column-gap и посмотрите, как это повлияет на колонки.

Границы между колонками

Модуль CSS Multi-column Layout позволяет задавать визуальную границу между колонками. Если вы знакомы со свойством border, которое устанавливает границы у блоков, то поведение вам будет знакомо. Раньше создание границ между колонками необходимо было реализовывать самостоятельно, что тоже не радовало верстальщиков.

Для создания границы используется свойство column-rule, которое является краткой записью следующих свойств:

  • column-rule-width — ширина границы.
  • column-rule-style — тип границы. Значения совпадают со значениями свойства border.
  • column-rule-color — цвет границы.

Вы можете указывать как три отдельных свойства, так и краткую запись.

.columns-2 {
  column-count: 2;
  column-gap: 30px;
  column-rule: 2px solid black;
  column-width: 250px;
}

Добавление контента в несколько колонок

Если представить себе газету, то там не всегда текст идёт строго по колонкам. Частая ситуация — заголовок, который накладывается на все колонки, как бы разделяя их по горизонтали.

Для разделения колонок используется свойство column-span. Оно принимает всего два значения:

  • none — значение по-умолчанию. Текст находится просто внутри колонок.
  • all — текст «выходит из колонки» и разделяет их.
.columns-2 {
  column-count: 2;
  column-gap: 30px;
  column-rule: 2px solid black;
  column-width: 250px;
}

h2 {
  text-align: center;
  column-span: all;
}

Перенос колонок

В примерах можно заметить, что все элементы внутри колонок переносятся автоматически. Это неплохое решение для текста, но если существуют небольшие блоки, и нам явно не нужно, чтобы информация внутри них переносилась, то без помощи сторонних свойств не обойтись. Как же контролировать перенос контента внутри колонок? Для этого существует несколько правил, о которых поговорим в этом разделе.

  • break-before
  • break-after
  • break-inside

По названию уже можно понять, что речь идёт о переносе до/после и внутри. Все три свойства принимают огромное количество значений, так как рассчитаны не только для колонок, но и для вывода на печать.

При работе с CSS Multi-column Layout нас больше всего интересует значение avoid, которое запрещает перенос.

Взгляните на элемент figure. Он состоит из изображения и подписи к нему. Для наглядности обведём его границей и увидим, что изображение находится в одной колонке, а подпись уже в другой. Это плохой вариант вёрстки текста. Без границы совершенно непонятно что текст — лишь подпись изображения, а не самостоятельный текст.

Этот перенос происходит внутри элемента figure. Для запрета такого переноса можно воспользоваться свойством break-inside и запретить перенос внутри данного элемента.

figure {
  border: 1px solid;
  break-inside: avoid;
}

Самостоятельная работа

Найдите любую газетную статью. Используя CSS Multi-column Layout воссоздайте журнальную вёрстку.


Дополнительные материалы

  1. Спецификация CSS Multi-column Layout Module Level 1

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»