Искусство разметки
Garrett Dimon, 15 апреля 2007
Разметка это основа представления сайта, в той или иной степени она взаимосвязана с дизайном, контентом, аксессибилити, CSS и JavaScript. Качество разметки влияет на качество связанного с ней кода, и издержки на его разработку и поддержку. Может быть, вы и так неплохо создаете разметку, но, следуя советам этой статьи, вы сможете подняться на новый уровень.
Качественная разработка разметки это хорошие инвестиции в программную часть сайта. Легко создавать и поддерживать код, который интегрируется с чистой и простой разметкой, CSS может быть изящным, JavaScript корректным. Вы сделаете существенный шаг в улучшении аксессибилити. Возможно, получите дополнительный трафик с поисковиков. Сейчас самое время понять, что разметка это искусство и уделять ей любовь и время, которые она заслуживает.
Упрощайте
Прежде чем мы перейдем к следующим шагам нам нужно провести хорошую уборку. Чем меньше строк содержит разметка, тем меньше мест, где может скрываться ошибка и тем проще вам будет в ней ориентироваться спустя некоторое время. Как и в любом другом деле, простота это инвестиция, которую стоит сделать.
Правило 1: Упрощайте, упрощайте, упрощайте.
Лучший способ упростить вашу разметку это убрать все лишнее и несущественное. Это включает множество элементов, таких как табличная разметка, встроенные стили или JavaScript. В современной разметке этим элементам нет места. Их должны заменить адаптивные методы и CSS.
Начнем с разметки таблицами, которая должна быть абсолютно исключена. Она сложна для чтения, увеличивает размер страницы, создает проблемы аксессибилити, не позволяет сделать разметку семантической.
Правило 2: Не используйте таблицы для разметки.
Мы избавились от таблиц, но еще остались элементы, которые нужно удалить это встроенные стили, теги font, strike, s и все другие теги которые отвечают за оформление, такие как чисто декоративные изображения или символы.
Стоит обратить внимание на декоративные изображения. Если вы используете изображения, которые важны только для оформления и не содержат смысловой нагрузки, они должны быть размещены с помощью CSS как фоновые изображения, это помогает убрать необязательные элементы и разделить представление и информацию. Конечно изображения содержащие информацию, такие как диаграммы, графики, фотографии товаров в интернет магазине должны быть включены в разметку.
Правило 3: Разметка должна быть семантической. Необходимо исключить все элементы, которые контролируют отображение.
Самый большой враг хорошей разметки это встроенный JavaScript. Он делает ее плохо читаемой, что создает множество темных уголков, где могут скрываться ошибки. Если этого аргумента вам недостаточно, тогда вспомните о том, что беспорядок, который вносят встроенные скрипты в разметку, может увеличить цену разработки и поддержки.
Правило 4: Исключите использование встроенных скриптов, в том числе обработчиков событий.
По началу это может показаться странным, но я вас уверяю, это лучший способ использования скриптов. Мы можем поместить все скрипты во внешние файлы и использовать функции getElementById и getElementsByTagName, чтобы работать с необходимыми нам элементами документа. Создание новых элементов, установка обработчиков событий, удаление существующих элементов и любые другие действия должны выполняться во внешних файлах скриптов, чтобы разметка была чистой и простой.
Зная немного о прогрессивном улучшении и имея хорошие знания DOM, мы можем до посинения добавлять скрипты без ущерба для разметки, потому что мы следуем хорошему правилу отделения структуры от поведения. Более глубокое раскрытие деталей прогрессивного улучшения находится за пределами этой статьи, но на эту тему есть достаточно много хороших статей. Кроме вынесения скриптов во внешние файлы столь же важно контролировать их качество и чистоту.
Теперь наша разметка относительно чиста. Мы удалили старинные таблицы, избавились от декораций и теперь можем перейти к более серьезным доработкам.
Будьте внимательны. Разметка должна быть на своем месте.
Если уж мы начали говорить о том, что не стоит помещать скрипты в разметку, не нужно забывать и о том, что обратное тоже верно. Поддержка может стать кошмаром, если, часть разметки скрыта в файлах скриптов. Это очень опасный способ разделения поведения и структуры, который создает много ловушек для разработчиков и поддержки.
То же самое относится и к контенту. Если в скриптах скрыт контент, кроме усложнения поддержки возникают большие проблемы аксессибилити. Я не говорю того, что разметка или контент не должны располагаться в скриптах ни при каких условиях, но если вы поступаете так, вы должны быть внимательны и хорошо представлять последствия ваших действий.
Правило 5: Избегайте размещения разметки в скриптах.
Правило 6: Избегайте размещения контента в скриптах.
Размещение контента или разметки в скриптах это скелет в шкафу, нельзя гарантировать, что никто не откроет ваш шкаф с сюрпризом, дважды подумайте, прежде чем применять такие решения.
Давайте элементам обдуманные названия
Теперь мы знаем, что разметка не должна содержать элементов ответственных за оформление или поведение, и знаем, что их следует размещать в отдельных файлах. Разметка является своеобразным хабом для других технологий, и нужно подумать, как связать ее с JavaScript и CSS.
Конечно, мы можем просто присваивать элементам различные идентификаторы и классы, чтобы иметь возможность управлять их свойствами напрямую, но это приведет к большому количеству лишнего кода.
CSS предоставляет нам большие возможности в выборе селекторов, используя сложные селекторы, мы можем сократить количество идентификаторов и классов до минимума, например, можно использовать селектор #primary div h3 вместо присваивания идентификатора #testimonials элементу h3. Конечно, это несколько усложняет код CSS, но поскольку наш фундамент именно разметка то было бы логично вынести сложные элементы в более подходящие им места.
Правило 7: Старайтесь избегать использования лишних классов или идентификаторов.
Теперь, когда мы свели количество классов и идентификаторов к минимуму, необходимо сделать следующий шаг для улучшения качества разметки, это правильные имена. Мы должны исключить имена классов и идентификаторов, которые отражают оформление элементов, потому что если мы назовем элемент right-col, вполне возможно, что после изменения CSS он будет находиться с левой стороны и название потеряет свою актуальность, что может привести к затруднениям при поддержке в будущем.
Правило 8: Имена классов и идентификаторов, должны отражать содержание или назначение элементов, а не их оформление.
Отлично, мы значительно продвинулись в понимании разметки, но нужно учитывать еще один аспект при выборе классов и идентификаторов, необходимо, уделять некоторое время, чтобы дать им хорошие обдуманные имена. Если использовать имена x1 или a3, вполне возможно, наступит момент, когда об этом придется пожалеть. Следует потратить совсем немного времени и дать элементам имена вроде summary или code.
Правило 10: Имена классов и идентификаторов должны быть осмысленными.
Знайте язык разметки и его возможности
Если уж мы начали говорить об именах классов и идентификаторов, то нельзя не упомянуть о микроформатах, при использовании микроформатов не нужно думать, как построить названия различных элементов, таких как события, адреса, обзоры. Большое преимущество в том, что микроформаты открытый стандарт его знают многие, это упростит восприятие разметки другими разработчиками.
Правило 10: Используйте микроформаты
Вы должны знать все доступные элементы HTML, чтобы быть уверенными, что используете наиболее подходящий в каждом случае.
Правило 11: Изучите все элементы HTML.
Кроме того, что вы должны знать все доступные элементы вы должны, знать какие из них устарели и должны быть заменены другими. Например, элемент font устарел, а типографику теперь нужно настраивать с помощью CSS. Элемент strike, который придает тексту зачеркнутый вид, устарел и должен быть заменен элементами del и ins, которые имеют более строгое семантическое значение.
Правило 12: Не используйте устаревшие или неуместные элементы.
Правило 13: Используйте соответствующие семантические элементы, для каждого типа данных.
К несчастью знание всех возможных элементов и понимание их особенностей еще не значит, что они будут работать во всех браузерах. Так наш хороший друг IE6 не поддерживает элементы abbr или q, таким образом, эти элементы не лучший выбор, даже если они и подходят по смыслу.
Правило 14: Знайте особенности браузеров и нюансы их работы.
Пока мы говорили исключительно об элементах, но это только пол дела. Каждый элемент имеет множество атрибутов, которые придают дополнительную функциональность разметке. Очень распространена недооценка и непонимание атрибутов rel, rev, alt, и title, при правильном использовании эти они могут донести до посетителя важную информацию.
Правило 15: Знайте и понимайте все атрибуты HTML.
Мы определили основные правила, которые позволят вам создавать качественную разметку, теперь обратимся к некоторым специфическим вопросам, чтобы придать вашей разметке блеск.
Детали решают все
Как и в любом ремесле, базовые знания создают основу, но только внимание к деталям может поднять вас на новый уровень мастерства. Первая деталь, которую мы обсудим это порядок исходного кода. Несмотря на то, что CSS позволяет нам контролировать отображение элементов независимо от их расположения в исходном коде, правильный порядок элементов и хорошая логическая иерархия страницы, имеют очень большое значение для аксессибилити.
Правило 16: Элементы должны располагаться в логическом порядке.
Конечно, мы хотим, чтобы контент как можно более незаметно интегрировался с разметкой, один из лучших способов такой интеграции это использование хорошего текста для ссылок. Текст, используемый для ссылок, должен быть особенно тщательно продуман, хорошо подобранный текст ссылок оказывает большое влияние на юзабилити, аксессибилити и поисковую оптимизацию. Потратьте немного больше времени, для того чтобы текст каждой ссылки как можно более точно отражал содержание страницы, с которой она связана.
Правило 17: Используйте простые и понятные ссылки.
Атрибут alt это еще одна возможность для улучшения качества вашей разметки. Создание хорошего альтернативного текста это достаточно сложная задача, простого описания изображения часто недостаточно, хотя оно обязательно должно присутствовать.
Правило 18: Создавайте хороший и полезный альтернативный текст.
Заголовки это еще одна сложная область разметки. Энди Будд указывает, на то, что заголовок должен содержать краткое описание темы раздела, к которому он относится, эта информация могла бы использоваться браузерами для автоматического описания содержания страницы. Он считает, что заголовки должны в первую очередь использоваться для описания содержимого страницы, а не для стилистической информации. Если удалить весь контент страницы и оставить только заголовки, они должны передать пользователю смысл ее содержания. Если этого не происходит, возможно, мы недостаточно хорошо подумали над заголовками.
Правило 19: Используйте заголовки, чтобы передать пользователю смысл содержимого страницы.
Особенно хорошо преимущества чистой и семантической разметки видны, при создании форм. С помощью элемента label, мы делаем формы более доступными и понятными. Дополнительные преимущества мы можем получить, использую одно поле ввода вместо трех для таких данных как дата или номер телефона. Не видите никаких преимуществ? Мы имеем меньше кода, большую гибкость для поддержки различных национальных форматов, и улучшаем аксессибилити, поскольку можем использовать элемент label.
Давайте представим, что у нас есть один элемент label для номера телефона, но три отдельных поля ввода, label может ссылаться только на одно из полей ввода, а доступность остальных полей становиться минимальной. Используя одно поле ввода, мы можем легко указать его предназначение с помощью элемента label, к тому же получаем меньше кода. Конечно формы это столь обширная тема, что нужна еще одна статья, чтобы описать все тонкости их создания.
Правило 20: Создавайте понятные и доступные формы.
После форм таблицы кажутся довольно простой, но упускаемой многими темой. Сейчас я говорю не о тех таблицах, которые ошибочно используются для разметки, а о тех, которые используются для форматирования данных и являются очень мощным и удобным инструментом. Чтобы правильно использовать этот инструмент необходимо ознакомиться со спецификацией таблиц. В нашем распоряжении элементы tbody, thead, tfoot и множество атрибутов которые помогают семантически верно форматировать различные данные. Как и формы, таблицы достойны отдельной, посвященной только им, статьи.
Правило 21: Создавайте семантически насыщенные таблицы данных.
Подведем итог
Практически все технологии, используемые при создании сайта, взаимодействуют с разметкой. Конечно, создание хорошей разметки это не чрезвычайно сложная задача, но требующая внимания к деталям и знания некоторых тонкостей.
Полезные ресурсы
Приведу пару ссылок, которые могут быть очень полезны, для желающих повысить свой уровень в создании HTML документов.

















