warlockfx ([info]warlockfx) wrote,
@ 2008-03-18 10:19:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:web-development

Вёрстка: Переход с табличной структуры на блочную

Статья предназначена преимущественно для начинающих разработчиков веб-сайтов и просто интересующихся. В ней я попытаюсь осветить пошагово переход с табличной структуры сайта (сайт, за основу модели внешнего вида которого взят тег «table») на блочную структуру (модель на теге «div»). Запись сделана с подачи sparkovich'а.

Зачем это нужно?

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

Кроссбраузерность и кроссдевайсовость: трудно предугадать какими браузерами будут пользоваться люди, которые пожелают зайти на разрабатываемый сайт. Традиционная четвёрка — это MS IE, FF, Opera, Safari. Однако, есть ведь ещё Lynx, мобильные всякие браузеры, измывающиеся цинично над дизайном и всякие самоделки/старые версии/извращения которыми люди по малопонятным мне причинам пользуются.

Таблицы отрисовываются довольно неодинаково в разных браузерах, начиная от размеров отступов по-умолчанию и заканчивая отображением их границ (например, браузер Opera игнорирует цвет рамки, заданный не через таблицу стилей). То есть, ежели строить логическую цепочку имеющихся данных и каким-то образом её проанализировать, таблицы будут служить преградой, разрушающей всю композицию.

Семантика кода (логичность): рекомендации W3C гласят, что «таблицы должны использоваться только для представления табличных данных, но не для разметки страницы».

Смена дизайна (универсальность): нужно быть лютым извращенцем, чтобы копаться в чужом табличном шаблоне в целях подпраить немного внешний вид. Разобраться в нагромождении тегов «td», «th» и «tr» тяжко, когда там повсюду используются конструкции сдвоенных и счетверённых ячеек (кто разбирался в чужих colspan'ах и rowspan'ах, поймут). При использовании блоков же, достаточно лишь сменить CSS-стиль и загрузить новые картинки, после чего сайт может выглядеть совсем неузнаваемо.

Объём кода (скорость загрузки): староверы сетуют на то, что если сравнить размер табличного шаблона и блочного, но с рассчётом файла стилей — выйдет одинаково, или даже в проигрышную для блоков сторону. Однако, таблица стилей загрузится однажды и закэшируется, благодаря чему не нужно будет каждый раз её перезапрашивать. Код же, генерируемый скриптом на сервере постоянно будет содержать в себе вышеупомянутые теги.

Отображение загруженной информации: как известно, таблица отрисовывается браузером исключительно после её полной загрузки. Привет «Войне и Миру», в табличном оформлении! Блок же может начать отображаться даже до загрузки шапки, что звучит диковато, но об этом позже. Чтобы задержать посетителей на тяжеловесном сайте, всегда помещал шапку в отдельную таблицу, ибо, картинки шапки закэшируются, а сама таблица начнёт отображаться, показывая собой, что сайт не умер, а просто долго грузится. Особенно актуально это было во времена коммутируемого доступа в Интернет…

Индексирование в поисковых системах: поисковые системы вполне могут заблудиться в награмождении таблиц, в блоках же поисковая система всегда может семантически определить, где данные, а где декорации.

Свободное расположение блоков в шаблоне: в отличие от таблицы, блоки можно размещать не с четырёх сторон от близлежащего объекта, но совершенно свободно в любой области сайта. Это открывает совершенно новые горизонты для дизайнера и программиста.

Как верстать?

  • Решаете, какой использовать каркас;
  • Рисуете дизайн под этот каркас;
  • Разрезать полученный дизайн на отдельные картинки;
  • Создать xHTML-код, который будет содержать в себе таблицу с взаимным расположением элементов, как в каркасе;
  • Вставить полученные (нарезаные) изображения в xHTML-код, где это необходимо;
  • Создать каскадную таблицу стилей под области, где необходимо сделать изображение фоновым рисунком;
  • Отладить.

Как верстать таблицами?

Пример:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <link href="inc/css/style.css" type="text/css" rel="stylesheet" />
 <title>%TITLE%</title>
</head>
<body>
 <table width="100%">
  <tr>
   <td width="350">
    %MAINLOGO%
   </td>
   <td width="80%">
    %TRANS%
   </td>
  </tr>
  <tr>
   <td width="250">
     %LOGIN%
   </td>
   <td>
     %CONTENT%
   </td>
  </tr>
  <tr>
   <td colspan="2">
    %FOOTER%
   </td>
  </tr>
 </table>
</body>
</html>
 

Получаем примерно следующий результат:

Как верстать блоками?

Пример: (файл inc/css/style.css)

