10 признаков профессиональной html-верстки

Материал ориентирован на верстальщиков начального и среднего уровня, и на заказчиков, желающих выяснить технический уровень сдаваемых им сверстанных страниц.

Нередко встречаю в сети новые сайты, сверстанные по всем «правилам» конца прошлого века: табличная верстка, фоновые картинки, вставленные с помощью тега <img>, обильное использование тега <font>, размеров контентного шрифта в пикселях и пр. Уверен, что (за редким исключением) подобные архаизмы нужно забывать.

Я не считаю себя профессионалом в области верстки, однако, занимаюсь ею давно и серьезно (из все сделанные мною сайты верстал лично), поэтому вижу явные ляпы и откровенно раздолбайский подход со стороны некоторых, с позволения сказать, сайтоделов.
К примеру, в конце 2007 года, я делал редизайн сайта karex. ru и, взглянув на его верстку, пришел в ужас: такой «грязи» с таблицами и тегами <font> мне не приходилось встречать ни до, ни после.

Итак, каковы же признаки профессиональной верстки?

DIV‑ная структура документа

Когда‑то было действительно удобно использовать таблицы для разметки HTML‑документа – блочная разметка просто не позволяла реализовать некоторые макеты. Но с появлением каскадных таблиц стилей (CSS) времена табличной верстки прошли и сейчас верстать таблицами – признак ретроградности.

Главные минусы табличной верстки:

  1. избыточность кода,
  2. плохая ужасная читаемость кода,
  3. проблемы просмотра с экранов мобильных устройств,
  4. жесткая очередность загрузки страницы

Таблицы включены в спецификацию HTML для представления табличных данных, структура документа должна создаваться с помощью блоков <div>. Исключения редки, в моей практике они не встречались.

Пример простейшей табличной верстки двухколоночного макета:

<table width="100%" border="0" cellspacing="0" cellpadding="0">
 <tr  colspan="2">
   <td class="header" colspan="2">Шапочка</td>
 </tr>
 <tr>
   <td class="content">Контент</td>
   <td class="sidebar">Сайдбар</td>
 </tr>
 <tr  colspan="2">
   <td class="footer" colspan="2">Подвал с крысами</td>
 </tr>
</table>

Пример того же макета, сверстанного блоками:

<div id="header">Шапочка</div>
<div id="wrapper">
 <div id="content">Контент</div>
 <div id="sidebar">Сайдбар</div>
</div>
<div id="footer">Подвал без крыс</div>

Хорошо видна разница в объеме кода и его читаемости.

В последнем случае, совершенно не важно – располагается сайдбар (навигация, облако тегов, реклама и пр.) справа или слева от контента, в любом случае, сначала загрузится содержимое контентного блока.

Семантически верная структура страниц

Это касается HTML‑документа в общем (см. первичную блочную структуру ниже), но более всего актуально для контентной части. Аккуратное использование тегов заголовков, параграфов, списков важно как для адекватной индексации поисковыми системами, так и для удобства конечного пользователя – при отключенном CSS и на экранах мобильных устройств сайт будет выглядеть ясно и логично.

Минимум кода

Чем проще и короче написан HTML‑код, тем он профессиональнее. (Сделаем поправку на функционал и настраиваемость этого кода.)

О сокращении объема HTML‑кода можно написать отдельную статью, я ограничусь одним, наиболее показательным, примером.

Рассмотрим участок HTML:

<div id="category">
 <h1 class="category-header">Рубрики</h1>
  <p class="left">Это облако рубрик</p>
  <ul class="category–list">
    <li><a class="category–link" href="#">кукловодство</a></li>
    <li><a class="category–link" href="#">танкостроение</a></li>
    <li><a class="category–link" href="#">добыча нефти</a></li>
    </ul>
</div>

Полужирным шрифтом в примере выделены лишние элементы.

Классы для тегов <h1>, <p>, <ul> и <a> в этом блоке введены для придания соответствующим элементам какого‑то своего оформления средствами CSS, однако это – лишний код, написанный верстальщиком, плохо знакомым с  CSS.

Для приведенного примера, стиль оформления ссылок в списке может выглядеть так:

.category–link {свойства}

А если написать короткую версию HTML:

<div id="category">
 <h1>Рубрики</h1>
  <p>Это облако рубрик</p>
  <ul>
    <li><a href="#">кукловодство</a></li>
    <li><a href="#">танкостроение</a></li>
    <li><a href="#">добыча нефти</a></li>
  </ul>
</div>

то стиль будет выглядеть так:

#category li a {свойства}

Это может показаться мелочью, но подобный прием может на треть сократить объем HTML при крайне незначительном увеличении объема CSS, что отразится на скорости загрузки страницы самым позитивным образом.

Четкие названия структурных блоков

Некоторые считают это хорошим тоном, но я уверен, что логичные и аккуратные названия классов (идентификаторов) блоков, составляющих структуру документа – неотъемлемый признак профессиональной верстки.

Почти все сайты имеют строго выделенные части:

  1. «Шапка» (логотип и пр.)
  2. Контент (собственно, содержимое страницы)
  3. Сайдбар (навигация, реклама и прочие второстепенные блоки)
  4. «Подвал» (копирайты, счетчики, условия использования информации и пр.)

Распространенность подобных структур послужила поводом для введения в следующую (5‑ю) версию HTML таких тегов, как <header>, <footer> и некоторых других. А пока до использования 5‑й версии HTML еще далеко, признаком профессиональной верстки считается структура, подобная следующей:

<div id="header">Шапочка</div>
<div id="wrapper">
  <div id="content">Контент</div>
  <div id="sidebar">Сайдбар</div>
</div>
<div id="footer">Подвал</div>

где header – «шапка», footer – «подвал», wrapper – служебный блок, необходимый для управления выравниванием и объединения контентной и параконтентных частей. (Двухколоночная структура взята для примера, как наиболее распространенная на данный момент.)

Комментарии после закрывающих блочных тегов

В структуре документа нередко встречаются участки вида:

</div>
</div>
</div>

Даже если есть отбивка (пробелами, табами), бывает крайне трудно разобраться, какой <div> где закрывается. А любая модификация CMS или правка верстки требует таких знаний.

Решение простое: если один <div> включает (или может потенциально включать) большой участок кода, после закрывающего тега пишется комментарий, включающий названия класса или идентификатора блока. Например:

</div>
</div> <!-- /sidebar -->
</div> <!-- /wrapper -->

Правильный сброс float‑блоков

У блочной верстки множество плюсов, но есть и минусы. Самый главный из них связан с обтеканием элементов (блоков, имеющих свойства float: right или float: left). Если такие блоки сильно отличаются по высоте, то следующие за ними в потоке HTML‑документа элементы начинают обтекать один из блоков.

Для «сброса обтекания» часто используется следующий принцип:

<div id="content"> <!- родительский блок->
[… ]
<div style="float: left">некое содержимое</div>
<div style="float: left">другое содержимое</div>
<div style="clear: both"></div> <!-- «сбрасывающий» блок -->
[...]
</div> <!-- /content -->

То есть вставляется дополнительный «сбрасывающий» блочный элемент, предотвращающий смещение последующих элементов (в примере выделен полужирным).

Этот подход имеет право на существование только в одном случае – когда невозможно указать ширину родительского блока. Если же ширину родительского блока указать можно (единицы измерения значения не имеют), то короче и правильнее опустить «сбрасывающий» блок, а для родительского блока задать следующие CSS‑свойства:

#content {width: [ширина]; overflow: hidden}

Есть похожие техники, связанные с использованием псевдокласса :after или свойства height: 0 – несколько менее удобные и красивые, на мой взгляд.

Фоновые картинки вместо тегов <img>

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

Прописанные цвета фона

Бывают ситуации: дизайн предполагает общий белый фон и есть блок с фоновой картинкой темного цвета, а внутри этого блока есть ссылки, цвет которых – белый. В таком случае, пока картинка не загружена, ссылок не видно (белый на белом). А если пользователь отключил картинки, он вообще не увидит эти ссылки. Предположим, что сии ссылки – основная навигация по сайту, – пояснения нужны?

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

Использование спрайтов

