Как писать эффективный XHTML/CSS код

Если мы с вами хоть немного чем-то похожи и работаете вы много (working like crazy мне выражение нравится) или же ваше хобби отнимает все больше и больше времени, — рано или поздно вы столкнетесь с ситуацией, которая фигурально описывается отличной “женской” поговоркой, — “Носить нечего, вешать некуда”. XHTML занимает уже 5 “экранов”, CSS таблица стилей “весит” килобайт 20, а результат на экране монитора вам просто не нравится. Но спешу вас обрадовать. Такую проблему достаточно просто “разрулить”, если выработать в себе привычку писать эффективный код.

Тщательно все спланировать

Независимо от того, работаете ли вы полностью самостоятельно (что, безусловно, сложнее организационно, но легче технически) или работаете в команде, — самым лучшим средством планирования, лично для меня, является лист формата А4 и карандаш. Нарисовал страничку — поделил на предполагаемые основные зоны (div’ы), а их, в свою очередь, если нужно поделил на подзоны, визуально выделил каждую и пронумеровал. Кто учился в институте — знает как делать эскизы, главное, это чтобы вам было понятно (я исхожу из того, что эти эскизы нужны только для вас, и не есть частью документации по текущему проекту).

Отложите этот лист недалеко. Возьмите другой для вторичной страницы. Повторите процедуру, но уже учитывая пронумерованные блоки на главной странице. Очевидно, что на первой и второй странице будут блоки, которые совпадают, поэтому у них должен быть совпадающий номер. Я очень надеюсь, что суть вам понятна — нужно найти и обозначить одни и теже функциональные блоки в будущем XHTML коде веб-страниц сайта. Если есть страницы более глубокие - повторяйте эту процедуру до тех пор, пока не закончите.

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

Грамотно присвоить имена элементам XHTML структуры

Фокус в том, чтобы правильно “обозвать” пронумерованные вами ранее функциональные блоки. Сразу скажу, — пренебрегать этим просто глупо. Функциональным элементам структуры нужно присваивать функциональные имена. Это значит, что имена нужно присваивать основываясь на том, что данный элемент структуры делает, а не на том, как он сейчас выглядит. И тогда, даже через год, вы сможете быстро сообразить, что это за элемент и зачем он нужен на странице.

Простой пример. Можно назвать боковую панель redsidebar, а можно и outsidelinkblock. Как называть блоки — дело ваше, главное, чтобы это было вам понятно и носило функциональную окраску. Тогда ваша структура реально не зависит от презентации — дизайна и может иметь таких дизайнов сколько угодно. К тому же, пару раз воспользовавшись этой методикой вы, скорее всего, станете присваивать одинаковые имена одинаковым функциональным блокам на разных сайтах. Если это произошло — ваша эффективность как кодера возросла. Вот парочка интересных ссылок о том, как люди называют свои блоки в HTML структуре:

What’s in a name
What’s in a name (pt2)

А так же:

Use class with semantics in mind
Structural Naming

Компетентно использовать id и class’ы

Атрибут id или уникальный идентификатор, в отличие от атрибута class, может быть включен в код конкретной валидной страницы только один раз, для этого (идентификации элемента) и предназначен. Любая веб-страница имеет свой набор уникальных (единственных для каждой страницы) элементов, например #global-navigation, #search и так далее. Также, надо помнить, что у конкретного HTML элемента может быть только один id. А вот классов может быть несколько (сколько угодно), поэтому их можно “сцеплять”, как, например, в следующем коде:
<ul id="lookalsolinks" class="intext bullets outside"></ul>

Здесь я (зачем-то, для примера) захотел добавить буллеты (.bullets) к списку ссылок в тексте (.intext) и указать визуально признак того, что это внешниие ссылки, например прописав картинку в классе outside. Конечно, все это можно сделать и в одном классе, но тогда у меня не будет возможности манипулировать этими параметрами. Обращаю ваше внимание на то, что я не призываю плодить ненужные классы, наоборот, я предлагаю использовать возможности CSS эффективно и “гибко”.

Использовать CSS манипуляции с XHTML элементом body

Присваивая конкретный класс элементу body на конкретной странице вы обретаете возможность кардинально сменить CSS параметры как всей страницы в целом, так и отдельного элемента на такой странице. Этот класс работает как переключатель. Освоив эту технику вы сможете менять дизайн каждой отдельной страницы и “подсвечивать” навигацию, например текущее расположение пользователя на сайте. Все просто как 2×2:
body {background:#fff;}
body.about {background:#fff url(aboutus.jpg) top right no-repeat;}

И продолжая эту тему, подсвечиваем (изменяем стиль по умолчанию на другой) в меню ссылку “О Нас” на странице “О нас”, указывая тем самым “местоположение” пользователю на сайте:
body.about ul#navigation a#aboutuslink {color:#f50;}

Естественно, вы можете писать какой-угодно стиль, изменяя все, что угодно, а не только цвет. Три строчки кода - и 2 решенные серьезные задачи :) — альтернативный дизайн страницы “О нас” и улучшение usability сайта. Ну а что вы хотите? Современный CSS дизайн.

Использовать CSS каскад

Вот как использую его я. В коде страницы я прикрепляю css файл для отображения на экране компьютера (media screen). Этот файл называю почти всегда screen.css В этом файле содержится следующий код:
@import url(layout.css);
@import url(typo.css);
@import url(visuals.css);

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

Использовать стандартные возможности CSS по полной программе

Никита Вакорин, from Umade.ru замечательно на мой взгляд перевел статьи Роджера Йохансена (Roger Johansson) CSS tips and tricks, для начинающего CSS дизайнера — “источник мудрости и вдохновения”, переводы прочесть просто необходимо, вот они:

CSS: советы и приёмы, часть 1
CSS советы и приёмы, часть 2

Подводя итог, в очередной раз хочу напомнить, что CSS это не “rocket science” и все зависит от практики и желания. Чем быстрее человек освоит CSS, тем быстрее его работа станет похожа на творчество, а не на тупое переписывание табличных тегов.

9 Responses to “Как писать эффективный XHTML/CSS код”

  1. Гугнин Says:

    Замечательная статья для тех, кто пришел в веб-дизайн не из программирования.

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

  2. andrey.stefanenko Says:

    Спасибо, Юрий.
    Всегда очень приятно осознавать, что три-четыре часа, потраченные на написание постинга принесли кому-то пользу.
    Особенно радует вторая часть Вашего комментария :) Чем больше будет “грамотных кодеров”, - тем быстрее “наш Вэб” станет намного лучше и эффективнее.

  3. Дмитрий Сергеев Says:

    Я всё это слышал не раз. Но вот результаты всё равно радуют далеко не всегда. Сложно перейти от понимания к реализации.

  4. Leo Says:

    Спасибо. Интересно написано. Уже долгое время пытаюсь заставить себя как можно более точно соблюдать эти приемы (ну, не программер я изначально 8-) ). Но что здесь понравилось - то, до чего я добирался методом научного тыка, приятно и хорошо расписано. Спасибо.

  5. IDcontent Says:

    Спасибо, Leo, я стараюсь :)

  6. lusever Says:

    Все таки подбор имени частенько бывает очень мучительным процессом. Трудно подбираются имена для блоков где все в одном.

  7. IDcontent Says:

    Это пройдет с опытом, вернее Вы просто научитесь стандартизировать эти “имена”
    Если все в одном - то это container или pagecontainer и так далее, а проще еще давать функциональные имена - #cat-nav-block #accessibilitytools ну что-то вроде того :)

  8. Каталог статей Says:

    Огромное спасибо автору за открытие глаза на новые вещи! Обязательно будем пробовать и использовать лучше css стили!

  9. andrey.stefanenko Says:

    Спасибо и Вам, что прочитали

Leave a Reply