Нужна ли HTML-валидация?!

http://www.nczonline.net/blog/2010/08/17/the-value-of-html-validation/
  • Перевод

Что такое HTML-валидация?


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

Имейте ввиду, что это логические проверки, и не важно как реализован валидатор. Если хотя бы одна из проверок не проходит успешно, то HTML считается невалидным. И в этом заключается проблема.

Аргументы


Основным аргументом за валидацию HTML является обеспечение кроссбраузерности. Каждый браузер имеет свой парсер и «скармливать» ему то, что понимают все браузеры — это единственный путь быть уверенным, что Ваш код будет работать правильно во всех браузерах. Поскольку каждый браузер имеет свой механизм коррекции ошибок HTML Вы не можете полагаться на невалидный код.

Основным аргументом против валидации является то, что она слишком строгая и не соответствует тому, как на самом деле работают браузеры. Да, HTML может быть невалидным, но все браузеры могут обрабатывать некоторый невалидный код одинаково. Если я готов взять на себя ответственность за неправильный код, который я пишу, то я не должен беспокоиться о проверке. Единственное, о чем я должен заботиться — это чтобы оно работало.

Моя позиция


Это один из немногих случаев, когда я публично говорю о своей позиции по отношению к чему-нибудь. Я всегда был среди противников валидации, основываясь на том, что валидатор слишком строг, чтобы быть практичным в реальных приложениях. Есть вещи, которые поддерживаются большинством браузеров (<noscript> в <head>, <script> после </html>), которые являются невалидными, но иногда очень необходимы для правильной работы.

Вообще, моей наибольшей проблемой валидации является проверка #4 (на посторонние элементы). Я сторонник использования пользовательских атрибутов в HTML тэгах для хранения дополнительных мета-данных, относящихся к определенному элементу. В моем понимании, это, например, добавить атрибут foo, когда у меня есть данные (bar), которые мне надо ассоциировать с определенным элементом. Иногда люди перегружают существующие атрибуты для этих целей только для того, чтобы пройти валидацию, несмотря на то, что атрибут будет использовать не по назначению. Для меня это бессмысленно.

Секрет браузеров заключается в том, что они никогда не проверяют соответствие HTML-кода указанному DTD. Doctype, который Вы указали в документе, переключает парсер браузера в определенный режим, но это не приводит к загрузке doctype и проверке кода на соответствие ему. То есть, парсер браузеров обрабатывает HTML с некоторыми допущениями невалидности, вроде самозакрывающихся тэгов и блочных элементов внутри строковых (я уверен, что есть и другие).

В случае пользовательских атрибутов, все браузеры парсят и распознают синтаксически корректные атрибуты как допустимые. Это делает возможным получить доступ к таким атрибутам через DOM с помощью Javascript. Так почему я должен беспокоиться о валидности? Я буду продолжать использовать свои атрибуты и я очень рад, что HTML5 формализует их.

Лучший пример технологии, которая приводит к невалидному HTML, но имеет огромное значение, — это ARIA. ARIA работает с помощью добавления новых атрибутов в HTML 4. Эти атрибуты предоставляют дополнительное семантическое значение HTML-элементам и браузер способен передать эту семантику вспомогательным устройствам для помощи людям с ограниченными физическими возможностями. Все основные браузеры сейчас поддерживают разметку ARIA. Однако, если Вы будете использовать эти атрибуты, у Вас будет невалидный HTML.

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

Чтобы прояснить мою позицию: я считаю, что проверки #1 и #2 являются очень важными и должны проводиться всегда. Проверку #3 я тоже считаю важной, но не столь, как первые две. Проверка #4 очень сомнительна для меня, так как она задевает пользовательские атрибуты. Я считаю, что, как максимум, пользовательские атрибуты должны быть помечены как предупреждения (а не ошибки) в результатах проверки, чтобы была возможность проверить, не ошибся ли я при вводе названия атрибута. Отметка пользовательских тэгов как ошибок, возможно, хорошая идея, но тоже имеет некоторые проблемы, например, при встраивании содержимого в другой разметке — SVG или MathML.

Валидация ради валидации?


Я считаю, что валидация ради валидации — это крайне глупо. Валидный HTML означает только лишь то, что все 4 проверки прошли без ошибок. Есть несколько важных вещей, которых не гарантирует валидный HTML:
  • валидный HTML не гарантирует accessibility;
  • валидный HTML не гарантирует хороший UX (user experience);
  • валидный HTML не гарантирует функционирующий сайт;
  • валидный HTML не гарантирует корректное отображение сайта.

Валидный HTML может служить поводом гордиться самим собой, но само по себе это не является показателем мастерства. Ваш валидный код не всегда лучше выполняет свои функции чем мой невалидный.

Валидация HTML5


Валидация HTML5 исправит некоторые проблемы, которые были с валидацией HTML 4. Она явно позволяет употребление пользовательских атрибутов (они должны начинаться с data-). Это позволит моему коду пройти проверку на валидность для HTML5. Конечно, есть некоторые моменты в валидаторе HTML5, с которыми я не согласен, но я считаю, что он намного больше соответствует практическим потребностям чем валидатор HTML 4.

Заключение


Я считаю, что некоторые составляющие HTML-валидации крайне важны и полезны, но я не хочу быть ее заложником, потому что я использую свои атрибуты. Я горжусь тем, что я использую ARIA в моей работе и мне безразлично то, что это считается невалидным кодом. Опять же, из четырех проверок валидатора у меня есть проблемы только с одной. И HTML5 валидатор избавит меня от большинства этих проблем.

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

Об авторе — Nicholas C. Zakas, сотрудник Yahoo, специалист в области UI и JS, автор книг Professional JavaScript for Web Developers и High Performance JavaScript.

