Цялостен дизайн с CSS
и XHTML 1.0

Преди да започнем

Малко пояснение за думите, ползвани в текста по-долу и онова, което трябва да знаете, за да разберете текста.

<div> - аз ще наричам това нещо div или лейър. Div, параграфът <p>, тагът <form> h1, h2..., и други подобни съдържат нови редове в себе си. Всъщност те са БЛОК-ови елементи. Заемат 1 или повече цели редове от екрана. Можете да превърнете и Inline елементи (не съдържащи цял ред) в блокови - като span, a и b с display: block, както и блокови елементи в Inline с display: inline;.

Всеки елемент, който е блоков или със зададен display: block;, заема квадратче на екрана с дефинираната му ширина или 100% по default. Inline елементите също могат да получат бордери, падинги и прочие, те са просто част от реда и не са непременно "квадратче".

За смисъла на нещата

HTML 4 е прекрасен стандарт, който ни е разглезил да правим нещата лесно и с много грешки. В сайтовете ни обаче таговете ни винаги са имали главно дизайнерско предназначение, за да подредим нещата по екрана, но не и смислово. Успоредно с това, чистият HTML имаше нужда от средство, с което множеството еднотипни тагове да съдържат лесно описание на еднотипен външен вид. Сигурно сте виждали генериран код от по-стари DreamWeaver-и, FrontPage и други, от сорта на: <table cellspacing="0" cellpadding="3" border="0">
<tr>
  <td font-face="Arial" font-size="+1">Име</td>
  <td bgcolor="green"><img src="images/foobar.gif" width="1" height="1" border="0"></td>
  <td font-face="Arial" font-size="+1">Презиме</td>
  <td bgcolor="green"><img src="images/foobar.gif" width="1" height="1" border="0"></td>
  <td font-face="Arial" font-size="+1">Фамилия</td>
</tr>
....
</table>
Ужасно, нали? Много по-добре е следното: <table class="names">
  <td>Име</td>
  <td>Презиме</td>
  <td>Фамилия</td>
....

в комбинация с един стил .names td {font-family: Arial; font-size: 14px; border-left: 1px solid green;} Разбира се, горният пример е далеч от изчерпателност, но на вас сигурно не ви е и нужен :)

Необходимостта от удобно форматиране ни беше удволетворена с CSS, а възможността да създадем смислови тагове - от XML. За добро или лошо, комбинацията от XML със стил (XSL) не се разпространи особено. Вместо това хората измислиха за нас (отдавна... 1999 година, струва ми се:) XHTML - стандарт, с който с част от старите ни HTML tag-ове можем да създадем приличен документ, с изключително добро форматиране, в който таговете имат смисъл.

И все пак - защо е нужно това?

Честно казано, за себе си все още ги търся. Формални причини има много:

Все пак за да разберете този текст е нужно да занете какво е:
<table>, как се поставя стил в HTML и още някои дреболии.

Да се върнем в първи клас

Помните ли първата си уеб страница? Още преди да откриете фреймсета и мърдащите гиф-чета. Сигурен съм, че сте се сблъскали с желанието си да подредите един текст до една картинка. Почти сигурен съм и за режението ви - ТАБЛИЦА - и картинката седи от едната страна, а текстът от другата страна в таблицата. После сигурно сте открили и възможността за <img align=left src=...>, но вероятно сте го изоставили като непродуктивно в името на това: <TABLE>
<TR>
  <TD valign=top><img src=i/blah.gif>
  <TD valign=top>Здрасти, Джипси, <br>как си?
</TABLE>
В широк смисъл това би било валидно и ще се интерпретира от всички браузъри. Ще вметна, че в XHTML вече не може да се ползват тагове с главни букви. Всички тагове, които се отварят, трябва и да се затварят (а не както тук да си позволяваме да оставим TD-тата отворени, а line break-a сега би бил валиден самозатварящ се <br />

Е, това е мястото, където бих искал да ви върна. Правилното решение, което ще ви помогне много в CSS базирания дизайн е позиционирането по аналог с align=right.

В XHTML вече нямате align=right и align=left. Вместо тях имате стил float: left; и float: right;.

  • тест 1
  • тест 2
  • тест 3

Аз съм мъничко човече, на децата мил другар
Как ли беше текстът на песничката от "Педя човек, лакът брада"?

Ето ви един много дълъг ред, който ще дойде изцяло отдолу

Вижте кода (ще се покаже на това място с JavaScript)

Още по-назад към яслата

Може би сте свикнали да позиционирате лейъри чрез position: absolute;? После се чудите, защо разни неща ви се размазват драматично по екрана. Забравете временно абсолютното позициониране. Убеден съм, че всеки от вас може да позиционира всичко абсолютно по екрана, но това има уловка - създава ви ядове, когато имате неясна ширина и дължина на вашите текстове. По този начин онова, което много ви се иска да е най-отдолу, може да се намърда по средата на екрана, точно върху текстовете ви.

Абсолютното позициониране дава възможност да фиксирате лейър спрямо ъглите на екрана. Релативното позициониране означава да закрепите вашия лейър спрямо парент лейъра, в който се намира (или body таг-а).

Floating позициониране в колони

Интро

Продуктивният уеб сайт изисква да можете да разполагате нещата в колони, не само в редове. С таблица това се постига общо взето лесно, но модерният дизайнер си иска div и се изприщва от ужас. Начинът, по който трябва да се постигат колони с CSS и лейъри е, като се ползва float:

Причината е в това, че когато позиционирате 1 layer абсолютно, може да разположите 1 колона перфектно по хоризонтал, но ако имате 2 колони, позиционирани абсолютно - вече няма да знаете коя свършва първа. Съответно - няма да имате възможност да сложите нещо едновременно под двете, без javascript.

Пример

Кликнете на линковете, за да се увеличи обема текст:

Вижте кода (ще се покаже на това място с JavaScript)

Как се правят повече колони?

Дефакто можете да float-нете само в ляво или дясно 10 колони с фиксирана ширина и ще сработи. Проблемът идва, когато нямате фиксирана ширина... Ако не дадете фиксирана ширина на 1 layer и той е с float, той ще бъде със ширина 100% от екрана. Съответно понеже ще имате неща в дясно и ляво, екранът ви ще стане по-широк и със страничен скрол. Този проблем се преодолява с негативен margin на разтягащия се лейър по хоризонтал. Ще разгледам тази техника в отделен артикъл или ще изровя статията, от която я научих.

Основното, което искам да кажа по повод floating relative позиционирането е, че не бива да се притеснявате, ако нещата ви се разместват. Това означава, че не сте дали достатъчно място и се е образувал ... нов ред, както в примера:

  • тест 1
  • тест 2
  • тест 3
  • ще се пренесе
  • ще се пренесе

Аз съм мъничко човече, на децата мил другар
Как ли беше текстът на песничката от "Педя човек, лакът брада"?

Вижте кода (ще се покаже на това място с JavaScript)

Ето ви и обещания линк: Позициониране чрез float

Таблици

Според мен не бива да се отказвате от таблиците, когато правите CSS дизайн. Напълно възможно е да замените таблица със списък, но това има някои ограничения. Първото - ОСНОВНО за мен - е, че не можете да направите дизайна "разтягащ се", т.е. на 4 ред в 1 от TD-тата да имате "много дълъг текст". Ако все пак искате да направите чиста таблица без <table>, ето ви 2 примера:

Таблица чрез UL/LI

    • Ред 1 колона 1
    • Ред 1 колона 2
    • Ред 1 колона 3
    • Ред 1 колона 4
    • Ред 1 колона 5
    • Ред 2 колона 1
    • Ред 2 колона 2
    • Ред 2 колона 3
    • Ред 2 колона 4
    • Ред 2 колона 5
    • Ред 3 колона 1
    • Ред 3 колона 2
    • Ред 3 колона 3
    • Ред 3 колона 4
    • Ред 3 колона 5

Вижте кода (ще се покаже на това място с JavaScript)

Ако искате да направите и colspan, ще ви се наложи да избегнете подобни "груби" дефиниции на стила и ще трябва да направите отделен стил за случая без колспан и този с колспан.

Пробвайте това за втората примерна таблица

Някои обяснения:
<p style="clear: left"> - без това, float left може да се запази и да причини размазвания в екрана. clear: both; премахва floating-а едновременно от ляво и дясно.

Наложи се да поставя този таг: <li class="break-hide" />, за да отменя float-а в рамките на самия <ul>, тъй като иначе по-долния текст се качва нагоре. Ако се направи директно, без javascript-а нужен само за примера би станало и с доста по-безпроблемния <span />

Таблица чрез div

cell 1
cell 2
cell 3
cell 4

cell 5
cell 6
cell 7
cell 8

cell 9
cell 10
cell 11
cell 12

 

Вижте кода (ще се покаже на това място с JavaScript)

Вижте описанието на #mytable в CSS файла.

Този вариант обаче не е особено чист и модифицируем. Така направен се нуждае от много допълнителни тагове, които да позволяват модифициране на броя колони, което противоречи на принципите на XHTML. Не отричам, че направих опит да го направя и с допълинтелни тагове, но се натъкнах на допълнителни проблеми.

Списъци

Прочетете тази статия, ще ви помогне много. Наистина нямам какво да добавя към нея: A list apart

Често допускани грешки и капани

Ресурси и връзки

Този документ се валидира успешно, с уговорката за character coding windows-1251:

Valid XHTML 1.0!   Valid CSS!   Bobby WorldWide Approved AAA   Bobby WorldWide Approved 508

Този текст е (c) dzver 2004, ако имате въпроси - пишете ми на адрес dzver@abv.bg