#header {
	float: left;
	width:	220px;
}
#trans {
	float:	left;
	width:	60%;
}
#menu {
	width:	220px;
	clear:	left;
	float:	left;
}
#content {
	width:	60%;
}
#footer {
	width:	90%;
}
 

Пример: (файл index.html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <link href="inc/css/style.css" type="text/css" rel="stylesheet" />
 <title>%TITLE%</title>
</head>
<body>
 <div id="header">%MAINLOGO%</div>
 <div id="trans">%TRANS%</div>
 <div id="menu">%LOGIN%</div>
 <div id="content">%CONTENT%</div>
 <div id="footer">%FOOTER%</div>
</body>
</html>
 

Получаем примерно следующий результат:

Не совсем удачный вариант, но помогает понять принцип работы блочной вёрстки. Существуют более кросс-платформенные и удобные решения.

Пример: (файл inc/css/style.css)

#header {
	width:		100%;
	float:		left;
}
#left_d {
	float:		left;
	width:		150px;
}
.menu {
	float:		left;
	width:		140px;
}
#content {
	float:		left;
	width:		70%;
	clear:		right;
}
#r_banners {
	overflow:	hidden;
	display:	inline-block;
	float:		right;
	width:		75px;
}

#footer {
	float:		left;
	width:		100%;
}
 

Пример: (файл index.html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta http-equiv="keywords" content="%KEYWORDS%" />
 <link href="inc/css/style.css" type="text/css" rel="stylesheet" />
 <title>%TITLE%</title>
</head>
<body>
 <div id="header"> <a href="index.php">%LOGO%</a></div>
 <div id="left_d">
	 <div class="menu">%MENU%</div>
	 <div class="menu">%LOGIN%</div>
	 <div class="menu">%U_LINKS%</div>
	 <div class="menu">%LCOMMENTS%</div>
 </div>
 <div id="content">%CONTENT%</div>
 <div id="r_banners">%BANNERS%</div>
 <div id="footer">%ADDRESS%</div>
</body>
</html>
 

Получаем примерно следующий результат:

Если статья была полезна, напишите об этом, будьте добры! Любые вопросы тоже можно задавать в комментариях.




(15 comments) - (Post a new comment)


[info]sparkovich
2008-03-18 06:10 am UTC (link)
полезно, принцип блочной верстки понятен. спасибо.

(Reply to this) (Thread)


[info]warlockfx
2008-03-18 06:13 am UTC (link)
Спасибо за комментарий! Рад, что понятно.

(Reply to this) (Parent)

Хорошая статья
(Anonymous)
2008-03-18 12:09 pm UTC (link)
Спасибо за статью. Все просто и понятно. Хоть я и не дизайнер, но все равно было интересно.
Петков Дима

(Reply to this) (Thread)

Re: Хорошая статья
[info]warlockfx
2008-03-19 03:32 am UTC (link)
Это хорошо. В таком случае продолжаем серию статей…

(Reply to this) (Parent)


[info]theholyghost_
2008-03-18 04:26 pm UTC (link)
ооооо!!!!

(Reply to this) (Thread)


[info]warlockfx
2008-03-19 03:33 am UTC (link)
Это расценивать как пять кругов?

(Reply to this) (Parent)


(Anonymous)
2008-04-12 04:10 am UTC (link)
Спасибо статья помогла, я недавно устроился верстальщиком, и встала проблема как верстать, всегда думал что таблицами ловчее, но оказалось что не так, респект за пост.

(Reply to this)


(Anonymous)
2008-08-06 03:27 pm UTC (link)
замечательная статья))) Долго не могла понять принцип верстки с помощью CSS, а тут за пару минут разобралась. Просто и доступно;)

(Reply to this) (Thread)


[info]warlockfx
2008-08-07 02:59 am UTC (link)
На здоровье, незнакомка!

(Reply to this) (Parent)


[info]_serzhik_
2009-03-22 11:55 pm UTC (link)
Фуф, хоть кто-то объяснил )

(Reply to this) (Thread)


[info]warlockfx
2009-03-23 02:45 am UTC (link)
На здоровье! Рад, что пришлась статья полезной.

(Reply to this) (Parent)

Спасибо
(Anonymous)
2009-07-08 12:35 pm UTC (link)
Благодарю. То, что нужно.

(Reply to this) (Thread)

Re: Спасибо
[info]warlockfx
2009-07-09 03:35 am UTC (link)
На здоровье. Пользуйтесь!

(Reply to this) (Parent)


(Anonymous)
2009-09-17 03:04 pm UTC (link)
просто и понятно :)

(Reply to this) (Thread)


[info]warlockfx
2009-09-18 03:25 am UTC (link)
Спасибо!

(Reply to this) (Parent)


(15 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…