На какой DOCTYPE я должен ориентироваться сегодня?

Я занимаюсь рефакторингом веб-приложения .Net, находящегося в

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 

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

Существуют похожие вопросы, но ответы на них, возможно, уже устарели.

В чем разница, преимущества и недостатки между режимами стандартов и причуд, с какими причудами я могу столкнуться с разными типами доктрин?

Мне сказали, что тип документа XHTML предпочтительнее для интеграции AJAX, поскольку UpadtePanel сериализует его и для этого должен иметь тип XHTML do, насколько это верно?

А что касается совместимости браузеров, в каком направлении движутся браузеры с точки зрения DOCTYPE, есть ли общая тенденция или они различаются?


person GenEric35    schedule 14.07.2010    source источник
comment
@Marcel Korpel: спасибо за дополнительную информацию   -  person GenEric35    schedule 15.07.2010
comment
Я нашел плагин проверки HTML5 для Visual Studio, который добавляет окно свойств и свойств для атрибутов элементов HTML5. blogs.msdn.com/b/webdevtools/archive/2009/11/18/   -  person GenEric35    schedule 15.07.2010


Ответы (5)


Тип документа HTML5, который

<!DOCTYPE html>

XHTML в значительной степени мертв как стандарт и в большинстве случаев никогда не был реализован правильно.

