. Что такое валидность и валидация и зачем они нужны?
Что такое валидность и валидация и зачем они нужны?

Что такое валидность и валидация и зачем они нужны?

В последнее время я получила несколько вопросов от пользователей, касающихся валидности моих тем и валидации вообще. В этом посте хочу ответить на них.

Что такое валидность?

Считается, что валидность кода — это единая, универсальная характеристика любого кода. На самом деле, валидность это соответствие html кода документа определенному своду правил, указанному в доктайпе или подразумеваемому в HTML5. То есть, валидность — понятие относительное, поскольку правила бывают разные, и требования у них тоже. Чтобы было понятнее, приведу пример, который я нашла на сайте css-live.ru :

К строительству жилых домов и атомных электростанций применяются разные СНиПы (строительные нормы и правила), поэтому документ, валидный по одному своду правил, может быть не валидным по другому (хороша была бы АЭС, построенная по нормативам жилого дома!).

Доктайп обычно указывает на документ, по которому планируется валидация html, но может быть выбран из прагматических соображений для выбора оптимального режима браузеров. XHTML5 может вообще не иметь доктайпа, но быть валидным.

Валидация - что это?

Простыми словами, валидация - это процесс проверки кода и приведения его в соответствие с выбранным доктайпом (DTD).

Как проверяется валидность?

Валидность HTML кода проверяется инструментом, который называется валидатором. Самый известный валидатор w3c - https://www.w3.org . Валидатор w3c производит несколько проверок кода. Главные из них:

  1. Проверка на наличие синтаксических ошибок:Пример c habrahabr.ru/post/101985 : <foo bar="baz"> является корректным синтаксисом, несмотря на то, что <foo> является недопустимым HTML-тэгомТак что проверка синтаксиса является минимально полезной для написания хорошего HTML-кода.
  2. Проверка вложенности тэгов: В HTML документе тэги должны быть закрыты в обратном порядке относительно их открытия. Эта проверка выявляет незакрытые или неправильно закрытые теги.
  3. Валидация html согласно DTD: Проверка того, насколько код соответствует указанному DTD - Document Type Definition (доктайпу). Она включает проверку названий тэгов, атрибутов, и «встраивания» тэгов (тэги одного типа внутри тэгов другого типа).
  4. Проверка на наличие посторонних элементов: Она обнаружит все, что есть в коде, но отсутствует в доктайпе. Например, пользовательские тэги и атрибуты.

Для проверки валидности CSS кода существует валидатор css - http://jigsaw.w3.org/css-validator . Валидность кода — это результат механической проверки на отсутствие формальных ОВ, согласно указанного свода правил. Нужно понимать, что валидация — инструмент, а не самоценность. Верстальщики с опытом обычно знают, где можно нарушить правила валидации HTML или CSS, а где нет, и чем грозит (или не грозит) та или иная ошибка валидации. Примеры того, когда не валидный код делает сайт:

  • более удобным и быстрым - пользовательские атрибуты для Javascrip/AJAX или
  • SЕО оптимизированным - разметка ARIA.

Понятно, что в валидности ради валидности нет никакого смысла. Как правило, опытные верстальщики придерживаются следующих правил: - В коде не должно быть грубых ошибок. - Незначительные можно допустить, но только по обоснованным причинам. В отношении допустимости ошибок валидации html/CSS:

Ошибки валидации (ОВ) можно разделить на группы:
  • ОВ в файлах шаблона: Их не сложно найти и исправить. Если, какие то из мелких ошибок помогают сделать сайт более функциональным или быстрым, их можно оставить.
  • ОВ в сторонних скриптах, подключенных на сайте: Например, виджет Вконтакте, скрипт Твиттера или видео-файлы с ютуб. Исправить их никак не удастся, поскольку эти файлы и скрипты находятся на других сайтах и у нас нет к ним доступа.
  • CSS-правила, которые валидатор не понимает: Валидатор проверяет соответствие кода сайта определенной версии HTML или CSS. Если вы использовали в шаблоне правила CSS версии 3, а валидатор проверяет на соответствие версии 2.1, то все правила CSS3 он будет считать ошибками, хотя они таковыми не являются.
  • ОВ, которые поневоле приходится оставлять на сайте, чтобы получить нужный результат. Например:
    • теги noindex. Они не валидны, но очень нужны и с этим приходится мириться.
    • хаки. Чтобы получить корректное отображение сайта в некоторых браузерах, иногда, приходится использовать хаки - код, который понимает только определенный браузер.

    Получается, что на работающем сайте практически всегда будут какие-то ОВ. Причем, их может быть очень много. Например, главные страницы Google , Яндекса и mail.ru содержат по несколько десятков ошибок. Но, они не ломают отображение сайтов в браузерах и не мешают им работать. Все написанное выше относится и к моим темам.

    В сложных темах есть:
    • WordPress функции (например the_category()), которые дают невалидный код.
    • Вывод видео с видеохостингов, например, с YouTube, а в коде YouTube очень много ОВ, на которые ни вы, ни я не можем влиять.
    • Кнопки социальных сетей, которые подключаются при помощи скриптов этих сетей и содержат ОВ.
    • Правила CSS3 и HTML5, которые валидаторы старых версий считают ошибками. В то же время, валидаторы версий CSS3 и HTML5 считают ошибками старые правила :).
    • Иногда, чтобы добиться корректного отображения в браузере Internet Explorer или старых версиях других браузеров приходится использовать, так называемые хаки - код, который понимает только определенный браузер, чтобы написать правила отображения сайта именно для этого браузера.

    В итоге получить полностью валидный код можно только при верстке очень простых тем, т.е. тем, которые содержат минимальное количество функционала. После окончания верстки любой своей темы я всегда проверяю ее валидатором и исправляю все ОВ, которые можно исправить без потери работоспособности темы. Т.е., если стоит выбор между работающим функционалом и валидностью - я выбираю функционал. Если вы верстаете свои темы, советую поступать так же. С моей точки зрения (а также, точки зрения большинства верстальщиков) отношение к валидации html/CSS, как к истине в последней инстанции ошибочно. В обязательном порядке нужно исправлять только те ОВ, которые: - мешают браузеру корректно отобразить страницу (незакрытые и неправильно вложенные теги). - замедляют загрузку страницы (неправильно подключенные скрипты). - можно исправить, не нарушая работоспособность темы. Надеюсь, я ответила на все вопросы о валидации.