0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Создание колонок с текстом, до прихода стандарта CSS3, было достаточно сложным делом. Приходилось использовать различные свойства позиционирования и следить за тем, чтобы колонки не "развалились" в процессе добавления информации.</p>
1
<p>Создание колонок с текстом, до прихода стандарта CSS3, было достаточно сложным делом. Приходилось использовать различные свойства позиционирования и следить за тем, чтобы колонки не "развалились" в процессе добавления информации.</p>
2
<p>Посмотрите на пример выше. При всей визуальной легкости, создание такого макета вызывало трудности. Чаще всего проблема возникала в переносе текста в колонках. Для решения этой задачи использовали несколько блоков со строго отведенной информацией. Ни о каких автоматических переносах или изменении статьи не могло идти и речи.</p>
2
<p>Посмотрите на пример выше. При всей визуальной легкости, создание такого макета вызывало трудности. Чаще всего проблема возникала в переносе текста в колонках. Для решения этой задачи использовали несколько блоков со строго отведенной информацией. Ни о каких автоматических переносах или изменении статьи не могло идти и речи.</p>
3
<p>Сейчас же эта задача решается всего двумя(!) свойствами. Эти и некоторые другие свойства мы рассмотрим в данном уроке.</p>
3
<p>Сейчас же эта задача решается всего двумя(!) свойствами. Эти и некоторые другие свойства мы рассмотрим в данном уроке.</p>
4
<h2>Создание колонок</h2>
4
<h2>Создание колонок</h2>
5
<p>Для создания колонок в CSS существует свойство column-count. Оно полностью соответствует своему названию. Достаточно указать количество колонок и браузер все сделает за вас.</p>
5
<p>Для создания колонок в CSS существует свойство column-count. Оно полностью соответствует своему названию. Достаточно указать количество колонок и браузер все сделает за вас.</p>
6
<p><a>Codepen</a></p>
6
<p><a>Codepen</a></p>
7
<p><strong>Важно:</strong>информация внутри колонок обрабатывается "как есть". Это значит, что все отступы сохраняются. В случае с параграфами стоит сбрасывать верхний отступ. Это позволит держать первый параграф на одной линии с другими колонками.</p>
7
<p><strong>Важно:</strong>информация внутри колонок обрабатывается "как есть". Это значит, что все отступы сохраняются. В случае с параграфами стоит сбрасывать верхний отступ. Это позволит держать первый параграф на одной линии с другими колонками.</p>
8
<p>По умолчанию колонки делятся равномерно внутри контейнера и суммарно они займут все доступное пространство. Повлиять на это поведение можно свойством column-width - с его помощью задается оптимальная ширина колонок. Слово "оптимальная" является главным. В отличие от свойства width, здесь не устанавливается четкая ширина, и, если места в контейнере хватает, то колонки будут растягиваться на всю доступную ширину.</p>
8
<p>По умолчанию колонки делятся равномерно внутри контейнера и суммарно они займут все доступное пространство. Повлиять на это поведение можно свойством column-width - с его помощью задается оптимальная ширина колонок. Слово "оптимальная" является главным. В отличие от свойства width, здесь не устанавливается четкая ширина, и, если места в контейнере хватает, то колонки будут растягиваться на всю доступную ширину.</p>
9
<p>Зачем нужно такое поведение? Представьте, что у нас есть длинный текст в две колонки. Например, как в первом изображении в этом уроке. Без указания оптимальной ширины браузер будет выстраивать две колонки при любой ширине устройства. Если эта ширина будет 300 пикселей, то колонки поделятся по 150 пикселей. Ужасная картина.</p>
9
<p>Зачем нужно такое поведение? Представьте, что у нас есть длинный текст в две колонки. Например, как в первом изображении в этом уроке. Без указания оптимальной ширины браузер будет выстраивать две колонки при любой ширине устройства. Если эта ширина будет 300 пикселей, то колонки поделятся по 150 пикселей. Ужасная картина.</p>
10
<p>Чтобы не допустить такого, можно выставить оптимальную ширину. Если браузер не сможет выдать такую ширину колонке, то контент будет выстроен в одну колонку. Вот уже и адаптивность. А ведь это только первые уроки :)</p>
10
<p>Чтобы не допустить такого, можно выставить оптимальную ширину. Если браузер не сможет выдать такую ширину колонке, то контент будет выстроен в одну колонку. Вот уже и адаптивность. А ведь это только первые уроки :)</p>
11
<p>Эту запись можно сократить. В CSS используется свойство columns для сокращения свойств column-count и column-width. Последний пример можно записать так:</p>
11
<p>Эту запись можно сократить. В CSS используется свойство columns для сокращения свойств column-count и column-width. Последний пример можно записать так:</p>
12
<p>Первым значением записывается ширина колонки, а вторым их количество</p>
12
<p>Первым значением записывается ширина колонки, а вторым их количество</p>
13
<p><a>Codepen</a></p>
13
<p><a>Codepen</a></p>
14
<p>Перейдите на сайт CodePen и попробуйте сузить окно браузера. В определенный момент колонки уйдут, и весь текст будет выстроен в одну колонку.</p>
14
<p>Перейдите на сайт CodePen и попробуйте сузить окно браузера. В определенный момент колонки уйдут, и весь текст будет выстроен в одну колонку.</p>
15
<h2>Отступы между колонками</h2>
15
<h2>Отступы между колонками</h2>
16
<p>В примерах выше вы могли заметить, что браузеры автоматически проставляют отступы между колонками. Чаще всего не стоит доверять браузеру. Одно из правил верстки и программирования: явное лучше неявного. По умолчанию расстояние между колонками равно 1em. Единица измерения<em>em</em>отсчитывается от размера шрифта. Если размер шрифта равен 16 пикселям, то и 1em равен 16 пикселям.</p>
16
<p>В примерах выше вы могли заметить, что браузеры автоматически проставляют отступы между колонками. Чаще всего не стоит доверять браузеру. Одно из правил верстки и программирования: явное лучше неявного. По умолчанию расстояние между колонками равно 1em. Единица измерения<em>em</em>отсчитывается от размера шрифта. Если размер шрифта равен 16 пикселям, то и 1em равен 16 пикселям.</p>
17
<p>Задать отступы между колонками можно с помощью свойства column-gap. Кстати, это свойство вы встретите еще много раз. Оно достаточно универсально.</p>
17
<p>Задать отступы между колонками можно с помощью свойства column-gap. Кстати, это свойство вы встретите еще много раз. Оно достаточно универсально.</p>
18
<p>Вы можете использовать различные единицы измерения внутри свойства column-gap. Для примера возьмем значения в пикселях. В будущих уроках вы познакомитесь и с другими единицами измерения.</p>
18
<p>Вы можете использовать различные единицы измерения внутри свойства column-gap. Для примера возьмем значения в пикселях. В будущих уроках вы познакомитесь и с другими единицами измерения.</p>
19
<p><a>Codepen</a></p>
19
<p><a>Codepen</a></p>
20
<p>Попробуйте изменить значение свойства column-gap и посмотрите, как это повлияет на колонки.</p>
20
<p>Попробуйте изменить значение свойства column-gap и посмотрите, как это повлияет на колонки.</p>
21
<h2>Границы между колонками</h2>
21
<h2>Границы между колонками</h2>
22
<p>Модуль CSS Multi-column Layout позволяет задавать визуальную границу между колонками. Если вы знакомы со свойством border, которое устанавливает границы у блоков, то поведение вам будет знакомо. Раньше создание границ между колонками необходимо было реализовывать самостоятельно.</p>
22
<p>Модуль CSS Multi-column Layout позволяет задавать визуальную границу между колонками. Если вы знакомы со свойством border, которое устанавливает границы у блоков, то поведение вам будет знакомо. Раньше создание границ между колонками необходимо было реализовывать самостоятельно.</p>
23
<p>Для создания границы используется свойство column-rule, которое является краткой записью следующих свойств:</p>
23
<p>Для создания границы используется свойство column-rule, которое является краткой записью следующих свойств:</p>
24
<ul><li>column-rule-width - ширина границы.</li>
24
<ul><li>column-rule-width - ширина границы.</li>
25
<li>column-rule-style - тип границы. Значения совпадают со значениями свойства border.</li>
25
<li>column-rule-style - тип границы. Значения совпадают со значениями свойства border.</li>
26
<li>column-rule-color - цвет границы.</li>
26
<li>column-rule-color - цвет границы.</li>
27
</ul><p>Вы можете указывать как три отдельных свойства, так и краткую запись.</p>
27
</ul><p>Вы можете указывать как три отдельных свойства, так и краткую запись.</p>
28
<p><a>Codepen</a></p>
28
<p><a>Codepen</a></p>
29
<h2>Добавление контента в несколько колонок</h2>
29
<h2>Добавление контента в несколько колонок</h2>
30
<p>Если представить себе газету, то там не всегда текст идет строго по колонкам. Частая ситуация - заголовок, который накладывается на все колонки, как бы разделяя их по горизонтали.</p>
30
<p>Если представить себе газету, то там не всегда текст идет строго по колонкам. Частая ситуация - заголовок, который накладывается на все колонки, как бы разделяя их по горизонтали.</p>
31
<p>Для разделения колонок используется свойство column-span. Оно принимает всего два значения:</p>
31
<p>Для разделения колонок используется свойство column-span. Оно принимает всего два значения:</p>
32
<ul><li>none - значение по умолчанию. Текст находится просто внутри колонок.</li>
32
<ul><li>none - значение по умолчанию. Текст находится просто внутри колонок.</li>
33
<li>all - текст "выходит из колонки" и разделяет их.</li>
33
<li>all - текст "выходит из колонки" и разделяет их.</li>
34
</ul><p><a>Codepen</a></p>
34
</ul><p><a>Codepen</a></p>
35
<h2>Перенос колонок</h2>
35
<h2>Перенос колонок</h2>
36
<p>В примерах можно заметить, что все элементы внутри колонок переносятся автоматически. Это неплохое решение для текста, но если существуют небольшие блоки, и нам явно не нужно, чтобы информация внутри них переносилась, то без помощи сторонних свойств не обойтись. Как же контролировать перенос контента внутри колонок? Для этого существует несколько правил, о которых поговорим в этом разделе.</p>
36
<p>В примерах можно заметить, что все элементы внутри колонок переносятся автоматически. Это неплохое решение для текста, но если существуют небольшие блоки, и нам явно не нужно, чтобы информация внутри них переносилась, то без помощи сторонних свойств не обойтись. Как же контролировать перенос контента внутри колонок? Для этого существует несколько правил, о которых поговорим в этом разделе.</p>
37
<ul><li>break-before</li>
37
<ul><li>break-before</li>
38
<li>break-after</li>
38
<li>break-after</li>
39
<li>break-inside</li>
39
<li>break-inside</li>
40
</ul><p>По названию уже можно понять, что речь идет о переносе до/после и внутри. Все три свойства принимают огромное количество значений, так как рассчитаны не только для колонок, но и для вывода на печать.</p>
40
</ul><p>По названию уже можно понять, что речь идет о переносе до/после и внутри. Все три свойства принимают огромное количество значений, так как рассчитаны не только для колонок, но и для вывода на печать.</p>
41
<p>При работе с CSS Multi-column Layout нас больше всего интересует значение avoid, которое запрещает перенос.</p>
41
<p>При работе с CSS Multi-column Layout нас больше всего интересует значение avoid, которое запрещает перенос.</p>
42
<p><a>Codepen</a></p>
42
<p><a>Codepen</a></p>
43
<p>Взгляните на элемент figure. Он состоит из изображения и подписи к нему. Для наглядности обведем его границей и увидим, что изображение находится в одной колонке, а подпись уже в другой. Это плохой вариант верстки текста. Без границы совершенно непонятно что текст - лишь подпись изображения, а не самостоятельный текст.</p>
43
<p>Взгляните на элемент figure. Он состоит из изображения и подписи к нему. Для наглядности обведем его границей и увидим, что изображение находится в одной колонке, а подпись уже в другой. Это плохой вариант верстки текста. Без границы совершенно непонятно что текст - лишь подпись изображения, а не самостоятельный текст.</p>
44
<p>Этот перенос происходит внутри элемента figure. Для запрета такого переноса можно воспользоваться свойством break-inside и запретить перенос внутри данного элемента.</p>
44
<p>Этот перенос происходит внутри элемента figure. Для запрета такого переноса можно воспользоваться свойством break-inside и запретить перенос внутри данного элемента.</p>
45
<p><a>Codepen</a></p>
45
<p><a>Codepen</a></p>