Почему HTML с плохим и неправильным использованием тегов все еще работает?
Версия tl;dr почему html, который не закрывает теги должным образом, все еще работает без ошибок?
Я изучаю все больше и больше HTML каждый день, но я все еще начинающий. Поэтому я не понимаю, почему плохо написанный HTML без правильного закрытия тегов все еще работает. Я использовал шаблон электронной почты для задачи на работе, и мне было любопытно, какой HTML-код стоит за ним, поэтому я загрузил код в редактор.
Я наткнулся на 9 отдельных тегов, которые не закрываются: <td> <center> <div> <p> <div> <td> <tr> tbody> <table>
Код начинается с <html>
пометить как следует, но в <body>
после <table>
а также <tr>
начинается другое <html> <head>... etc
набор тегов. В двух <style>
теги, они оба говорят одно и то же и имеют дополнительную закрывающую скобку li { margin-bottom: 10px; } }
,
Когда я загружаю только этот код в свой браузер, страница все еще визуально выглядит так, как это должно быть. В Firebug после первого тега body он пропускает таблицу, tr, html, head и body и сразу показывает первый <div>
,
Почему веб-страница (потому что я уверен, что это должно быть довольно распространенным явлением) с отсутствующими закрывающими тегами, <html>
а также <body>
теги и т. д. все еще способны нормально функционировать?
2 ответа
Я думаю, что это применение принципа робастности.
Будьте консервативны в том, что вы делаете, будьте либеральными в том, что вы принимаете от других
Я бы сказал, что это неизбежный результат в условиях конкурирующих браузеров. Если ошибка HTML не позволяет сайту работать в браузере A, но браузер B может угадать исправление, пользователи будут склонны использовать браузер B, так как A кажется сломанным. Это происходит с Netscape 3 или ранее.
Неверно сформированный HTML не работает правильно - браузеры пытаются угадать намерение структуры HTML и отображают, каким будет результат угадывания. Это является результатом неудачного решения разрешить отображение плохо сформированного HTML, а не отвергать его и заставлять автора исправлять такие проблемы.
Когда вы видите, что неверно сформированный HTML выглядит правильно на экране, это не результат правильного поведения: это результат удачной догадки со стороны браузера (очевидно, небольшую проблему легче решить, угадав, чем массивную структурную проблему, которая охватывает всю структуру HTML).
Все сводится к тому, чтобы рассматривать HTML как контент (которым он не является), а не как формальный язык (которым он является): авторы контента считались (и считаются) нетехническими людьми, и было замечено, что их заставляют решать проблемы с "контентом" слишком жесткое требование.