Почему 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 как контент (которым он не является), а не как формальный язык (которым он является): авторы контента считались (и считаются) нетехническими людьми, и было замечено, что их заставляют решать проблемы с "контентом" слишком жесткое требование.

Другие вопросы по тегам