21.09.2010

Успамінаючы: CSS3 мультымакет модуля

* Source text URL: http://webdesignernotebook.com/css/remembering-the-css3-multi-column-layout-module/



Таму што я не зачыніў CSS3, гэтым разам я вырашыў паказаць вам трохі шматлікіх макетаў модуля. Гэты модуль дазваляе планоўку ўтрымання элемента ў некалькі слупкоў, як цячэ тэкст у макет газетнага тыпу.

CSS Модулі

Проста, каб пераканацца, што сцісла ўсе разумеюць, што я маю на ўвазе пад “модулямі”, распрацоўка CSS3 была паасобна ў розных модулях. Напрыклад, ёсць модуль каталогаў, значэнні і адзінкі вымярэння модуля, фону і меж модуляў і г.д.

Некаторыя з гэтых модуляў знаходзяцца на больш прасунутай стадыі развіцця і наблізіліся да канчатковай, чым іншыя. Вы можаце зірнуць на табліцу Бягучыя працы тут.

Падтрымка браўзараў

Давайце разбяромся з самага пачатку: толькі Safari і Firefox у наш час падтрымлівае (некаторыя) з модуляў гэтых функцый, а менавіта ўласцівасці column-count, column-width, column-gap і column-rule. Іншыя браўзары зробяць утрыманне, калі б не было калон на ўсіх.

Ёсць больш аб’ектаў, уключаных у спецыфікацыі (і Safari падтрымлівае некалькі), але я толькі адзначу іх у гэтым артыкуле, каб мы ўсе маглі атрымаць густ, што ідзе.

Акрамя таго, я абраў дадзены модуль, таму што гэта адзін з нешматлікіх, якія насамрэч у статусе “апошні званок”, што бліжэй да статуса “быць гатовым”, чым іншыя.

Разметкі

Для гэтага прыкладу я схапіў які-небудзь тэкст з выдатнага Генератара сляпога тэксту і стварыў асноўныя старонкі з некаторымі div і пунктамі.

Вось прыклад аднаго з div:

<div id="text1">

<p>One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment.</p>

<p>His many legs, pitifully thin compared with the size of the rest of him, waved about helplessly as he looked. "What’s happened to me? " he thought. It wasn’t a dream. His room, a proper human room although a little too small, lay peacefully between its four familiar walls.</p>

<p>A collection of textile samples lay spread out on the table – Samsa was a travelling salesman – and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame. It showed a lady fitted out with a fur hat and fur boa who sat upright, raising a heavy fur muff that covered the whole of her lower arm towards the viewer.</p>

<p>Gregor then turned to look out the window at the dull weather. Drops of rain could be heard hitting the pane, which made him feel quite sad. "How about if I sleep a little bit longer and forget all this nonsense", he thought, but that was something he was unable to do because he was used to sleeping on his right, and in his present state couldn’t get into that position. However hard he threw himself onto his right, he always rolled back to where he was.</p>

</div>

CSS

Я проста жадаю, каб хутка паказаць, што кожны з уласцівасцяў робіць. Каб выкарыстоўваць іх, нам прыйдзецца ўжыць пэўнага вытворцу ўласцівасці: для Safari ўласцівасці будуць мець прэфікс -webkit- і Firefox з -moz-. Прыкрыя, але нічога, мы абвыклі, ці не так?

Калі ласка, выканайце прыведзеныя ніжэй прыклады на гэтай старонцы.

column-width

CSS для нашага першага div будзе складацца ў наступным:

#text1 {

-webkit-column-width: 200px;

-moz-column-width: 200px;

column-width: 200px;

}

Гэта створыць шырынёй 200px калоны да шырыні старонкі запоўненымі, без парыву паміж калонамі.

Кожны слупок з элементамі завецца калонцамі вакна. Калонцы вакна не маюць уласныя ўласцівасці, як фон, абіўка ці палі (прынамсі, не цяпер, але гэта можа змяніцца ў будучыні спецыфікацыі). Акрамя таго, усе слупкі ў радкі маюць аднолькавую шырыню і тую ж вышыню.

column-width уласнасці не з’яўляюцца канчатковымі -гэта насамрэч аптымальны памер, у якім мы жадаем мець слупкі, але гэта можа змяніцца, калі кантэйнер шырэй, чым гэта неабходна.

column-gap і column-rule

Зараз давайце дадамо прастору паміж калонамі і прыгожыя правіла, ці не так?

#text2 {

-webkit-column-width: 390px;

-webkit-column-gap: 20px;

-webkit-column-rule: 1px solid #000000;

-moz-column-width: 390px;

-moz-column-gap: 20px;

-moz-column-rule: 1px solid #000000;

column-width: 390px;

column-gap: 20px;

column-rule: 1px solid #000000;

}