person Yann Ramin    schedule 14.07.2010
comment
-1 Я предупреждаю тысячи приложений REST, W3C и WHATWG, что XHTML мертв, и отбрасываю все четыре текущих проекта, над которыми работает моя компания. - person Rob; 15.07.2010
comment
W3C вряд ли является беспристрастной третьей стороной. Они написали чертову спецификацию, и им до сих пор нравится XHTML, и они используют его при каждой возможности, но они в значительной степени обрекли его на 2.0. (Не имеет обратной совместимости? WTF, y'all.) XHTML 2.0, вероятно, огромная часть того, почему существует даже HTML 5. - person cHao; 15.07.2010
comment
@Rob: Большая часть XHTML фактически обслуживается как text / html и поэтому анализируется как HTML (НЕ XHTML). Если вы обслуживаете его правильно, вы можете обнаружить, что то, что вы считали правильным XHTML, больше не работает, потому что это зависело от снисходительности анализа HTML. У XHTML были свои преимущества, но он также был чрезвычайно хрупким (и, несмотря на то, что говорят DOCTYPE, он использовался очень мало), что привело к тому, что он стал в значительной степени мертвым стандартом. - person STW; 16.07.2010
comment
@STW - Несмотря на неправильное использование любителями и незнанием, XHTML жив и здоров для тех из нас, кто знает, как его использовать. Настоящая проблема связана с Internet Explorer, как и все в Интернете, а не XHTML, поскольку IE - единственный браузер, который не работает с ним (или чем-либо еще в этом отношении). - person Rob; 16.07.2010
comment
@ Роб: насчет Internet Explorer, он несовместим с XHTML? заключается в том, что он не может интерпретировать разметку, соответствующую XHTML, или это использование типа документа XHTML, которое что-то ломает, потому что я заметил, что макет моих страниц испортился, когда я изменил тип документа на XHTML, и мне пришлось много делать тонкой настройки, особенно удаления атрибутов из HTML-элементов и их замены CSS встроенными или во внешнем файле - person GenEric35; 16.07.2010
comment
@: cHao XHTML является частью HTML5 @ GenEric35: использование документа XHTML (при условии, что он действителен) никогда не должно нарушать ничего, что работало в HTML - браузеры не различают разные (действительные) типы документа. Если вы не имеете в виду валидатор W3C, который имеет значение. - person lucideer; 16.07.2010
comment
@ GenEric35: поддержка XHTML в IE 6/7/8 очень ограничена, у W3C есть рекомендуемый способ заставить IE обрабатывать XHTML как XML (обычно он будет рассматривать его как HTML, либо предложит пользователю загрузить файл ): w3.org/MarkUp/2004/xhtml-faq#ie - person STW; 17.07.2010
comment
XHTML мертв, Джим, но не в том виде, в каком мы его знаем. - person Dave Van den Eynde; 07.09.2010

Новинка - HTML 5.

<!DOCTYPE html> - это то, что вы используете для его указания. Вот и все. Ни имени DTD, ни URL-адреса, ни чего-то еще.

Если вы используете что-то похожее на XML, например .net, возможно, вы захотите использовать XHTML. Но не делайте этого по какой-либо другой причине; XHTML никогда не пользовался большой популярностью в качестве стандарта или, по крайней мере, почти никогда не использовался правильно.

person cHao    schedule 14.07.2010
comment
+1 для соображений .Net, это действительно приложение ASP.Net 3.5 с некоторыми вызовами WCF, сделанными из веб-приложения, и некоторыми AJAX. Приложение, скорее всего, скоро перейдет на ASP.Net 4.0. Я пытаюсь найти значение XHTML для .Net, до сих пор я слышал только слухи о том, что он требуется для AJAX, знаете ли вы о каких-либо конкретных требованиях или преимуществах XHTML для .Net? - person GenEric35; 15.07.2010
comment
@ GenEric35: Я не уверен, насколько это необходимо, но я действительно знаю Visual Studio, действительно хочет, чтобы ваш код был XML. Я также где-то читал, что есть пара элементов управления, которые не возражают против незакрытых элементов, что подразумевает, что почти все они работают. Пока вы закрываете свои теги, это не имеет большого значения, но теги ASPX в значительной степени являются XML, так что вы можете просто использовать XHTML и сэкономить кучу хлопот. - person cHao; 15.07.2010

Любой Doctype:

  • HTML 4.01 или XHTML 1.0
  • Строгий или переходный

служил как html (не html + xml) должен быть в порядке. Нет такой вещи, как лучший doctype, вам просто нужно выбрать тот, который соответствует вашим потребностям, а затем придерживаться его правил.

  • Избегайте Frameset, но если нужно, используйте атрибут title, чтобы описать роль каждого кадра для пользователя программы чтения с экрана (то же самое с iframe, кстати).
  • Режим Quirks (без Doctype) - это PITA, избегайте его любой ценой. Это было нормально 8 лет назад.
  • Нет пролога XML, если вы не обслуживаете html + xml (удачи с этим! Если вам нравятся сложные вещи, когда они не нужны, это ваш выбор)
  • Если вы вынуждены использовать атрибуты, которые запрещены в строгом режиме (например, target="_blank"), то используйте переходный режим: вот почему он был создан! И, пожалуйста, сообщите своим пользователям, что ссылка откроется на новой странице, будь то в тексте вашей ссылки или в ее заголовке. Это важно с точки зрения доступности.

HTML 5 - следующая большая вещь, мы ждем его, но пока он не будет работать в каждом браузере (я имею в виду IE без JS), не рекомендуется использовать его в "серьезных" публичные сайты. Это вообще черновик? Что, если вся его часть будет переписана за пару месяцев?
Мое веб-агентство использует его для своего веб-сайта, но мы не будем использовать его на клиентском сайте в ближайшее время: это слишком рано.

Дополнительное примечание: я часто вижу крылатые фразы вроде «современный веб-сайт в HTML5 и CSS3», подразумевающие, что CSS3 создан для HTML 5. В CSS3 ничего нет. связаны с HTML5 и уже могут быть использованы, если он изящно ухудшается в старых браузерах.
Вы можете создавать HTML5 с помощью CSS2.1 или HTML4.01 Transitional с последними анимациями CSS3, которые работают только в ночных сборниках webkit, без проблем .

person FelipeAls    schedule 14.07.2010
comment
Обслуживание XHTML как текста / html - плохая идея, но, к сожалению, очень распространенная проблема. Использование его в качестве HTML приводит к тому, что браузеры используют свой HTML-рендеринг - и действительный XHTML не обязательно является действительным HTML. Например, самозакрывающийся ‹div /› является допустимым XHTML, но недействительным HTML (он анализирует его как DIV /. Размещение пробела перед '/' (‹div /›) - это хитрость, позволяющая сделать его действительным XHTML и квази -valid HTML (синтаксический анализ рассматривает '/' как недопустимый атрибут и игнорирует его. - person STW; 16.07.2010
comment
@STW Конечные косые черты больше не являются недопустимым HTML - они совершенно допустимы. Пробел - это чисто устаревшая мера SGML, но на данном этапе HTML перешел от SGML. - person lucideer; 16.07.2010

Что бы вы ни выбрали, убедитесь, что ваш MIME-тип совместим с вашим DOCTYPE

Браузер будет использовать MIME-тип (ContentType HTTP-заголовка), чтобы определить, как обрабатывать вашу страницу. Например: DOCTYPE XHTML 1.1 Strict, обслуживаемый ContentType Text\HTML, анализируется как HTML.

DOCTYPE важен, но в значительной степени не имеет значения, если используется неправильный ContentType.

person STW    schedule 15.07.2010
comment
Я не на 100% уверен, что вы имеете в виду под своим смелым комментарием - все (действительные) DOCTYPE совместимы как с text / html, так и с application / xhtml + xml (и другими типами содержимого). DOCTYPE XHTML 1.1 Strict, обслуживаемый как text / html, является допустимым полиглотом (при условии очевидной проверки разметки). - person lucideer; 17.07.2010

Браузеры на самом деле никогда не использовали DOCTYPE для определения языка разметки вашего документа (вместо этого они используют HTTP Content-type), поэтому выбранный вами DOCTYPE никогда не имел особого значения - пока вы используете действительный DOCTYPE с некоторым описанием . Что вы выберете, зависит от вас.

Если вы пишете HTML, <!DOCTYPE html> является самым коротким для ввода и переводит все браузеры в стандартный режим (что вам и нужно).

Если вы пишете XHTML, <!DOCTYPE html> также совершенно законен (XHTML на самом деле вообще не требует DOCTYPE, поскольку он полностью полагается на HTTP Content-type, но нет ничего плохого в том, чтобы добавить DOCTYPE для переносимости.

Не используйте <!doctype html> - хотя это технически допустимый HTML, он недопустимый XHTML, поэтому он сломается, если вы когда-нибудь попытаетесь проанализировать свою страницу как XML.


Слегка ОТНОСИТЕЛЬНО ОТНОСИТЕЛЬНО: Некоторые здесь отмечают, что XHTML - "мертвый" стандарт - это неверно. XHTML был интегрирован в будущую спецификацию HTML5. Спецификация озаглавлена ​​« HTML5: словарь и связанные API-интерфейсы для HTML и XHTML ».

See:

person lucideer    schedule 15.07.2010
comment
@Rob Где я сказал исключить DOCTYPE? В первом абзаце я прямо сказал, что вам ДЕЙСТВИТЕЛЬНО нужен действующий тип документа. Извините, если вы неправильно прочитали мой пост, но все, что я сказал, не соответствует действительности. - person lucideer; 15.07.2010
comment
@lucideer - Я не согласен с тем, что вы сказали, что тип документа не используется для определения языка разметки, и доказательством этого является мой пример. Однако, перечитывая этот абзац, я вижу, что вы не сказали того, что меня больше тревожило; чтобы люди могли подумать, что вы говорите, что тип документа не важен. - person Rob; 15.07.2010
comment
@Rob Спасибо за ответ, но боюсь, мне придется снова участвовать в конкурсе. Если вы установите XHTML DOCTYPE с типом содержимого HTML, браузер будет отображать HTML, а не XHTML - это то, что я имел в виду, когда сказал, что DOCTYPE не определяют язык разметки. В предоставленной вами ссылке подробно описаны многие различные режимы рендеринга для языка разметки HTML - ни один из них никоим образом не применим к любому другому языку разметки. - person lucideer; 15.07.2010
comment
+1 - lucideer совершенно прав в этом - ContentType имеет приоритет, конечно, забавным фактом является то, что IE 6/7/8 только почти поддерживает XHTML: w3.org/MarkUp/2004/xhtml-faq#ie - person STW; 16.07.2010
comment
@STW правда, но IE9 наконец-то добавил поддержку, так что этот день еще может наступить. AmpleSDK также предоставляет несколько интересных уровней поддержки для старых IE. - person lucideer; 16.07.2010
comment
@lucideer lol, всего через 11 лет после вечеринки :) Лично я предпочел бы полноценную реализацию HTML-5 XHTML. Опять же, это Microsoft, и как бы я ни ненавидел ее, моим сайтам все равно нужно будет поддерживать их непродуманные бизнес-решения. - person STW; 16.07.2010
comment
11 лет и все еще сильнее, чем все, что было за это время: D Что касается того, что будет после вечеринки - с такими, как Facebook (Graph API), Drupal (версия 7), Yahoo (SearchMonkey) и Google (RichSnippets), только сейчас прыгают По поводу расширяемости XHTML вечеринка, кажется, только начинается. HTML5 - отличный набор API (DOM / canvas и т. Д.), Но как язык разметки он немного оторван от реальности. - person lucideer; 16.07.2010
comment
@STW - кроме того, что Люсидер ошибается. reference.sitepoint.com/css/doctypesniffing Тип контента не определяет стандартный режим и неверный doctype все еще может вызывать причуды. Кроме того, IE не имеет никакой поддержки XHTML, несмотря на любые уловки, чтобы заставить его работать. - person Rob; 16.07.2010
comment
@Rob lucideer прав, что ContentType является директивой более высокого порядка, чем DOCTYPE, он может немного ошибаться, говоря, что DOCTYPE не указывает, какую разметку вы используете, но его основная мысль верна (если вы используете неправильный ContentType, вы никогда не будет проанализирован так, как вы ожидаете от DOCTYPE). Итак, DOCTYPE эффективен только в том случае, если ответ имеет правильный ContentType - что касается ваших проблем с IE: да, IE использует его, чтобы определить, какой режим отображать - и да, IE9 будет первой версией с настоящей поддержкой XHTML. . Итак, суть в том, что любой DOCTYPE XHTML почти наверняка неверен. - person STW; 16.07.2010
comment
@ Роб Я думаю, что мы оба правы - мы просто используем разные термины. DOCTYPE запускает стандартный режим (в отличие от режима Quirks), который представляет собой два разных режима в ОДНОМ языке разметки (HTML). Content-type выбирает язык разметки. Например, если вы используете тип содержимого XML и вообще не используете DOCTYPE, вы не получаете режим Quirks, потому что это другой язык разметки (XML), режим quirks - это режим рендеринга, а не язык разметки. - person lucideer; 16.07.2010
comment
@lucideer, да, это то, что я имел в виду, и, возможно, это было непонятно. - person Rob; 16.07.2010