Использование спрайтов при верстке описано в интернете не один десяток раз, однако имеет смысл дать ее краткое объяснение. Состоит данная техника в том, что используемые на сайте изображения размещаются в одном файле и, при использовании, позиционируются с помощью CSS.

К примеру, некая ссылка должна реагировать на наведение курсора сменой фоновой картинки. В этом случае, обе картинки (и та, которая видна сразу и та, которую видно только при наведении) помещаются в один файл с изображением – первая картинка вверху, вторая – внизу. В CSS ссылке прописывается «блочность» и фоновое изображение, выравненное по верхней стороне, а при наведении фоновое изображение выравнивается по нижней стороне. Соответственно, при наведении фоновая картинка меняется.

Эта техника позволяет сократить количество запросов к серверу, не использует JS (как традиционные rollover‑кнопки), сокращает объем HTML‑кода.

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

Отсутствие хаков

Это спорный пункт. Часто без хаков просто не обойтись, особенно для Internet Explorer 6 (божий дар хакера), но уверенность в том, что для IE просто нужно подключать отдельные CSS‑файлы не оставляет вашего покорного слугу.

IE 5. x уже потерял актуальность (по данным Mail.ru, версии 5.5 и ниже – около 1 %/. по W3Counter – все еще лучше), а вот для 6‑й и 7‑й версии, частенько, приходится подключать отдельные CSS‑файлы с исправлениями ошибок рендеринга в этих браузерах.

Автор считает наиболее правильным подключение стилей с указанием версии IE при помощи комментариев:

<!-[if lte IE 6]>
 <link rel="stylesheet" type="text/css" href="[адрес]/style_for_ie6.css"/>
<! [endif]->
<!-[if lte IE 7]>
 <link rel="stylesheet" type="text/css" href="[адрес]/style_for_ie7.css"/>
<! [endif]->

Полон ли приведенный список особенностей профессиональной верстки? Конечно, нет. Здесь я привел только самое, на мой взгляд, главное.


Связанные статьи