Игорь 16 апреля, 2007 23:18 #
Правило 2: Не используйте таблицы для разметки.
Это правило сейчас так активно обсуждается на Западе. Русский web переходит (перешёл?) на xhtml+css разметку, пишет валидируемый код, борется за семантику, пытается верстать блоками и, в свете этих событий, даже страшно представить, если кто-то скажет о плюсах табличной верстки. Его наверное закидают камнями, благо виртуальными. «Когда же продолжали спрашивать Его, Он, восклонившись, сказал им: кто из вас без греха, первый брось на нее камень.» Для блогов, некоммерческих проектов и др. ресурсов, рассчитанных на вякого рода энтузиастов блочная верстка теряет все минусы.
—Хочешь тусоваться с нами?
—Поставь новый броузер!
Но когда прожект коммерческий клиент в праве требовать оплаченый дизайн на любой платформе при любом разрешении. Тут на помощь приходит табличная верстка. Конечно можно ипользовать хаки блочной модели и javascript, но я не считаю это более мудрым решением
Игорь 16 апреля, 2007 23:20 #
Простите за орфографию и типографику
FAST HTML 18 апреля, 2007 21:35 #
Табличная верстка это и есть один большой хак :)
Необходимость использования которого возникает все реже.
Шильгия 12 мая, 2007 9:29 #
Игорь, скажите пожалуйста.
"любая платформа с любым разрешением" - это неграмотное составление ТЗ. Наверняка Вы имели в виду настольные компьютеры, но не думали в этот момент о кпк. Сравните отображение табличной вёрстки в мобильных версиях Internet Explorer и Opera, чтобы понять, о чём я.
Ну а если брать настольные компьютеры с распространёнными разрешениями от 800*600 до 1600*1200 и распространёнными браузерами (IE6/7, FF1.5/2, Opera8/9, Konqueror, Safari), то что может быть такого, трудноосуществимого в блочной вёрстке, что имеет смысл делать таблицами? Мне вот это просто интересно.
Talex 29 мая, 2007 14:53 #
Основные претензии обычно к 8-ой опере. остальное можно сделать...
больше всего проблем именно с ней...
GribNick 19 июня, 2007 11:12 #
Хорошая конечно статья, но это идеал, который в реальных условиях как правило недостижим.
Если представить себе не блог или какой то контентно ориентированный сайт средних размеров с простой структурой, а например довольно сложный сервис с массой джаваскриптовых фишечек в стиле web2.0
то его проектирование и реализация с учетом всех описанных выше правил приведет к огромным трудозатратам и срокам. И пока вы будете пилить "полностью валидный" сервис... оценить весь пафос которого смогут только профессионалы, ваши конкуренты побыстрому сделают такой же сервис только со значительными отступлениями от этих правил, которые конечные пользователи все равно не увидят и будут зарабатывать деньги, пока вы будете "творить"
Nina 24 сентября, 2007 3:58 #
to: Шильгия
> что может быть такого, трудноосуществимого в блочной вёрстке, что
> имеет смысл делать таблицами?
Вот, например, проблема: растянуть второй блок на весь экран, т.е на (100% высоты экрана - 100px)
первый блок
второй блок
Достаточно часто встречается, без js не решается, да и с js решение проблемное. А с таблицей высотой 100% - нет проблем в html 4.01
Nina 24 сентября, 2007 3:59 #
Ох, весь мой html-код вырезан. Смысл задачи в сообщении выше был: есть два блока, у верхнего высота 100px, нижний нужно растянуть до конца экрана по высоте.
George 27 ноября, 2007 11:45 #
Слухи о смерти таблиц сильно преувеличены.....