У гэтым прыкладзе мы вызначаем парыў паміж кожнай калонцы 20px, а таксама дадаем правілы паміж кожнай з іх.

column-rule уласнасці адпавядаюць сінтаксісу border уласнасці. Акрамя таго, слупок як правіла не займае месца, калі б яны былі шырэй, чым парыў калонкі, то яны б павінны былі супадаюцьу ўтрыманні.

Калонцы прабелаў і слупкоў правільна ўсё ж у радок.

Як ігнараваць маляўнічыя блокі ў дадзеным выпадку на дадзены момант, я тлумачу ніжэй.

column-count

На нашым трэцім прыкладзе, мы будзем удакладняць, колькі калонак элементаў мы сапраўды жадаем мець:

#text3 {

-webkit-column-width: 200px;

-webkit-column-count: 4;

-webkit-column-gap: 20px;

-moz-column-width: 200px;

-moz-column-count: 4;

-moz-column-gap: 20px;

column-width: 200px;

column-count: 4;

column-gap: 20px;

}

Калі абедзве column-width і column-count задаюцца (як у дадзеным прыкладзе), column-count значэнні будуць разглядацца як максімальны лік слупкоў. Так што, калі толькі тры калоны падыходзяць у гэтым элеменце, то вы ўсталюеце яго ў 4 і толькі 3 будзе створаны.

Калі вы не паказваеце шырыню слупкоў, column-width будзе разлічаны аўтаматычна ў залежнасці ад таго, колькі слупкоў вы паказалі.

Малюнкі і г.д.

Вы можаце мець элементы, такія як малюнкі, а тэкст нават пусціць па вадзе ці зрабіць іх дзель у шырыню. Гэты паказчык будзе разлічвацца ў залежнасці ад шырыні слупка, у вакне яны ўсярэдзіне.

Каб праверыць гэту тэорыю, я дадаў тры каляровых div секунд да другога прыкладу (#test2), прычым некаторыя ўбудаваныя кадоўкі (о, жах!). Першы чырвоны div сплаўляецца, але мае шырыню 140%, а другі зялёны div не плавае і гэта таксама 140% шырыні, і трэці жоўты div сплаўляецца, але 100% шырыні.

Паводле спецыфікацыі W3C, тое, што павінна адбывацца:

Утрыманне ў звычайным струмені, якое распаўсюджваецца ў калонцы прабелаў (напрыклад, доўгія словы), абразаецца ў сярэдзіне калоны прабелам.

Паплаўкі, якія шырэй, чым калонцы вакна ўрываюцца ў суседнія слупкі.

Папраўце мяне, калі я памыляюся, але тое, што я бачу на гэтых прыкладах, Firefox будзе перапоўнены і будзе 140% div, нават калі адзін другога не сплавіў. Safari не лепш: яна перапоўнена ніводным з іх.

Падрабязней пра перапоўненыя рэчы

У якасці апошняга прыкладу, я ствараю Div з малай шырынёй і наборам вышыні. Я раблю перапаўненні бачныя, і бачце, што адбываецца …

#text4 {

height: 200px;

width: 500px;

overflow: visible;

border: 2px solid red;

-webkit-column-width: 200px;

-webkit-column-gap: 20px;

-moz-column-width: 200px;

-moz-column-gap: 20px;

column-width: 200px;

column-gap: 20px;

}

Паводле спецыфікацыі, гэта тое, што павінна адбывацца:

Некалькіх слупкоў элементаў могуць мець некалькі слупкоў, чым месціць, за кошт

абмежаванай вышыні калоны. [...]

У суцэльным асяроддзі слупкі, якія не ўпісваюцца ў мультыслупкі элементаў, дадаюцца ўбудаваным кірункам.

На чалавечай мове гэта азначае, што, калі ўтрыманне будзе перапоўнена, то яно павінна быць па баках. У гэтым выпадку, Safari, як уяўляецца, атрыме гэта права, у той час як Firefox ўтрымае перапаўненні вертыкальна, калі вышыня ўсталёўваецца праз max-height уласнасці, і правільна, калі па звычайнай height уласнасці. Паглядзіце на апошні блок старонкі (з чырвонай рамкай).

Заключныя словы

І вось яно што! Я проста жадаў, каб вы памяталі гэтую выдатную CSS3 асаблівасць, якая можа зрабіць наша жыццё нашмат прасцей і, што пагаршае, даволі добра для браўзараў, якія не падтрымліваюць яго.

Гляджу прыклады шматлікіх макетаў у дзікай прыродзе, але я не думаю, што шмат людзей выкарыстоўваюць яго цяпер. Для чаго гэта варта, я выкарыстоўваю гэта на маім персанальным сайце yaili.com, і яно таксама выкарыстоўваецца ў tweetCC сайце.

Ці ведаеце вы больш сайтаў з выкарыстаннем ці не?

ok ok