Комментарии (уже 23)

  1.  abaoaku (анонимно) (29.05.2008, 22:20)

    Недавно начала разбираться с див-ной версткой. Мозг скрипит, отвык.
    Совершенно непонятно, как сделать три или более колонок.
    Как?
    Ссылка на комментарий #1
    Ответить
  2.  Николай Громов (11.06.2008, 01:09)

    @ abaoaku (анонимно): три и более колонки можно сделать несколькими способами.

    для ознакомления рекомендую:
    http://www.dynamicdrive.com/style/layouts/category/C9/
    и
    http://blog.html.it/layoutgala/
    там - блочные модели на любой (или почти на любой) вкус. часто пользовался этими моделями в начале.
    Ссылка на комментарий #2
    Ответить
  3.  Арсен (анонимно) (12.06.2008, 17:21)

    Див вёрстака значительно сокращает обьём странице, чт конечно ускоряет её загрузку, и имеет ещё много приимуществ.
    Однако как страницы написанные с таким кодом будут отображаться в разных браузерах, в частносте в их старых версиях?
    Таблица хоть и имеет много недостатков однако гарантирует одинаковое отображение в разных версиях браузеров, в случае чёткого и правильного задания всех размеров элементов.
    Вообще статья очень интересная и полезная.
    Ссылка на комментарий #3
    Ответить
  4.  Николай Громов (12.06.2008, 23:39)

    @ Арсен (анонимно): посмотрите статистику по браузерам в инете и рунете.
    Дивная верстка будет хорошо и правильно отображаться в браузерах, выпущенных с 2001 года, включительно (убогий IE6, при правильном месте роста рук верстальщика, прекрасно отрабатывает дивы)

    таблица ничего описанного Вами не гарантирует.
    Ссылка на комментарий #4
    Ответить
  5.  Владимир (анонимно) (14.06.2008, 19:25)

    Да в последних версиях, да и віпущенніх 3-4 года назад дивы отображаются одинаково хорошо, а старые браузеры 90-х годов уже врядли у кого остались.
    Ссылка на комментарий #5
    Ответить
  6.  Николай Громов (14.06.2008, 20:32)

    @ Владимир (анонимно): по поводу того, какие браузеры сейчас в ходу, есть вполне нормальная статистика:
    http://www.w3counter.com/globalstats.php
    http://stat.yandex.ru/stats.xml?ReportID=2857&ProjectID=0%3f
    http://stat.mail.ru/?stat=useragents
    (и пр.)
    Ссылка на комментарий #6
    Ответить
  7.  prisoner (анонимно) (15.06.2008, 17:58)

    Сохранил статью в del.isio.us. Сам разбираюсь с дивами с удовольствием, в процессе работы возник такой вопрос, может, кто подскажет. на главной странице есть див с id="content", в который аяксом загружаются странички. На этих страничках тоже есть ссылки, которые хотелось бы отобразить в этом же диве. Как это реализовать? Использую готовое решение ajaxtabs вот отсюда http://www.dynamicdrive.com/
    Ссылка на комментарий #7
    Ответить
  8.  Николай Громов (15.06.2008, 23:26)

    @ prisoner (анонимно): Лично я вопрос не понял. ведь ссылки уже отображаются внутри DIV-а с идентификатором...
    Если имеется в виду стилистическое управления видом этих ссылок, то должно быть достаточно прописать соответствующие стили в CSS типа:
    #content a {правила}
    или:
    #content [еще какие то теги, в которые вложена ссылка] a {правила}
    Ссылка на комментарий #8
    Ответить
  9.  Сергей (анонимно) (16.06.2008, 16:12)

    А как построить вот таблицу из двух рядов и трёх столбцов причём средний столбец должен быть шире другх или это тока таблицей реализовать можно??
    Ссылка на комментарий #9
    Ответить
  10.  Николай Громов (16.06.2008, 16:21)

    @ Сергей (анонимно): Сергей, во втором комментарии есть ссылки на работающие макеты. Среди них есть и тот, что Вы описали, причем как в тянущимся варианте, так и в фиксированном.
    Ссылка на комментарий #10
    Ответить
  11.  Webman (анонимно) (10.07.2008, 23:22)

    Отличная статья. Огромное спасибо. Требую продолжения.
    Ссылка на комментарий #11
    Ответить
  12.  Максим Покровский (анонимно) (28.07.2008, 19:05)

    <div style=”clear:both”></div>
    Не нужно это.
    Ссылка на комментарий #12
    Ответить
  13.  Николай Громов (31.07.2008, 23:31)

    @ Максим Покровский (анонимно): после флоат-блоков, частенько, нижеследующее содержимое съезжает, поэтому — нужно.

    поправил — сделал оба флоата левыми.
    Ссылка на комментарий #13
    Ответить
  14.  михаил (анонимно) (12.09.2008, 16:00)

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

    а вот с rollover - не думкал о таком варианте, хорошо придумано, раньше использовал яву, теперь css, попробуем и такой вариант.
    Ссылка на комментарий #14
    Ответить
  15.  maddogrts (анонимно) (11.10.2008, 19:39)

    Выражаю своё мнение. Статья конечно несет в себе правильные мысли, но совершенно не отвечает заголовку о профессионализме верстки.
    Основная концепция при подходе к рассмотрению качества верстки достаточна проста и выражается в 3 принципах:

    1) Масштабирование верстки (на вашем сайте кстати у вас с этим проблемы)
    2) Качество и оптимизация изображений
    3) Удобство внедрения доп элементов и интеграции с различными системами (с этим у вас тоже проблемы, благодаря неправильному использованию reset)

    В общем итог такой несмотря на то что верстаете вы хорошо, слово профессионализм здесь не уместен. Даже не так, ставя в пример что то, необходимо добиться того чтобы представленный пример отвечал высоким требованиям.
    Ссылка на комментарий #15
    Ответить
  16.  Константин (анонимно) (28.03.2009, 00:35)

    за вторую ссылку (с примерами различных вариантов размещения элементов) - огромное спасибо.

    .... а на чсёт "главных минусов табличной верстки" ....
    не был бы настолько категоричен.
    каждому решению есть свои применения. ;)
    Ссылка на комментарий #16
    Ответить
  17.  Нельзя (анонимно) (07.09.2009, 12:51)

    Мне понравилась мысль про "спрайты", но остальное в основном спорно. div-ы хороши именно тем, что они div-ы, а таблицы тем что таблицы. Говорить, что одно лучше или хуже непрофессионально само по себе, и можно только в применении к конкретным задачам. Имхо, наилучший вариант - смешанная верстка. Div-ы, например, хреново справляются с сужением содержимого или отсутвием стилей (без которых все содержимое нечитабельно, однако содержимое куда важнее оформления), таблица гарантирует структурность.

    Легкость и читаемость кода определяется прямостью рук. В первом примере вы заботливо прописали все параметры к таблице, но забыли указать стили для div-ов. Зачастую код от простой таблички будет куда нагляднее, чем блоки со стилями (особенно, если css не подгрузился).

    Комментарии к блокам кому-то нужны, а кому-то нет. Признаком професииональной верстки это назвать нельзя.

    В общем, будьте объективны, измените название статьи (например, на "10 приемов html-верстки") - и люди к ней потянутся :)
    Ссылка на комментарий #17
    Ответить
  18.  lavrik (анонимно) (30.11.2009, 14:28)

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

    Зря вы про неграмотность верстальщика при составлении <li><a class="blabla"> Во-первых, это может быть глобальный стиль. Во-вторых, если необходимо будет добавить в список еще пункт, отображение которого сильно отличается от соседей, верстальщику придется искать общий класс для всех пунктов, писать новый, затирать в нем существующие свойства, тестировать на кроссбраузерность.

    Ссылка на комментарий #18
    Ответить
  19.  Николай Громов (30.11.2009, 14:39)

    @ lavrik (анонимно):
    погорячился, видимо... :)
    Ссылка на комментарий #19
    Ответить
  20.  Аноним (анонимно) (31.03.2010, 00:02)

    Все вышнаписанное повергаетсяв прах простым доводом:

    Табличная верстка и теги ИМдЖ выигрывают в SEO ... при прочих равных конечно.

    А ДИВ-верстка со стадом ЦСС под все случаи жизни сооответственно проигрывает и требует сильно больших внешних факторов для подьема в видимую выдачу поисковиков (всех на 2010 год)
    Ссылка на комментарий #20
    Ответить
  21.  Николай Громов (07.04.2010, 23:27)

    @ Аноним (анонимно):
    пожалуй, разбивало бы, если б довод соответствовал реальности.
    в реальности же, Вы написали несусветную чушь: табличная верстка и вставка оформления картинками сильно затрудняет адекватную индексацию и проигрывает в этом плане.
    Ссылка на комментарий #21
    Ответить
  22.  motoxa (анонимно) (06.07.2010, 21:24)

    Дубль два (привет модератору). Попробую ответить более развёрнуто. Автор пишет: «С появлением каскадных таблиц стилей (CSS)…», «времена табличной верстки прошли…». Речь, конечно, о разрезании дизайна на много-много <img>, вставку их в многочисленные <td colspan="3" rowspan="2"> и распорки в виде картинок вместо margin и padding. Разумеется, эти времена прошли. Но тупо заменять TABLE на DIV, используя хаки, уловки, display: table и прочую нечисть только ради того, чтобы, не дай Бог, не использовать ни одного элемента TABLE — вот это бред. Таблицы не менее семантичны, уникальны по своим свойствам (вертикальное выравнивание, ширина по содержимому) и никем не запрещены. Рекомендовано только не использовать их для разметки без лишней необходимости. И ещё, разделение представления и содержания — это, например, XSLT и XML, но никак не CSS и HTML. HTML обладает свойствами представления (разметки) по определению. Бессодержительные <div class="clear"> или <div class="round_corner"> тому пример. Читайта мануалы и не делайте из религию из ничего
    Ссылка на комментарий #22
    Ответить
  23.  Николай Громов (07.07.2010, 01:18)

    знатока по яйцам видно.
    из религию из ничего не делаю, конечно.
    Ссылка на комментарий #23
    Ответить

Ваш комментарий

Комментарий будет опубликован после проверки.



При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где можно изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.







(обязательно)


Дополнительно

RSS-подписка

В этом блоге две категории