Текст в несколько колонок средствами CSS3

Опубликовано: 2 марта, 2009 | Рубрика: Кодинг | Тэги: , | 5 Комментариев »

Честно скажу, я очень завидую веб-разработчикам недалёкого будущего, которые будут верстать сайты для новых, современных браузеров с полной поддержкой HTML5 и CSS3. Какой красивый и компактный код можно будет писать, сколько возможностей будет у веб-дизайнеров! И как ограничены сегодняшние возможности верстальщика…

К примеру, чтобы текст отображался двумя колонками, сегодня веб-разработчику необходимо создать два параграфа и задать обтекание для одного из них. А можно даже прибегнуть к табличной вёрстке, как например на этом сайте. Проблемы негибкости и несовершенства такого метода видны невооружённым глазом: высота таких блоков может быть отрегулирована только вручную. Как же сделать, чтобы при наполнении текстом обе колонки параграфа выглядели одинаковыми по высоте?

В CSS3 есть свойства, позволяющие разбивать единый текстовой блок на равные колонки. Ширину таких колонок можно указать явно, используя свойство column-width или же браузер сам может её рассчитать, разработчику нужно только указать количество колонок через свойство column-count. Хотя ничто не мешает вам (вернее, не помешает в будущем) одновременно указать и ширину и количество колонок, используя свойство columns и указав значения через пробел.

К сожалению, на данный момент все эти свойства поддерживаются только Safari, Google Chrome и частично Mozilla Firefox (речь идёт о самых последних версиях браузеров), поэтому мы будем указывать -moz- и -webkit- префикс. Приведу несколько примеров.

Текст разбит на 3 колонки, ширина которых расчитана браузером и изменяется в зависимости от ширины внешнего блока:

p{  
 
-moz-column-count: 3;  
 
-webkit-column-count:3;  
 
}

Текст разбит на колонки фиксированной ширины, указываемой в пикселях, em или pt, но не в процентах. Количество колонок задаётся браузером и изменяется в зависимости от ширины внешнего блока:

p{  
 
-moz-column-width: 300px;  
 
-webkit-column-width:300px;  
 
}

Количество колонок и их ширина заданы явным образом, если ширина блока меньше общей ширины колонок, количество колонок задаётся браузером:

p{  
 
-webkit-columns: 3 300px;  
 
}

Чтобы колонки не сливались, расстояние между ними можно задать свойством column-gap:

p{  
 
-moz-column-count: 3;  
 
-webkit-column-count:3;  
 
-moz-column-gap:100px;  
 
-webkit-column-gap:100px;  
 
}

Между колонками можно дополнительно отрисовать линию rule, визуально разграничивающую колонки (что-то вроде border). Само собой можно указать ширину, цвет и стиль линии. Поддерживается только Chrome и Safari:

p{  
 
-webkit-column-count:3;  
 
-webkit-column-gap:100px;  
 
-webkit-column-rule:3px dotted red;  
 
}

Есть в спецификации CSS3 ещё интересные свойства, связанные с многоколончатым отображением текста, которые пока не поддерживаются ни одним браузером, поэтому рассматривать их я не буду, но вы, при желании, можете ознакомиться с ними сами.

В демке я объединил свойство column-count с возможностью современных браузеров изменять стили в зависимости от ширины браузера. Таким образом пользователи, у которых ширина браузера меньше 1000 пикселей увидят одну колонку, те у кого больше — две, ну и обладатели широких мониторов (с разрешением более 1400 пикселей) все три. Напомню, пример работает только в Firefox, Safari и Google Chrome.

ДЕМО

чушьничего интересногомогло быть лучшеочень интересноотлично!
Может вам будет также интересно:

5 Комментариев на “Текст в несколько колонок средствами CSS3”

  1. 1 Vova  (6 мая, 2009 в 14:08) :

    А как можно разбить так произвольный контент, например, форму, которую генерирует ZendForms? пробывал поместить ее в ,

    – ни какого результата

    Username:

    Password:

     

     

  2. 2 Vova  (6 мая, 2009 в 14:10) :

    тут я вижу все теги режутся, предыдущий текст испорчен

  3. 3 Vova  (6 мая, 2009 в 14:11) :

    хотел поместить форму в див или р – ни какого результата

  4. 4 Роман  (6 мая, 2009 в 14:38) :

    html-код можно вставить в комментарий используя специальный тег code

    А вообще я не совсем понял, что вы хотите сделать? В статье говорится о формировании колонок [b]текста[/b]. “Произвольный контент” вы таким способом не сможете отобразить.

  5. 5 Vova  (8 мая, 2009 в 20:57) :

    Спасибо. А жаль.
    Я хотел форму, сгенерированую ZendForms (каждое поле – как определение) разбить на несколько колонок

    PS Не работают уведомления, потому так поздно ответил


Есть мнение? Высказывайтесь!