Как стать автором
Обновить

Валидация HTML — миф

Время на прочтение 2 мин
Количество просмотров 3K
Пришло время и я открою главную тайну:

Нет ничего страшного если ваш сайт невалиден из-за 2-3х аттрибутов которые придумали вы сами.

Попробуйте придумать вескую причину почему это утверждение в корне неправильно прежде чем читать дальше.

Давайте для начала представим себя на месте микроволновки будущего. Скажем, вы, как строгая и недорогая микроволновка, поддерживаете отображение только (!) XHTML. Скорее всего вряд-ли вы будете валидировать каждый документ перед рендерингом, это займет лишнее процессорное время, а кроме того вам нужна была бы DTD, умение валидировать по ней (на всякий случай напомню, что valid документ это не просто well-formed). Скорее вам же дешевле будет просто попытаться его отобразить. Никто не спорит, что незакрытый тэг или неправильная вложенность (случай not well-formed) может серьезно сбить с толку парсер XHTML кода, но неужели при обнаружении невалидного аттрибута (в случае not valid XHTML) вы очистите экран и покажете домохозяйке ошибку? Нет. Потому что вы их не обнаружите. Потому что вам не нужно обнаруживать их. Вы будете искать только те аттрибуты, которые поддерживаете, которые сможете отобразить. Если даже вы будете делать цикл по всем атрибутам элемента, уверен, нет смысла обрабатывать неизвестные.

Спецификация HTML и XHTML с самого начала включала полезную рекомендацию: при обнаружении неизвестного атрибута или элемента браузеру рекомендуется его игнорировать. Представьте себе, иначе невозможно было бы обеспечить forward compatibility и сидели бы мы только на HTML 3.2.

<input type="text" required="required" name="creditcard" accept="[0-9]" pattern="[0-9]{13,16}" />
Да, это не валидный XHTML, что автоматически означает что это вообще не XHTML. Но это не значит что он не совместим с XHTML и что любой XHTML браузер не сможет его вывести используя принцип graceful degradation.

Придумывайте свои аттрибуты и элементы, создавайте им поддержку в JavaScript, не стоит использовать class/rel/for для указания признака обязательного поля формы, нет смысла использовать комментарии типа <!-- BEGIN block1 --> для указания блоков. Это создает проблемы тому же верстальщику. Используйте required=«required». Используйте <block name=«block1»>. Расширяйте XHTML в рамках только вашего сайта. Обеспечивайте совместимость с теми у кого выключен JavaScript. И никто ничего плохого вам не скажет.

Нет никакого смысла равняться на идеальный браузер, который понимает только Strict XHTML. Его еще не создали только потому что он никому не нужен и это не самоцель W3C (хотя некоторые почему-то так и думают). Ведь основы любой грамотной спецификации (что отличает ее от «замка на песке») — не стремление к ужесточению, а обеспечение гибкости, совместимость в обе стороны и грамотное продумывание graceful degradation. И это все уже давно реализовано в рамках HTML и XHTML. Просто начинайте получать удовольствие от этих продуманных принципов.
Теги:
Хабы:
+37
Комментарии 142
Комментарии Комментарии 142

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн