Напоминаю, что те, кто пропустил первую часть рассылки, посвященную HTML, могут скачать самоучитель в формате CHM по адресу http://htmlbook.ru/download/?id=4, объем файла 519 кБ. Также в первой части тема графики была затронута весьма кратко из-за своего объема, поэтому рекомендую посетить сайт webimg.ru, который сейчас активно заполняется новыми материалами, и почитать о графике для сайтов подробнее.
Сегодня публикуется заключительная четвертая часть раздела, посвященного валидации кода HTML. Поскольку материал достаточно большой, он будет разбит на 2-3 рассылки.
4. Исправление ошибок
Большинство ошибок, возникающих при валидации кода можно свести к набору типовых вариантов, зная которые легко понять, на что «намекает» валидатор. В качестве образца возьмем расширение HTML Tidy для браузера Firefox, предназначенное для проверки кода и рассмотрим список ошибок и замечаний по коду.
Посмотреть все возможные сообщения валидатора можно по адресу http://www.htmlpedia.org/wiki/HTML_Tidy, далее приведены основные ошибки с их описанием и решением. В качестве многоточия подразумевается элемент, к которому возникает претензия.
Notice: entity "..." doesn't end in ";"
Это замечание возникает при использовании спецсимволов вроде < при отсутствии на конце точки с запятой.
Правильно:
Неверно:  
Решение
Добавьте в конце спецсимвола точку с запятой.
Notice: numeric character reference "..." doesn't end in ';'
Возникает при использовании числовых спецсимволов вроде — когда в конце забыли добавить точку с запятой.
Правильно: ™
Неверно: ™
Решение
Добавьте в конце спецсимвола точку с запятой.
unescaped & or unknown entity "&..."
Символ амперсанда (&) часто применяется в адресах ссылок (аргумент href тега <A>), поскольку он разделяет несколько параметров. Однако амперсанд зарезервирован для спецсимволов вроде поэтому в ссылках необходимо указывать & вместо &.
Ошибка возникает при нарушении порядка тегов, когда блочный тег располагается внутри встроенного. В данном случае блочный тег <bbb> находится внутри встроенного тега <aaa>.
Правильно: <p><span>Текст</span></p>
Неверно: <span><p>Текст</p></span>
Решение
Поменяйте расположение тегов — перенесите встроенный тег внутрь блочного.
discarding unexpected <...>
Обнаружен открывающий или закрывающий тег, у которого нет пары. Подобная ошибка возникает в двух случаях: есть открывающий тег, но нет закрывающего; имеется закрывающий тег, которому не соответствует открывающий.
Правильно: <div><div>Текст</div></div>
Неверно: <div>Текст</div></div>
Неверно: <div><div>Текст</div>
Решение
В зависимости от ситуации добавьте или удалите открывающий или закрывающий тег.
Notice: nested emphasis ...
Контейнер содержит аналогичный тег физического форматирования, который не должен повторяться.
Правильно: <p><b>Текст</b></p>
Неверно: <p><b><b>Текст</b></b></p>
Решение
Удалите один из тегов.
replacing unexpected ... by </...>
Закрывающий тег не соответствует открывающему тегу.
Правильно: <p><b>Текст</b></p>
Неверно: <p><b>Текст</span></p>
Решение
Замените открывающий или закрывающий тег на парный.
... isn't allowed in <...> elements
Обнаружены теги, которые запрещено размещать внутри указанных элементов.
Правильно: <head><title>Заголовок</title></head>
Неверно: <head><body>Текст</body></head>
Решение
Переместите HTML-элемент в правильный раздел.
missing <...>
Нет обязательного тега в структуре элементов. Ошибка, к примеру, может возникнуть при формировании таблицы, когда пропущен тег <TR> и сразу же после <TABLE> следует <TD>.
Правильно: <ol><li>Список</li></ol>
Неверно: <ol>Список</ol>
Решение
Проверить правильность вложения тегов в текущем элементе и наличие обязательных элементов.
Notice: inserting implicit <...>
Сообщение возникает из-за предыдущей ошибки на странице.
Решение
Исправьте предыдущие ошибки.
Insert missing <title> element
В коде не вставлен тег <TITLE>.
Правильно: <head><title>Заголовок</title></head>
Неверно: <head></head>
Решение
Добавьте контейнер <TITLE>.
Multiple <frameset> elements
Тег <FRAMESET> используется более одного раза без вложения. Допускается вставлять несколько элементов <FRAMESET>, но вложенных один в другой.
Правильно: <span style=""white-space:" nowrap;">текст без переносов</span>
Неверно: <nobr>текст без переносов</nobr>
Решение
Удалите тег или замените его подходящим эквивалентом.
Error: <...> is not recognized!
Тег не распознан и не входит в спецификацию HTML.
Правильно: <p>Текст</p>
Неверно: <p><adres>Текст</adres></p>
Решение
Удалите неизвестный тег.
Trimming Empty Tag
Контейнер пустой или содержит только пробел.
Правильно: <p>Текст</p>
Правильно: <p> </p>
Неверно: <p></p>
Решение
Удалите тег или добавьте внутрь контейнера текст.
Рецепты CSS
Как растянуть фон на всю ширину окна браузера?
В отличие от обычной картинки, добавляемой через тег <IMG>, фоновый рисунок напрямую никак не получится растянуть. Но можно пойти на хитрость и расположить картинку в качестве нижнего слоя, а остальное содержимое веб-страницы поместить поверх него.
Для этого создаем с помощью тега <DIV> два слоя, назовем их layer1 и layer2 и определим их порядок через стилевой атрибут z-index. Чем больше значение этого параметра, тем выше располагается текущий слой относительно других слоев. Также необходимо задать абсолютное позиционирование для каждого слоя (пример 1).
Пример 1. Растягиваемый фон
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Растягиваемый фон</title>
<style type="text/css">
#layer1 {
z-index: 1; /* Порядок слоев */
width: 100%; /* Ширина слоя с фоном */
height: 100%; /* Высота слоя с фоном */
position: absolute; /* Абсолютное позиционирование */
left: 0; /* Положение от левого края окна */
top: 0; /* Положение от верхнего края */
}
#layer2 {
position: absolute; /* Абсолютное позиционирование */
z-index: 2; /* Порядок слоев */
}
</style>
</head>
<body>
<div id="layer1">
<img src="help.gif" width="100%" alt="">
</div>
<div id="layer2">
Основное содержимое веб-страницы
</div>
</body>
</html>
Для слоя layer1 требуется установить ширину и высоту равную 100% и координаты левого верхнего угла задать нулевыми. Тогда не возникнет горизонтальной полосы прокрутки. Обратите внимание, что в самом теге <IMG> указана только ширина изображение без высоты. Это сделано для того, чтобы сохранить пропорции картинки, в противном случае в браузере Opera возникнут искажения.
Результат данного примера показан на рис. 1.
Рис. 1. Вид фона при уменьшенном размере окна
При увеличении размера окна браузера фон также начнет расширяться, это приведет к ухудшению вида картинки (рис. 2).
Рис. 2. Вид фона при увеличенном размере окна
Copyright 2007 Влад Мержевич. По всем вопросам пишите по адресу vlad@htmlbook.ru