|
||
Сайтостроение по стандартамЗаметка 3. Как написать плохой кодТак же как плохое питание негативно влияет на организм, плохой код подрывает “здоровье” всей Сети. Но до недавнего времени этот факт был скрыт от нас, [...] потому что нам не с чем было сравнивать, — 99,9% сайтов устарели. Джеффри Зельдман “Web-дизайн по стандартам” Плохой код можно написать разными
способами.
Разметка структуры визуальными тегамиcolor="#FFFFFF">|</font> <a style="color:#FFFFFF;text-decoration:none;" href= "/isapi/gosearch.asp?target=/us/default.asp" target="_top" onmouseover="this.style.color=’#FFCC00’;" onmouseout="this.style.color=’#FFFFFF’;">Search</a> Это может показаться невероятным, но этот кусок кода взят не из архивов 1997 года, не является фрагментом студенческой работы новичка или исходным кодом загнивающего сайта мелкой конторы. Он был взят именно в таком виде, в каком вы его видите, с web-сайта компании Microsoft 7 января 2003 года. Джеффри Зельдман “Web-дизайн по стандартам” Довольно часто в HTML-коде можно встретить разметку, вроде приведенной ниже:
Автор думает, что он хорошо структурировал текст: разделил его на заголовок и два абзаца. На самом деле в этом коде нет ни одного элемента, отражающего структуру. Здесь нет ни заголовков, ни абзацев. Код позаботился лишь о виде отдельных фрагментов текста, не давая ни малейшего намека на роль этих фрагментов в структуре документа. Почему это плохо?
Если потребуется изменить красный цвет заголовка на зеленый, придется просматривать сотни страниц и править указание color="red" на color="green" в каждом теге FONT, принадлежащем заголовку. Всю эту работу придется делать вручную, просматривая строчки кода по порядку. Автоматический поиск не поможет, ибо тег FONT может встречаться не только в заголовках. Понятно, что такая работа просто не реальна. Даже если отважиться на нее, пропуски “заголовков” или правки в “не заголовках” становятся неизбежными. Нужна ли нам такая головная боль? А ведь можно написать красиво и совсем просто:
— Постойте, а как же красный цвет заголовка? (Это возмущается автор неструктурного кода.) — Нет проблем. Добавляем в файл CSS определение, которое будет работать для заголовков всех уровней на всех страницах: H1,H2,H3,H4,H5,H6 {color: red;} — А темно-серый цвет текста? — Еще одно определение: P {color: #1a1a1a;} — А как теперь изменить цвет в заголовках на зеленый? — Очень просто! Делаем всего одну правку в CSS-файле: H1,H2,H3,H4,H5,H6 {color: green;} И все заголовки на всех страницах станут зелеными. — Постойте! Получилось плохо. Я использовал BR, и мои заголовки близко примыкали к тексту, а ваши, выводимые H1, отстоят от него далеко. Это противоречит моему замыслу. Придется отказаться от H1 — дизайн для меня очень важен. — Вы еще не поняли? HTML — язык не для дизайна. HTML предназначен для разметки структуры. Забудьте про HTML, когда нужно изменить вид объекта на экране. Для дизайна предназначен язык CSS. Вам не нужен отступ заголовка от текста? Пожалуйста: H1,H2,H3,H4,H5,H6 Теперь все заголовки на всех страницах будут примыкать к тексту плотно (как это было с вашим тегом <BR>). — Еще проблема. В своем коде я писал: Первый абзац
содержания раздела.<BR> Абзацы снабжались пробелами в первой строке, как это делают в бумажных книгах. С применением элемента P они выводятся без красных отступов и отделяются пустыми строками. — И очень правильно. Для экрана такой стиль отображения абзацев — самый хороший. В книгах слова переносятся по слогам, и очень легко добиться выравнивания текста по ширине без пустот в нем. Браузеры не умеют расставлять переносы, поэтому в нешироких текстах выравнивание по ширине не используют, а текст с длинными строчками читать некомфортно. Для абзаца используют выравнивание слева. Красные отступы ломают ровный левый край. Получается, что такой текст не выровнен ни слева, ни справа, читать его трудно, и он некрасиво смотрится, ибо отсутствие выравнивания всегда воспринимается как визуальная погрешность. Если к тому же абзацы не отделены пустыми строками, весь текст на странице превращается в один сплошной абзац с неровными краями. Читать практически невозможно. — Вы хотите сказать, что тег <BR> вообще не нужен? А если надо записать вертикальное меню ссылок? Такое меню я всегда записываю так: ссылка 1<BR> — Давайте наконец договоримся: HTML — язык для разметки структуры документа. А для дизайна существует язык CSS. И баста. Ваш набор ссылок можно записать в виде маркированного списка: <UL class=setlinks> Список — это структура, а ваша запись с BR никакой структуры не отражает. — Мне не нужны маркеры и списочные отступы! — Нет проблем, берем в руки CSS и пишем нужное определение: .setlinks Теперь элементы списка будут выводиться без маркеров и отступов. Заметим, что это CSS-определение будет работать только для списков, в которых записан атрибут class со значением setlinks и не затронет другие UL, которые будут отображаться на экране обычным образом (с маркерами и отступами). Визуальная разметка структурными тегамиМы привыкли, что <h1> означает крупный шрифт, <li> — маркер, <blockquote> — отступ. ... Игры кончились, пора начать использовать элементы по их назначению, а не по внешнему виду. Джеффри Зельдман “Web-дизайн по стандартам” Очень плохо, когда структурные элементы используют в коде не по назначению. Например, элемент Hn употребляется для выделения обычных слов или фраз, не являющихся заголовками, а элемент BLOCKQUOTE — для записи обычного текста с отступами. В примере, который приводится ниже, автор сайта поступил именно таким образом: <BLOCKQUOTE> Разработчик знает, что браузер выводит Hn на экран укрупненным шрифтом повышенной жирности, а BLOCKQUOTE с отступами, и использует эти элементы для дизайна, игнорируя их структурный смысл. Давайте скажем “нет” таким приемам, они не добавляют порядка в наш код. Структурные элементы предназначены для разметки структуры и не должны использоваться для визуальных нужд. Стилевые определения в тегах
Вместо раскритикованного в начале заметки кода: <B><FONT size="6"
color="red">Заголовок раздела автор написал другой плохой код: <DIV style="font-size:150%;font-weight:bold;color:red">Заголовок
раздела</DIV> — и премного порадовался удачному решению! Автор решил, что использование CSS привело код в соответствие с современным уровнем сайтостроения. На самом деле ничего не изменилось. Код не стал структурным, потому что в нем не использованы структурные элементы HTML. Визуальная разметка по-прежнему уложена на один диван с содержанием. Вместо визуальных атрибутов автор использовал CSS-свойства, внедряя их прямо в теги. Никаких плюсов это не принесло. Код стал длиннее, а проблемы сохранились. Способы соединения CSS с HTMLСкажем сразу: для отделения содержания от дизайна последний нужно помещать в отдельный CSS-файл. А всего существует три способа соединения стилевых правил CSS с кодом HTML. 1. Стилевые определения размещаются в отдельном CSS-файле, а в каждом HTML-файле записывается ссылка на эти определения при помощи элемента LINK в головной части HTML-кода: <LINK rel="stylesheet" type="text/css" href="style.css"> При построении страницы браузер руководствуется указаниями стилевого файла style.css. Каждая страница сайта строится по одному визуальному шаблону, определенному в style.css, и мы получаем те преимущества CSS, о которых говорилось: отделение дизайна от содержания, уменьшение общего кода почти на 50%, простой редизайн сайта. И плюс к этому: единый стиль для всех страниц сайта. 2. Стилевые определения размещаются в головной части HTML-файла при помощи элемента STYLE: <HTML> Так, заданные стилевые определения действуют только внутри того файла, в котором они записаны. 3. Стилевые определения размещаются в открывающем теге элемента в качестве значений атрибута style: <H1 style="color: green">Заголовок раздела</H1> По правилам каскадирования стилевое определение в теге главнее стилевого определения в головной части HTML-кода, а последнее главнее определений, заданных в отдельном стилевом файле. Рассмотрим области использования этих трех вариантов соединения CSS с HTML-кодом. Вариант, при котором стилевые определения задают единый шаблон страниц в отдельном CSS-файле, является основным. Именно он позволяет действительно отделить дизайн от содержания, разведя их по разным кодам и файлам. Вариант размещения CSS-определений в головной части можно использовать, чтобы переопределить для данной страницы свойства общего шаблона. Пусть, например, в общем шаблоне задан синий цвет для навигационных кнопок. Чтобы выделить кнопку текущей страницы среди других, можно окрасить ее в белый цвет. Для этого в головную часть каждого HTML-файла можно поместить указание background: white для текущей кнопки, и эти указания заменят указания общего шаблона по правилам каскадирования. Можно найти и другие причины для создания собственных стилей отдельной страницы (связанных, например, с особенностями форматирования материала, на ней расположенного). Строго следуя принципу разделения дизайна и содержания, можно завести для каждого HTML-файла собственный CSS-файл и в нем указывать стилевые особенности, характерные только для этого файла. Так и надо поступать, если набор уникальных правил для страницы достаточно велик. В этом случае ссылки на стилевые файлы записываются друг за другом: сначала ссылка на общий стилевой файл, потом ссылка на уникальный. Для HTML-файла с именем 01.htm можно записать: <LINK rel="stylesheet" type="text/css" href="style.css"> <LINK rel="stylesheet" type="text/css" href="01.css"> В файл style.css записываются определения общего шаблона страниц, а в файл 01.css — уникальные определения для файла 01.htm. Когда задано несколько конфликтующих стилевых определений, действует последнее из них. Значит, в силу порядка следования, определения в 01.css будут главнее определений style.css, и если в общем шаблоне для кнопки был прописан синий цвет, а в файле 01.css белый, то на странице 01.htm кнопка будет белой. Если набор уникальных стилевых правил для файла незначителен (например, касается только одной кнопки), то эти определения (с некоторыми сомнениями, связанными с чистотой подхода) можно поместить в головную часть HTML-кода, чтобы не размножать файлы. Вариант размещения CSS-определений в тегах противоречит рекомендациям стандарта (никакого разделения дизайна и содержания не получается) и надо избегать такого кодирования.
Заметка 4. Выбор языка разметки гипертекста
В Word есть средства для задания стилей. Если грамотно их использовать, то и в этом редакторе можно отделить визуальную разметку от структурной. Но очень мало людей используют стили. Когда нужно выделить слово, нажимается К или Ж, то есть пользователи Word поступают так же, как те web-разработчики, которые используют элементы I и B вместо EM, STRONG и языка CSS. Но Дмитрий Кирсанов выразился очень изящно! Давайте отделять в своих web-проектах “существительное” содержимого документа в файле HTML от “прилагательного” его представления в файле CSS. И мы сразу поднимемся над уровнем первобытных племен и древних технологий! Эта заметка посвящена вопросу выбора языка гипертекстовой разметки. Чтобы выбор был максимально понятным, мы снова начнем с исторических корней. Причем на этот раз копнем глубже, до самого SGML. Развитие языка гипертекстовой разметки
В ЦЕРН (CERN) разработку языка возглавил Тим Бернерс-Ли (Tim Berners-Lee). Версия HTML 1.0 была предельно проста — кроме тегов для записи гипертекстовых переходов (для контекстной связи документов друг с другом), она предусматривала лишь несколько тегов для логической разметки текста и один тег IMG для записи ссылок на файлы с картинками-иллюстрациями. Как уже говорилось ранее, изначально на HTML возлагалась лишь задача структурной разметки текста, без каких-либо указаний на то, как должен выглядеть тот или иной элемент на экране. Структурная разметка указывает границы частей документа и их соподчинение (заголовки Hn, абзацы P, цитаты CITE, выделения EM, сильные выделения STRONG, гиперссылки A, ссылки на файлы с картинками IMG). Задача представления элементов на экране возлагалась на средства отображения гипертекстовых документов (браузеры). Благодаря такому разделению размеченный текст может без труда выводиться на любое мыслимое устройство вывода. Например, браузер на компьютере с текстовым монитором может обрамлять выделенный текст знаками подчеркивания (это _выделение_), на графический монитор выводить текст курсивом (это выделение), а на компьютере с голосовым выводом произносить выделенный текст повышенной интонацией. Развитие графических средств вывода информации провоцировало появление в следующих версиях HTML многочисленных тегов, позволяющих непосредственно управлять видом элемента на экране: тег I для оформления курсивом, тег B для полужирного начертания, тег FONT для задания гарнитуры и кегля... Смесь из структурной и визуальной разметки стала здорово перегружать код страницы мешаниной тегов с их многочисленными атрибутами. Помимо утяжеления страниц, килобайтный вес которых напрямую определяет посещаемость сайта (чем быстрее страница грузится, тем охотнее ее просматривают в Сети), совмещение визуальных указаний со структурной разметкой существенно усложняет редизайн сайта. В самом деле, если разработчик принял решение выводить текст рубленым шрифтом пониженного размера вместо ранее используемого серифного шрифта, он должен внимательно отредактировать сотни страниц сайта, заменяя всюду тег <FONT face=Journal> тегом <FONT face=Verdana size=-1>. Автоматизировать такую замену нельзя, ведь исходные теги FONT могут содержать и другие атрибуты, например, color. Приходится выполнять правки вручную, лишь частично упрощая жизнь автоматическим поиском по ключу “font”. Работа большая, как и вероятность ошибки: легко можно пропустить правку тега или даже целого файла. Описанием стандартов HTML, начиная с версии 2.0 (1994 год), стала заниматься международная организация W3C (от англ. World Wide Web Consortium — Консорциум Всемирной паутины). В 1995 году Консорциум ввел в HTML версии 3.0 поддержку иерархических стилевых спецификаций CSS (от англ. Cascading Style Sheets — каскадные таблицы стилей). CSS — это разрешение противоречий между идеологией структурной разметки и потребностями разработчиков в гибких и богатых средствах визуального представления элементов на экране. Язык CSS имеет свой собственный синтаксис и позволяет задавать визуальные параметры представления любого элемента HTML. Таким образом, CSS берет на себя задачу объяснить браузеру, как отображать элементы на экране, и позволяет тем самым отделить структурную разметку документа (в HTML-коде) от описаний визуальных свойств объектов (в CSS-коде). В 1999 году W3C опубликовала спецификации версии HTML версии 4.0. Затем в 1999 году был опубликован стандарт HTML 4.01. На этом развитие языка HTML закончилось окончательно. На смену HTML в 2000 году пришла спецификация XHTML 1.0. Буква “X” здесь означает XML.
XHTML — это попытка обеспечить описания данных с помощью выразительных средств сложного XML, сохранив при этом простоту и удобство HTML. Завершение эпохи совершенствования HTML не означает отказ разработчиков от использования этого языка. HTML продолжает свою жизнь и в качестве подмножества XHTML, и в “чистом” виде — как простой инструмент разработки сайтов. На уровне первой версии язык XHTML не дает практически никаких преимуществ по сравнению с последней версией языка HTML, но синтаксические требования в языке XHTML существенно выше, что, с одной стороны, усложняет использования этого языка, а с другой — дисциплинирует разработчиков, которые привыкли относиться к гипертекстовому коду небрежно, считая, что браузер додумает за них (что он и делает, исправляя ошибки в HTML-коде по своему усмотрению). Язык CSS по-прежнему решает задачу представления информации на устройствах вывода, как в паре с HTML, так и в паре с XHTML. Какой язык гипертекстовой разметки выбрать
К сожалению, строгая совместимость сегодня невозможна, ибо браузеры не поддерживают стандарт CSS на 100%, и, например, в ряде случаев невозможно заменить привычную визуальную разметку при помощи таблиц блочной разметкой CSS. Однако примеры предыдущей заметки однозначно показывают, что и в рамках сегодняшних условий можно и нужно прилагать максимальные усилия для отделения дизайна от содержания. Такой подход имеет массу преимуществ сегодня и будет единственно возможным завтра. Визуальная разметка должна выделяться в отдельный файл с описанием стилей, а содержание, несущее на себе теги структурной разметки, должно покоиться в гипертекстовом файле. Возникает вопрос: на каком языке лучше выполнять разметку структуры? Подходит ли для этого HTML, или нужно использовать XHTML, а может быть, XML? Ведь универсальный язык XML завоевывает мир!
Но использовать “чистый” XML для разметки страниц сайта — легкое безумие. В этом языке нет ни одного тега, ни одного атрибута. Сначала мы должны создать (описать) эти теги и атрибуты, а уж потом выполнять разметку своих страниц. К счастью, это (описание нужных для web-разметки тегов и атрибутов) уже сделали за нас. Этот язык, сконструированный на XML, уже существует и называется XHTML. Итак, современным языком структурной разметки является XHTML. Значит, усилия, потраченные на изучение HTML, пропали зря? Теперь придется изучать новый язык? Это не так.
Отметим синтаксические особенности языка XHTML.
И это практически все. Очень легко преобразовать HTML-код в код на XHTML, причем совсем не обязательно делать это вручную. В сети можно найти много программ (например, бесплатная HTML Tidy http://www.w3.org/People/Raggett/tidy), которые выполнят это автоматически. Значит... Берем свой ужасный HTML-код, напускаем на него автоматический преобразователь и... Получаем прекрасный структурированный код на XHTML, в соответствии со стандартами W3C? Конечно, нет. Что имели, то и получили. Плохой код на входе — плохой код на выходе. Но если на входе был хороший код HTML, на выходе будет получен хороший код XHTML. Так какой язык выбрать — XHTML или HTML 4.1? Сегодня разницы практически нет. Но HTML замер на цифре 4 и больше развиваться не будет, а XHTML в начале пути. Что выбрать, решение за вами. Лично мне в XHTML не нравится только запись тегов в нижнем регистре. Мелкосимвольные имена тегов сливаются с обычным текстом, и это затрудняет чтение кода. Правда, подкрашивание, принятое в редакторах кода, компенсирует эту утрату. Напоследок приведу еще одну цитату из Джеффри Зельдмана.
В следующей заметке мы приступим к практической работе по созданию страниц по стандартам, постоянно помня о двух самых важных вещах:
А.. А.. Дуванов,
| ||