UPD: спасибо за карму, перенес в тематический. Повторю слова автора: я понимаю, это спорная тема, но пожалуйста, воздержитесь от чисто эмоциональных комментариев, приводите аргументы.
Поделиться публикацией
Комментарии 176
    +3
    Всё верно! Я уже высказывал своё (скромное) мнение однажды. С тех пор прошло несколько лет и ничего не поменялось, от безвалидности никто не умер и никто не разорился.
      +2
      Вы бы знали сколько мобильных сайтов страдали из-за невалидной разметки и недоступности для пользователей. Но сейчас дела там схожи с веб.
        0
        Мобильный веб это отдельная история — там в основном пока и не нужны кастомные атрибуты и иже с ними.
      +5
      Лично я тоже никогда не понимал зачем особо нужна валидация, ну в смысле что некоторые верстальщики не отпустят от себя код пока он не будет валидным и будут переделывать его под валидатор, даже если это приведёт к немного различному отображению в других браузерах (когда всё валидно, но выглядит везде по разному, то они это называют «неправильными браузерами»). Понятно, что создание кода по стандартам уменьшает вероятность некорректного отображения в различных браузерах, и создавая валидный код будет меньше проблем с кроссбраузерностью.
      Но если везде выглядит одинаково но не валидно, то к чёрту валидность — это хороший код. А если полностью валидный код выглядит в каждом браузере немного по разному, то это не браузеры плохие, а код ужасен.
        +1
        На валидной верстку, проще обнаруживаются ошибки, появляющиеся при всяких доработках, переверстках и прочем.
        На мелких сайтах-визитках не так заметно, но на больших и долгоживущих проектах, над которыми работает много программистов, верстальщиков, контент-менеджеров это критично.
          0
          все верстальщики попадают в рай… если у них был валидный код!
          +4
          от себя добавлю — валидный код позволяет парсить HTML стандартными XML-парсерами. Это упрощает жизнь создателям различных грабберов (:
            0
            Вы объединяете понятия. В вашем примере достаточно только well-formed (#1 и #2 из статьи).
            Автор утверждает что сомнительна польза от валидности.
              0
              Да, Вы правы, прошу прощения за неоднозначность.
              0
              нет, хтмл позволяет много вольностей, которые не допустимы в хмл
                0
                Я валидный XHTML имел ввиду, опять же извиняюсь за неточность
                  +2
                  дык а xhtml — это подмножество xml %-)
              +2
              Я за стандартизацию, потому что
              1. Если где-то мне показывает валидатор, что сделано не по стандарту, я должен четко знать почему именно я сделал не по стандарту. В других случаях пусть будет по стандарту.
              2. Если все по стандарту, это один из способов увеличить шансы что в следующих версиях браузеров сайт не сломается.
                +5
                Об этом и пишет автор, но только кастомные атрибуты должны быть не ошибками валидатора, а предупреждениями.
                +28
                Валидность кода — это способ проверять его качество в два клика. Открыл, зелёненькое? Ок, ничего не поломалось. А если у вас куча мусора и стомильёнов кастомных атрибутов, то и не будет зелёненького, а значит в коде могут быть и другие ошибки.

                В общем, валидность — это инструмент, а не самоцель.
                  +2
                  Во, в точку!
                  Иногда замыленным взглядом не заметишь ошибки в коде, а валидатор сразу же на нее укажет.
                    0
                    удобней, когда на это обращает внимание ваша IDE
                      +3
                      Код HTML может быть «динамически-генерируемым».
                        0
                        «динамически» != «случайным образом»
                        Ваша «динамика» так или иначе подчиняется определенному набору правил. зачем изначально «динамически» генерировать невалидные данные (невалидную разметку)?
                        более того, отдельные динамические блоки гораздо проще поддерживать в валидном состоянии
                          +2
                          Уже писали выше, что если разработчиков много и проект большой (много страниц, сложная логика, возможно частично пользовательский контент), то валидация выполняет функцию «юнит-тестирования», это не 100%, но реально может помочь.
                            +1
                            oups…
                            трактовал Ваш предыдущий комментарий, как голос против валидации…
                              +1
                              Не юнит, а интеграционного в таком случае
                                0
                                Да, конечно интеграционного, не додумал.
                      +5
                      Ну одно дело — это когда что-то действительно серьезное отмечается как ошибка в результатах валидации. Но когда добавляешь autocomplete="off" к текстовому полю, а валидатор говорит, что все пропало, то это как-то глупо. И чтобы получить passed от валидатора приходится навешивать это через js, но, фактически, это же хак, потому как валидатор не понимает JS и не может парсить динамический контент.
                        +1
                        Тем не менее, я могу увидеть в валидаторе, что единственное что изменилось — это автокомплит. А если я с самого начала не заморачивался валидацией, то этот инструмент мне и не поможет: было в нем 52 предупреждения, а стало 78 — ну так кто ж следит-то за ними? Так что изначально всё-таки нужно страницу довести до ума.

                        Кстати, для автора текста в фф'овском расширении HTML Validate пригодилась бы опция «забить на эту ошибку», она бы ему позволила не париться о своих спецатрибутах, но проверять другие траблы.
                        +3
                        А есть возможность валидировать только синтаксис и вложенность тегов без DTD. На мой взгляд этого было бы достаточно для большинства случаев и не выдавало ошибки там, где их нет.
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Под синтаксисом я понимаю набор правил, которые позволяют сказать, что данный набор байтов — html код. Теги, экранирование спецсимволов, атрибуты тегов.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                Теги и атрибуты вообще, равно как и экранирование у (X)HTML и XML общие
                                Да ладно, первое же отличие
                                <img src="">
                                <img src="" />
                                • НЛО прилетело и опубликовало эту надпись здесь
                        +3
                        Следует четко понимать, что эта статья не призывает наплевать на спецификации и валидацию, а всего лишь призывает использовать необходимые вам техники, которые сделают работу легче или результат — лучше, даже при том, что они не пройдут валидацию.
                        Просто мои комментарии, выражающие подобное отношение к валидации, в некоторых случаях вызывали возмущение, как будто я призываю писать код как попало. Это не так.
                          –1
                          Иногда, при работе над достаточно крупными проектами, в какой то момент страница может «развалиться» из за одного не закрытого тега (особенно в случаях с недобросовестными программистами). И с первого взгляда не понятно где это произошло.
                          С помощью валидатора это место быстро находится. Это в случае валидного документа. В случае невалидного придется сначала промотать предыдущие 284 ошибки.
                            +1
                            Это как раз к проверкам #1 и #2. Спорная #4 делает другое.
                              0
                              Да я в общем, о пользе
                            +1
                            Я сторонник использования пользовательских атрибутов в HTML тэгах для хранения дополнительных мета-данных, относящихся к определенному элементу.
                            HTML5 предоставляет для этих целей валидный инструмент — атрибуты data-*="".
                              +3
                              Да

                              Валидация HTML5 исправит некоторые проблемы, которые были с валидацией HTML 4. Она явно позволяет употребление пользовательских атрибутов (они должны начинаться с data-)
                                0
                                Круто! Я тоже использую вспомогательные атрибуты.
                                А раз для них теперь есть дата «data-», то можно использовать Валидатор.
                                Мне нравится.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                На самом деле автор (и я тоже) призывает не к эмоциональному холивару, а к взвешенному обсуждению :)
                                  +3
                                  самые лютые, жёсткие холивары так и начинаются — с предложения спокойно всё обсудить. ))
                                0
                                Виталий Харисов ответил когда-то на вопрос, для чего в Яндексе валидность примерно так: если наш документ проходит валидацию, а в браузерах находятся глюки — это позволяет нам писать багрепорты производителям браузеров.
                                  +1
                                  Ну в Яндексе по-моему с валидностью не очень. У заглавной страницы так точно :)
                                    +1
                                    Ждут фиксов на свои баг-репорты? :)
                                      0
                                      Забили на валидность главной, слишком сложно и незачем поддерживать.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      Ещё не все основные производители браузеров зарелизили поддержку HTML5, потому в живых проектах думаю это преждевременно. А вот в проектах, которые выйдут в паблик после релизов FF4 и IE9 можно, наверное, использовать уже сейчас в разработке и бета-тестах (если наплевать на пользователей WinXP+IE6-8).
                                      0
                                      Я всегда стараюсь верстать валидные страницы, в то же время понимая что некоторые корректные элементы не пройдут валидацию… по возможности пробую обойтись без них
                                        +8
                                        Полная чушь от начала и до конца: вас никто не просит писать валидный код — пишите какие хотите свистоперделки. Валидатор проверяет соответствие спецификации и только. Не хотите соответствовать — не соответствуйте. Как вообще валидность или не валидность кода связана с вебразработкой? Я считаю, что валидатор быть обязан и обязан быть максимально жёстким, а дальше уже личное дело каждого- будет он гоняться за валидностью и соответствию стандартам или нет.

                                        P.S. Личная позиция по поводу требований валидности для кода: любое отклонение от спецификаций должно быть чётко аргументировано. То есть писать невалидный код можно (и иногда нужно!), но всегда надо чётко аргументировать причины вашего выбора. Иначе будет бардак. И без валидаторов будет бардак.
                                          –4
                                          Да, и не используйте strict DTD и вообще DTD если не хотите соответствовать стандартам, всё очень просто. Браузеры вас прекрасно поймут и без доктайпа.
                                            +2
                                            Григорий Остер, перелогинтесь.
                                              0
                                              Поймут но не все. Проверено. Самым безопасным считаю использование переходного док тайпа, а не стрикта. Так по-моему лучше всего получается.
                                                +2
                                                Ну да. Я просто к тому, что глупо писать strict и использовать, например, фреймы или всякие устаревшие атрибуты у тегов вроде color. Вы если заявляете strict — то и пишите strict код.
                                                  0
                                                  > Так по-моему лучше всего получается.

                                                  Мистика прямо! Вы про существование Quirks mode вообще в курсе? :)
                                                    0
                                                    Причём здесь Quirk mode? Не описан доктайп — врубается Quirk. Разные CSS для разных (старых) браузеров ещё никто не отменял. К тому же, я не против доктайпа как такового. Quirk нуден если доктайп не описан вообще.
                                                      0
                                                      Разные CSS для разных (старых) браузеров ещё никто не отменял.

                                                      Только зачем этот анархонизм, который остался со времен IE5?
                                                      IE6 уже поддерживает Strict Mode с правильной моделью и обычно с головой достаточно одного файла + пару-тройку html>body для IE6 и html>/**/body для IE7 хаков.
                                                0
                                                Да проблема в том, что допустим я совершил синтаксическую ошибку в коде — это плохо, но браузер это съест, но валидатор покажет ошибку и я ее исправлю. Допустим, я написал autocomplete=«off» сами знаете для чего, — это не плохо, браузер это нормально поймет, но валидатор выдаст ошибку (не предупреждение!).
                                                  0
                                                  Ну и в чём проблема? Прогоните через валидатор и увидите свою ошибку. Валидатор-то есть, слава Богу, так что пользуйтесь.
                                                    0
                                                    Оба случая в валидаторе будут помечены равнозначно — как ошибка, хотя на самом деле ошибка одна.
                                                      +1
                                                      На самом деле ошибки две. И именно ошибки. Стандарты пишут не просто так, не будет стандартов — будет анархия. Если вы гордо пишете в заголовке //W3C//DTD HTML 4.01//EN, то autocomplete — это тоже синтаксическая ошибка, поскольку в спецификации такого нет.
                                                        0
                                                        Итак, мы пришли к выводу, что Google Suggest и аналоги — это анархия :)
                                                          0
                                                          А при чём тут гугл саггест? Я вам не предлагаю соответствовать устаревшим стандартам, я говорю лишь, что валидатор обязан проверять код на валидность исходя из принятых стандартов и не давать поблажек.
                                                            0
                                                            Проблема в том, что валидатор и стандарты w3c неразрывно связаны. И если стандарты отстают от практических потребностей, то это проблема и стандартов и валидатора, который используют конечные разработчики для проверки своего кода.
                                                –3
                                                Да здравствует великий tag soup!

                                                > Есть вещи, которые поддерживаются большинством браузеров ( в, после ), которые являются невалидными, но иногда очень необходимы для правильной работы.
                                                дальше можно уже не читать… ибо бред. не может нормальный человек до такого додуматься

                                                валидация нужна лишь на основную проверку правильности порядка тегов, а вот остальное, действительно, можно опустить (кастомные аттрибуты и прочие спорные моменты, к примеру, нахождение меты content-type как можно выше в head)
                                                  0
                                                  meta charset должна находиться как можно выше по той простой причине, чтобы сформировать заголовок title у страницы правильный. Где-то читала (ссылки нету), что злоумышленник может сломать всю страницу при определённых обстоятельствах, т.к. определённые символы специфического шрифта в title до указания кодировки неправильно распознаются.

                                                  Ну и браузер должен знать в какой кодировке показывать title страницы.
                                                    0
                                                    Ой, что это я такой устаревший топик нашла? Даже и не обратила внимание на даты, простите.
                                                  0
                                                  Я лично за логичность и чистоту кода и это не мешает мне пренебрегать валидацией. Почему никто до сих пор не вспомнил про хаки для ИЕ6? Ни один хак никогда (скорее всего) не пройдёт валидацию т.к. хаков нет и не может быть в спецификации. Это уже скорее ухищрение для обхода багов 6-го осла, например. Любой стандарт потому и стандарт, что изначально предполагает максимально идеальный вариант хода событий. Короче валидатор наивно полагает, что абсолютно все браузеры одинаково хороши и требует стандартизированного к ним отношения. Но мы-то с вами знаем…
                                                    0
                                                    Валидатор про браузеры ничего не предполагает, он лишь фиксирует факт следовал ли разработчик рекомендациям стандарта или нет.
                                                      0
                                                      Почему никто до сих пор не вспомнил про хаки для ИЕ6? Ни один хак никогда (скорее всего) не пройдёт валидацию т.к. хаков нет и не может быть в спецификации.

                                                      Ну почему же? Ведь хак html>body вполне валиден, а он обычно и используется для обхода проблем IE6
                                                      +3
                                                      html — язык разметки. Точно такой-же пост можно было написать и про русский язык.
                                                      Либо вы упорно говорите и пишете по русски правильно, надеясь что рано или поздно все будут делать также, либо вы говорите и пишите как вам удобно, соблюдая элементарные правила. А валидатор — это такой grammar nazi.

                                                      IMHO — html пишется для роботов и он должен быть валидным. В этом случае если робот неправильно обрабатывает валидный код, то это баг робота. А всех роботов рано или поздно починят, если не люди то другие роботы.
                                                      Я идеалист, простите меня.
                                                        +3
                                                        вы пакман, а не идеалист
                                                        0
                                                        Технически код можно делать невалидным. Идеологически можно поспорить, но железных аргументов не найдется ни у одной из сторон.
                                                        А мне просто нравится, когда код чистый и валидный. Я рассматриваю этот вопрос в эстетическом плане. Дополнительных трудозатрат у меня на это не возникает, так почему бы не сделать себе приятно?
                                                          0
                                                          А что Вы делаете в случае autocomplete и подобных? :)
                                                            –2
                                                            javascript
                                                              +2
                                                              Ну Вы понимаете, что в реальности навешивание autocomplete через JS — это хак валидатора. Если бы валидатор генерировал страницу как браузер и потом проверял валидность, такой вариант не прошел бы. Так что на самом деле код не валидный, мы лишь просто обманули валидатор таким образом.
                                                                0
                                                                ну и что? Повторюсь. Я делаю это для собственного удовольствия.
                                                                  +1
                                                                  Да я понимаю. Просто в конечном итоге погоня за значком валидности может обернуться не одним десятком килобайтов JS.
                                                                    0
                                                                    Ни разу не сталкивался с таким. Возможно, это зависит от привычного стиля, способа верстки.
                                                                      0
                                                                      Если Вы исключительно верстальщик, то да. Если же у Вы разрабатываете полноценное RIA со всеми вытекающими, то тут столкнетесь наверняка.
                                                                        0
                                                                        Нет, я не верстальщик. И как-раз верстальщику сложнее, он не сможет изменить логику приложения, в случае чего.
                                                                        Сразу оговорюсь, что логику менять не приходится. Раньше все предусматривал на стадии проектирования, сейчас такие действия выполняю полностью «на автомате», не задумываясь.
                                                              +1
                                                              Ни разу не сталкивался с ситуацией где требуется атрибут autocomplete только для того чтобы отключить autocomplete.
                                                              Как правило его выключают по причине того, что он мешает какому-либо js обработчику поля. Посему и сменить этот параметр можно и нужно исключительно при навешивании этого самого обработчика.
                                                                +1
                                                                Поле ввода для номера кредитной карты, CVV и срока действия — самый простой и яркий пример.
                                                                  0
                                                                  Действительно. Вероятно, не довелось мне сталкиваться с такими полями.
                                                                    +1
                                                                    Туда же можно отнести поле для ввода captcha и некоторые другие подобные поля.
                                                                +6
                                                                <?xml version="1.0" encoding="UTF-8" ?>
                                                                <!DOCTYPE html
                                                                	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                                                                	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
                                                                [
                                                                	<!ATTLIST input autocomplete (on|off) "on"> 
                                                                ]>
                                                                <html xmlns="http://www.w3.org/1999/xhtml">
                                                                	<head>
                                                                		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                                                                		<title>Insert title here</title>
                                                                	</head>
                                                                	<body>
                                                                		<form action="http://somewhere/" method="post">
                                                                			<div>
                                                                				<input name="test" type="text" autocomplete="off" />
                                                                			</div>
                                                                		</form>
                                                                	</body>
                                                                </html>
                                                                
                                                                Стандарты вещь достаточно гибкая, их не обязательно ломать.
                                                                  0
                                                                  Если такое добавлять для каждого кастомного атрибута, то размер страницы разрастется до неприличных размеров.
                                                                    +1
                                                                    До каких таких размеров? До размеров noindex и autocomplete? Лишние 100 байт не играют большой роли в современных html-страницах на 100 и более килобайт.
                                                                      0
                                                                      на noindex и autocmplete кастомные тэги/атрибуты не заканчиваются.
                                                                        +1
                                                                        К сожалению, в ие6 символы ]> вылазят на страницу.
                                                                          +1
                                                                          пусть горит в аду…
                                                                            +2
                                                                            Не только в IE, но и в FF. И, насколько я понимаю, при отдаче как «text/html» избежать этого не выйдет.
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                          0
                                                                          спасибо, про ATTLIST не знал…
                                                                          ну, мне всегда хватает родных атрибутов в любой верстке, но на будущее может пригодиться.
                                                                            0
                                                                            Повеяло 2007 годом.
                                                                            XHTML истерия,
                                                                            поиск причин зачем же нам нужен этот X,
                                                                            горы хаков, чтобы сделать это истинным X да еще и как-то сохранить работоспособность в древних браузерах,

                                                                            <!DOCTYPE html>
                                                                            <html>
                                                                                <head>
                                                                                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                                                                                    <title>Insert title here</title>
                                                                                </head>
                                                                                <body>
                                                                                    <form action="http://somewhere/" method="post">
                                                                                        <div>
                                                                                            <input name="test" type="text" autocomplete="off">
                                                                                        </div>
                                                                                    </form>
                                                                                </body>
                                                                            </html>
                                                                              +1
                                                                              уберите Ctrl+Enter…

                                                                              на чем я там остановился :)
                                                                              желтые страницы смерти на сайтах истинных фанатов,
                                                                              и доктайп в килобайт кода.

                                                                              К счастью те времена прошли.
                                                                                0
                                                                                Не нажимайте Ctrl+Enter.
                                                                        –1
                                                                        Пока коментов мало, схожу за попкорном.
                                                                        Для статистики: не понимаю зачем делать невалидно, елси можно делать валидно. Валидность не цель, а инструмент для быстрого вычисления ошибки в коде.
                                                                          +1
                                                                          Затем, что стандарты, а вместе с ними и валидатор, устарели и не соответствуют реальным потребностям.
                                                                            0
                                                                            Ещё раз: валидатор это инструмент, такой же как например комментарии в коде.

                                                                            Если вы делаете валидный код и вставляете туда 5-6 невалидных тэгов, то вы точно также сможете пользоваться этим инструментом.

                                                                            Если у вас вся страница состоит из говнокода, то пользоваться этим инструметом вы уже не сможете.

                                                                              +1
                                                                              Посмотрите на проект ARIA. Там кастомные атрибуты повсюду. И ошибок валидатора будет куча. Но это вовсе не говнокод.
                                                                                0
                                                                                по запросу «ARIA» миллион сайтов. Про какой поект идёт речь?
                                                                                  0
                                                                                  В статье есть ссылка ;)
                                                                                0
                                                                                *блин, отрпавилось раньше времени
                                                                                Найти незакрытый тэг среди 4х ошибок проще, чем найти его в куче невалидного кода. Может быть вы знаете для этого другие, более удобные инструменты?
                                                                            0
                                                                            зато можно поставить кнопочку, что верстка валидная и использовать это как одно из своих ключевых преимуществ по сравнению с другими студиями, которые делают чёрти как, а мы по стандартным, ГОСТам и так далее :-) вообщем, с точки зрения простого прагматика, валидатор — вещь полезная и нужная и даже не важно, дают ли все эти стандарты что-то или нет — просто это ещё одно ваше ключевое преимущество
                                                                              +2
                                                                              Отвечу цитатой :)

                                                                              Валидный HTML может служить поводом гордиться самим собой, но само по себе это не является показателем мастерства. Ваш валидный код не всегда лучше выполняет свои функции чем мой невалидный.
                                                                                0
                                                                                не является, так же как участие и призовые места в каких-либо соревнованиях ещё ничего не говорят сами по себе, партнёрство с известным брендом тоже, всё вместе в целом создаёт впечатление правильной компании…

                                                                                в конечном итоге лучше живут ведь не те, кто делает что-то лучше, а те, кто продаёт что-то лучше…

                                                                                ну, есть, например, успешные юми цмс и бритрикс… их знают, их хотят… я не программист, было бы неправильно мне оценивать качество кода этих цмсок, но уверен, это не самые лучшие представители с точки зрения красоты кода, быстродействия…
                                                                              +1
                                                                              Заказчикам абсолютно без разницы валиден код или нет — это факт. Сейчас делаем сайт по производству фурнитуры для мебели. Офис заказчика находится прямо в цехе. Как вы думаете если попытаться доказать своё преимущество перед др. студиями и объяснить заказчику, который всю жизнь точил детали на станке, что мол мы делаем по стандартам, а вон те вон, делают не по стандартам но визуально и функционально никакой разницы нет, то он вас поймёт и оценит? Тут нужен только прагматичный подход. Робит — круто. Не робит — не круто. Остальное для холивара.
                                                                                +1
                                                                                Не все заказчики такие (:
                                                                                  –2
                                                                                  Если заказщику нужен сайт, то ему без разницы,
                                                                                  если заказщику нужен код, который придётся поддерживать, то выберут того, кто верстает валидно
                                                                                    +4
                                                                                    Это типичное заблуждение, что валидный код проще поддерживать.
                                                                                    В погоне за валидностью вот некоторые установку атрибутов в JS выносят, поди найди потом, откуда он берется. Попытки обмануть валидатор, чтобы он не заметил невалидный код также мешают человеку впоследствие поддерживать его.
                                                                                      0
                                                                                      Идиотов конечно везде хватает, но я не про клинические случаи сейчас, а про тенденцию.
                                                                                      В крайних случаях, если нужно — можно добавить невалидные атрибуты и пару невалидных тэгов. Но всё остальное должно быть DTD XHTML 1.0 Strict.

                                                                                      Конечно можно в половине кода закрывать тэги «img» «br» «hr», а в другой половине не закрывать. Но за такое хочется руки оторвать.
                                                                                      0
                                                                                      Вам часто встречался заказчик, который говорит «Мне нужен код, который придётся поддерживать»? ) Заказчику, если мы говорим о сайтах, нужен конечный ПРОДУКТ, который он будет поддерживать через админку или ещё как-то. Сам код ему нахер не нужен.
                                                                                      0
                                                                                      разницы нет до тех пор, пока заказчик не захочет «крутую кнопку о том, что все валидно, как у Толяна на сайте по производству помповых насосов»…
                                                                                        +1
                                                                                        Те же Лебедевцы, например, да и не только они, на сколько знаю, перешли на доплату если надо сверстать кроссбраузерно с ИЕ6. Тоже самое можно сделать и с валидностью. Если заказчику уж прям сильно надо кнопку, то без проблем. Как говорится «за ваши деньги — любой каприз».
                                                                                          –1
                                                                                          Если сайт разрабатывается с нуля, то валидность обеспечить гораздо легче, чем поддержку IE6
                                                                                      +1
                                                                                      Лучший валидатор — это браузер.
                                                                                        0
                                                                                        Просто если написать например — это уже не валидно, а если — валидно. Разница в пробеле перед закрывающим слэшем. Мне пофигу на этот пробел т.к. всё работает, а валидатору нет.
                                                                                        ВордПресс, например, автоматом этот пробел добавляет в каждый закрывающийся тег. Выходит ВП вообще надо выкинуть на помойку и всех блоггеров пересадить на Друпал или Битрикс )
                                                                                          0
                                                                                          Тэги съел парсер (:
                                                                                            0
                                                                                            Блин ). Тогда передам на пальцах: (ИМГ срц= "..." пробел слэш) Если есть этот Пробел, то это не валидно. Если слэш стоит сразу после "", то валидно. Как-то так.
                                                                                              0
                                                                                              хинт: для парсера хабра можно юзать &lt; и &gt; :)
                                                                                                0
                                                                                                Неправда ваша. Если мы о XHTML, то с пробелом перед слешем или без — пофиг, оба варианты валидны.
                                                                                                Сдаётся мне, вам вот этим навеяло.
                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                0
                                                                                                Полностью согласен, самое плохое, что этот миф вырос на столько, что валидность стали требовать заказчики, обычные менеджеры, которым очень трудно объяснить технические нюансы.
                                                                                                  0
                                                                                                  Кстати, можно написать свой валидатор, без блэкджека и шлюх, а просто для того, чтоб им пользоваться удобней было.
                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  0
                                                                                                  Думаю, валидность написанного кода следует сравнивать с грамотностью при письме, а валидатор с проверкой правописания, скажем в Ворде или в браузере.

                                                                                                  В нашей речи и в синтаксисе языка разметки есть определенные правила. И то, что нарушая их мы можем не потерять смысловой посыл (например, написав «карова» мы все равно будем поняты), тем не менее, не лишает нас желания писать грамотно. Ну и понятно, что для проверки уровня своей грамотности мы можем использовать удобные инструменты в программах, которыми пользуемся. Валидатор, для языка разметки, и есть таким инструментом.
                                                                                                    +3
                                                                                                    Тут должна быть другая аналогия :) Можно, например, употребить глагол «гуглить» и тебя поймут, но придет профессор и скажет, что нет такого слова в словаре. И чтобы удовлетворить профессора придется заменить одно слово на фразу вроде «осуществить поиск во Всемирной паутине с помощью поисковой системы Google».
                                                                                                      0
                                                                                                      Обратное, кстати, тоже верно. Слегка перефразируя цитату из корневого поста:
                                                                                                      валидный Русский язык не гарантирует корректную подачу мысли
                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                    0
                                                                                                    C https://addons.mozilla.org/en-US/firefox/addon/249/ волей не волей приходится писать валидно что бы красный кружок не напрягал.
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                        0
                                                                                                        Готов послушать Ваш вариант про валидный autocomplete :)
                                                                                                          +2
                                                                                                          Код валидным быть не должен, что тут обсуждать. Код должен быть рабочим и легко поддерживаемым, а это отнюдь не одно и то же.
                                                                                                          Если верстальщик считает валидатор, а не качественно решенную задачу, мерилом своего профессионализма и крутости, то он говнокодер, да.
                                                                                                            0
                                                                                                            Слишком толсто.
                                                                                                            0
                                                                                                            Разве пункт 4 не является частью третьего?
                                                                                                              0
                                                                                                              не совсем. 3-ий проверяет то, что есть и в коде и в dtd. Например, что блочный элемент не вложен в строковый. 4-ый «подметает» остатки 3-го — выявляет то, что не описано в dtd
                                                                                                              0
                                                                                                              Я с помощью валидатора выявляю незакрытые тэги.
                                                                                                              А так: хабр, гугл, яху, яндекс — везде ошибки и никто же не парится по этому поводу.
                                                                                                                  +2
                                                                                                                  Я вообще не понимаю, о какой валидации в реальной жизни может идти речь.

                                                                                                                  yandex.ru не валиден
                                                                                                                  google.com не валиден
                                                                                                                  habrahabr.ru не валиден

                                                                                                                  Более того, код который выдает РСЯ тоже не валиден. То есть, если у вас на сайте стоит реклама от Яндекса — то ваш сайт автоматически не валиден

                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      0
                                                                                                                      А почему бы для пользовательских элементов/атрибутов не использовать другой namespace? Понимаю, иногда не хочется усложнять читабельность, но тем не менее <my:foo/> или <div my:custom_attr='123'> вроде не выглядит чем-то страшным.
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          0
                                                                                                                          Будет ругаться, так как валидатор заточен только под HTML, но не под XML или SGML.
                                                                                                                        +9
                                                                                                                        Вот такой вариант будет валидным всегда!

                                                                                                                        if (stripos($_SERVER['HTTP_USER_AGENT'], 'W3C')!==false){ die(); }

                                                                                                                        В этом духе. Изобрел этот метод когда реально невозможно было сделать валидную верстку, а заказчика ну никак не переубедишь, давай валидную верстку. Что вы будете делать? Переверстывать весь макет, и просрочите все сроки или вставите одну строчку?
                                                                                                                          –3
                                                                                                                          «Валидация» — лишь модное (уже нет, к счастью) слово, которым верстальщики хоть как-то оправдывают свое существование. Поскольку сайты тестируются браузерами, то единственным валидатором может быть только браузер. Все остальные инструменты для тестирования идут в дополнение с самой разной степенью значимости.
                                                                                                                            0
                                                                                                                            Валидация и браузер — разные понятия. Но, похоже, что дело Самизнаетекого живет и процветает.
                                                                                                                            В мире, кроме браузеров, существуют еще программы, которые умеют работать с HTML, CSS, XML и так далее. Подумайте над этим на досуге.
                                                                                                                              0
                                                                                                                              А никто не говорит, что это одно и то же. Просто валидация бесполезна. Точка. Польза, которую она приносит слишком мала, чтобы об этом задумываться.

                                                                                                                              *Любой* HTML в подобных программах предварительно должен быть прогнан через программы аля tidy. Я грабберы писал, т.ч. немного в курсе.

                                                                                                                              Огромное кол-во существующего невалидного HTML не позволит браузерам его не обрабатывать, а свобода, которую дают браузеры, всегда будет порождать еще больше невалидного HTML-a. Это замкнутый круг. Есть люди которые это понимают и используют в работе, а есть те, кто только и способен дрочить на магические слова «валидация», «семантика» и т.п.

                                                                                                                              С XML разговор другой. И, кстати, ни один браузер невалидный XML не отобразит.

                                                                                                                              ЗЫ: На всякий случай: поскольку я много работал с XML, мой HTML всегда написан в строгом стиле и валидатор выдает очень мало ошибок. Поэтому я на него даже и не смотрю. Но это вопрос не технологий, а отношения к работе.
                                                                                                                            –1
                                                                                                                            Мне кажется, если ИЕ6 уйдет из бытия, то все ходивары про валидацию сойдут на нет.
                                                                                                                            Т.е. IE6 — зло всех времен и народов.
                                                                                                                              +1
                                                                                                                              Вы стать вообще читали? :) IE6 тут причем? :)
                                                                                                                                0
                                                                                                                                валидация из-за ИЕ6 — ИМХО
                                                                                                                                небыло бы ослика — «нафига козе баян»
                                                                                                                                  0
                                                                                                                                  Я имею ввиду: если бы все браузеры понимали бы код одинаково (кроссбраузерность бы отсутствоала), то не нужна была бы валидация, т.к. разработчик сразу бы видел как его страница отображается.
                                                                                                                                  Валидация, по сути, показывает, насколько ИЕ шаловлив.
                                                                                                                                    0
                                                                                                                                    опять не то плучилось что хотел сказать…
                                                                                                                                    короче — ИЕ — зло!
                                                                                                                                  0
                                                                                                                                  это как по Фрейду — «во все виноват секс»
                                                                                                                                +1
                                                                                                                                hmtl (xhtml) должен быть валидном настолько, чтобы его обрабатывал без краха xlst шаблонизатор.
                                                                                                                                  –1
                                                                                                                                  Вам стоит разобраться в терминах перед тем, как писать подобное
                                                                                                                                  0
                                                                                                                                  Нас поймут, если мы будем писать неграмотно. Но мы стараемся следовать правилам русского языка.
                                                                                                                                      –1
                                                                                                                                      Слово «гуглить» вообще надо выпилить в печку.
                                                                                                                                        0
                                                                                                                                        Ну в английский (или американский?) словарь этот глагол уже добавили, так что…
                                                                                                                                    0
                                                                                                                                    Валидатор нужен тому, кто учит технологию. Кто выучил ее, тому он не нужен.
                                                                                                                                      +1
                                                                                                                                      Гораздо более важно, чтобы сайт отображался одинаково в разных браузерах. Да и бывает приходится чем-то жертвовать ради валидации…

                                                                                                                                      microsoft.com — 104 ошибки
                                                                                                                                      google.com — 41 ошибка
                                                                                                                                      habrahabr.ru — 35 ошибок

                                                                                                                                      ток что этот валидатор до фени.
                                                                                                                                        –1
                                                                                                                                        Это статья уже морально стара, об этом можно было говорить еще несколько лет назад. Сейчас наступает эпоха HTML5 и даже MS стал прикладывать усилия по подавлению младших версий IE, и активно пиарить IE9. В настоящее время не профессионально говорить об этом. А все приведенные доводы автора это лишь отмазка технически слаборазвитого разработчика, которому лень доводить код до идеального состояния, а также которому лень искать новые решения кроме как добавить не валидный аттрибут.

                                                                                                                                        На счет автора… странно, что JS-developer из Yahoo может говорить такие вещи.
                                                                                                                                          0
                                                                                                                                          1. Эпоха HTML5 еще не наступила и посмотрим насколько затянется ее наступление.
                                                                                                                                          2. Это не отмазки, это реальные проблемы, выше уже обсуждали конкртеные примеры. Готов послушать Ваше решение для autocomplete="off"
                                                                                                                                          3. Уж поверьте, ему то не лень искать технические решения. Советую ознакомиться с его книгой High Performance Javascript :)
                                                                                                                                          +1
                                                                                                                                          Валидация всего лишь приучает разработчиков писать код правильно, в том формате который спокойно поймут другие разработчики и смогут поддерживать если что. Со временем надобность валидации отпадает, но привычка писать хороший код остается.

                                                                                                                                          Согласитесь, есть разница между:

                                                                                                                                          <UL class=list>
                                                                                                                                          <LI>Текст
                                                                                                                                          </UL>
                                                                                                                                          <P><B>Текст</P></B>


                                                                                                                                          * This source code was highlighted with Source Code Highlighter.


                                                                                                                                          и

                                                                                                                                          <ul class="list">
                                                                                                                                            <li>Текст</li>
                                                                                                                                          </ul>
                                                                                                                                          <p><b>Текст</b></p>


                                                                                                                                          * This source code was highlighted with Source Code Highlighter.
                                                                                                                                            0
                                                                                                                                            Конечно, есть разница.
                                                                                                                                            Но сейчас первому варианту может научить только какая-нибудь книга вроде «Создай свой мегасайт за 24 часа» :)
                                                                                                                                              0
                                                                                                                                              Сейчас да, но в те времена когда я начинал писать html такой код был нормой. Потом появилась мода на валидацию и многие научились писать правильный, читабельный код. Сейчас большинство пишет нормальный код и надобности в валидации больше нет.
                                                                                                                                                0
                                                                                                                                                Да, в те времена и книжек «HTML за 24 часа» было больше :)
                                                                                                                                            –2
                                                                                                                                            У меня есть интернет-магазин.

                                                                                                                                            Хтмл-код, который отдается посетителю супермегаНЕвалидный, например:
                                                                                                                                            <b><p>qwe</b></p>
                                                                                                                                            <ul><li>qweqwe2</ul>

                                                                                                                                            Однако это не мешает успешно продавать интернет-магазину товаров на несколько десятков тысяч рублей в день.
                                                                                                                                            Так что все эти валидации на мой взгляд — удел параноиков. Главное, чтобы сайт выполнял свою основную задачу, в моем случае — продавал. На остальное наплевать.
                                                                                                                                              –1
                                                                                                                                              Вот на тебя и плюют, когда с мобилок нормально зайти не могут, когда в отдельных браузерах вёрстка едет к чертям. Мне не повезло, я в вёрстке немного разбирась, поэтому, на таком сайте никогда ничего не куплю. Сразу пахнет шарашкиной конторой.

                                                                                                                                              Доходчивая аналогия: Недавно покупал молоко в коровьем хлеву. Молоко просто супер, сливок пол-банки. Но вот обстановочка… Мощный аромат навоза, под ногами навоз, в сторону посмотришь — из коровы навоз валится. Мне в моих лакоботах сложно было пробраться до холодильника. Ты продаёшь в таком же хлеву. Кругом говно, в конце пути товар. Такой путь пройдёт не каждый.
                                                                                                                                                0
                                                                                                                                                Одно дело супермегаНЕвалидый, другое дело если код — полное говно. Вот будет смеху когда вы захотите расширять функционал и столкнетесь с плевками разработчиков, завышенными бюджетами и раздутыми из-за этого сроками.
                                                                                                                                                0
                                                                                                                                                1, 2 и 4 можно получить и напрямую в текстовом редакторе.
                                                                                                                                                  0
                                                                                                                                                  Мне кажется, нет никаких причин гнаться за идеальной валидностью ценой потери удобных инструментов (noindex, autocomplete и т.д.). Однако, несоблюдение основных важных правил (неправильные вложения тегов, отсутствие закрывающих слешей, объявление стилей в теге и т.п.) является проявлением лени и непрофессионализма.
                                                                                                                                                    0
                                                                                                                                                    Автор не осилил DTD и XML Schema и ругает валидацию. Неужели так сложно при использовании каких-то доп атрибутов, тегов и т.п. их нормально определить?
                                                                                                                                                      +1
                                                                                                                                                      Почитайте комментарии выше.
                                                                                                                                                      0
                                                                                                                                                      плохо сделано тупо. валидатор проверяет на соответствие стандарту. Однако сам стандарт является не жестким кодексом правил, а просто сводом рекомендаций. Кроме того плевать как код проходит валидацию, работать с этим кодом будет браузер, а не валидатор.
                                                                                                                                                        +1
                                                                                                                                                        Странно, когда мне нечего было делать, ну например я все заверстал проверил во всех «популярных браузерах», то последнее что я делаю это проверяю на валидность(чаще всего все-таки не проверяю..)

                                                                                                                                                        Многие работодатели очень любят оценивать верстку именно по валидности, часто берут на работу именно тех кто пишет по стандартам, но никогда на собеседовании не замечал, чтобы страницу проверяли на скорость загрузки и ее Вес, действительно зачем?!0_o, ведь так важно получить иконку на сайт W3C, но я не говорю, что валидность не нужна, я считаю нужна по большинству выше сказанных причинам.

                                                                                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                                                        Самое читаемое