Великий або малий доктип?


182

При написанні доктрипу HTML5 який правильний метод?

<!DOCTYPE html>

або

<!doctype html>

Він буде першим, як правило, будь-який може бути використаний <! DOCTYPE html>
Shadow,

Я встиг відповісти на моє власне питання, але подумав, що залишу його у випадку, якщо інші матимуть подібну думку. Я особисто віддаю перевагу малі літери; більше нічого в HTML5 не є великим.
joshnh

11
Google.com використовує малі літери<!doctype html>
Лео Галлегіллос

3
@HelloWorld: Це тому, що малі літери стискаються краще, тому що вони більш поширені. Для сайтів, які отримують мільйони звернень на день, це може змінити значення.
Заз

А як щодо файлів SVG?
Вільям Ентрікен

Відповіді:


183

У HTML DOCTYPE є нечутливим до регістру. Наступні DOCTYPE дійсні:

<!doctype html>
<!DOCTYPE html>
<!DOCTYPE HTML>
<!DoCtYpE hTmL>

У серіалізаціях XML (тобто XHTML) DOCTYPE не обов'язковий, але якщо ви його використовуєте, він DOCTYPEповинен бути великим регістром:

<!DOCTYPE html>

Дивіться XML-серіалізацію HTML5, також "XHTML5" :

Зауважте, що якщо ви не замінюєте великі регістри DOCTYPEв документі XHTML, аналізатор XML поверне помилку синтаксису.

Другу частину можна записати малими літерами ( html), великими літерами ( HTML) або навіть змішаним регістром ( hTmL) - вона все одно спрацює. Однак, щоб відповідати Правилам розмітки поліглотів для XHTML-сумісних документів , сумісних з HTML , слід писати в малі літери.


9
Ні, це неправильно. У SGML декларація типу документа - це виробництво 110, у XML - це виробництво 28. В обох випадках воно оголошується як фіксований рядок "DOCTYPE" (що не є тегом , це ключовим словом ). Тож у канонічних визначеннях у відповідних стандартах SGML та XML це завжди великі літери. Якщо ви знайдете програмне забезпечення, яке дозволяє "маленький" тип документа, програмне забезпечення не відповідає стандартам. Браузери розроблені таким чином, щоб вони були "ліберальними в тому, що вони приймають", але сумісний процесор XML повинен позначати це як помилку перевірки.
Ічіро Фурусато

5
... і я повинен зазначити, що X / HTML5 також неправильно стосується цього. Як зазначено, XHTML5 просто недійсна розмітка XML, і не може бути. У специфікації X / HTML5 є численні помилки. Я не сприймаю це дуже серйозно. Той факт, що їм довелося створити " поліглотну розмітку " (абсолютно нова концепція), чітко говорить про те, що вони покарали.
Ічіро Фурусато

20
@Ichiro Я говорю про HTML, а не про SGML. Жоден браузер не реалізував SGML. Якби вони це зробили, <title/foo/було б рівнозначно <title>foo</title>. Лише кілька валідаторів HTML використовують SGML. Специфікація HTML5 першою пояснила
Mathias Bynens

2
@ TestSubject528491 Цей параграф стосується другої частини DOCTYPE ( html). Ось повне речення: "Другу частину можна записати в малі ( html), великі літери ( HTML) або навіть у змішаному регістрі ( hTmL) - вона все одно спрацює. Однак, щоб відповідати Правилам розмітки поліглоту для XHTML-сумісних документів, сумісних з HTML, його слід писати в малі регістри. "
Mathias Bynens

15
@IchiroFurusato Ви можете прочитати на HTML5 . Цитата: “Однак, на відміну від попередніх версій HTML, серіалізація HTML [5] вже не вважається додатком SGML, а натомість визначає власний синтаксис. Хоча синтаксис натхненний SGML, він визначається таким чином, що більше нагадує те, як браузери насправді обробляють HTML в реальному світі, особливо що стосується обробки помилок ».
Матіас Байненс

40

Якщо хтось все ще цікавиться у 2014 році, будь ласка, зверніться до цього:

HTML5

Спеціальність W3 HTML5 - Doctype

DOCTYPE повинен складатися з таких компонентів у такому порядку:

1. A string that is an ASCII case-insensitive match for the string "<!DOCTYPE".
...

Примітка: незважаючи на те, що відображається у всіх кришках, специфікація стверджує, що вона нечутлива

-------------------------------------------------- --------------------

XHTML5

W3 HTML5 - XHTML

This specification does not define any syntax-level requirements 
beyond those defined for XML proper.

XML documents may contain a DOCTYPE if desired, but this is not required 
to conform to this specification. This specification does not define 
a public or system identifier, nor provide a formal DTD.

Дивлячись на специфікацію XML, він перераховує DOCTYPE у великих ковпаках, але я не можу знайти нічого, що стверджує, що потрібні "всі літери" (для порівняння, у переліченій вище специфікації HTML5 він відображається у прикладі у всіх кришках, але специфікація прямо заявляє, що це не залежно від регістру ).

-------------------------------------------------- --------------------

Розмітка поліглотів

Розмітка поліглотів W3 - Вступ

Іноді важливо вміти обслуговувати документи HTML5, які також є добре сформованими XML-документами.

Розмітка поліглотів W3 - Доктип

Для розмітки поліглоту використовується декларація типу документа (DOCTYPE), визначена розділом 8.1.1 [HTML5]. Крім того, DOCTYPE відповідає таким правилам:

* The string DOCTYPE is in uppercase letters.

Отже, зауважте, що розмітка Ployglot використовує звичайний дотип HTML5, але з доповненнями / змінами. Для нашого обговорення, особливо важливо, що DOCTYPE оголошено у всіх великих шарах .

-------------------------------------------------- --------------------

Підсумовування

Перегляньте розділ HTML W3 проти XHTML

[Думка] Я б не надто хвилювався щодо задоволення відповідності XML, якщо ви спеціально не намагаєтесь зробити це. Для більшості розробників сервера на базі клієнтів та JS JSON замінив XML.

Тому я бачу, що це дійсно застосовується лише в тому випадку, якщо ви намагаєтесь оновити існуючу, засновану на xhtml / xml систему, щоб співіснувати з новою функцією HTML5. Якщо це так, то подивіться у специфікацію розмітки поліглоту.


18

Згідно з останньою специфікацією , ви повинні використовувати щось, що не відповідає чутливості регістру <!DOCTYPE html>. Отже, хоча браузери повинні підтримувати будь-який випадок, який ви хочете, розумно зробити висновок про це, що <!DOCTYPE html>є канонічним випадком.


3
У специфікації досить чітко зазначено, що doctype повинен містити рядок, що є невідчутним до регістру еквівалентом "<! DOCTYPE", тому маючи на увазі, що "<! DOcTyPe" так само правильно.
joshnh

6
Як я вже сказав, специфікація вимагає від браузерів підтримувати будь-яку справу, тому будь-який випадок спрацює. Але запитуючий запитання чітко шукає стандартну, канонічну форму, тож у випадку відсутності вагомих причин обрати одне над іншим, ви можете також використати приклад із специфікації ...
Джон Меллор

9
Специфікація послідовно записує це так <!DOCTYPE html>, тому було б розумно зробити висновок, що автор специфікації має невелику перевагу саме до цієї великої літери. Я буду використовувати ту саму велику літери, що й специфікацію, оскільки приємно, щоб ці речі були послідовними, але якщо ви вважаєте за краще, <!dOcTyPeто будьте моїм гостем :)
Джон Меллор

3
@joshnh Я не розумію вашої плутанини. 1) Декларація DOCTYPE повинна бути нечутливою до регістру. 2) Специфікація HTML5 використовує у великих прикладах великі літери "DOCTYPE html". Здається, ця відповідь говорить про те, що одна література відповідає літературі, навіть якщо всі вони дійсні. Чому це так обурливо?

2
Я думаю, що @joshnh неправильно зрозумів, що намагався сказати Джон. FWIW, я погоджуюся з думкою Джона про те, що за відсутності будь-якої конкретної причини для форматування певним чином, виходячи з того, що специфікація вимагає, щоб браузери перевіряли перевагу. Джон ніколи не намагався натякнути на те, що це правильніше, лише те, що на чомусь ґрунтуватися на ваших уподобаннях - інакше це абсолютно довільний вибір, правда?
Райан Вільямс

7

У верхньому або нижньому регістрі є "правильним". Однак якщо ви використовуєте веб-шрифти та дбаєте про IE7, я рекомендую використовувати <!DOCTYPE html>через помилку в IE7, коли веб-шрифти іноді виходять з ладу при використанні <!doctype html>(наприклад, у цій відповіді ).

Ось чому я завжди мав на увазі доктрип.


6

Стандарт HTML5 полягає в тому, що теги не залежать від регістру.

http://www.w3schools.com/html5/tag_doctype.asp

Більш технічно: ( http://www.w3.org/TR/html5/syntax.html )

DOCTYPE повинен складатися з таких компонентів у такому порядку:

  1. Рядок, що є невідчутним до регістру ASCII для рядка <!DOCTYPE.

35
Я не довіряю W3Schools на 100%, вони не пов'язані з W3C, і хоча більшість їх інформації є хорошою, частина - ні.
joshnh

Це досить широко відомо - ось посилання w3.org: w3.org/TR/html5/syntax.html
Стівен

4
У W3Schools більше або менше помилок, ніж на інших веб-сайтах. ( Цілком випадковий приклад ) Візьміть інформацію із зерном солі, проконсультуйтесь на сторінках w3.org, коли сумніваєтесь, і ви будете добре. Справжніми дурнями є ті, хто вважає, що W3Schools є офіційним органом або що їхні сертифікати нічого не означають.
Містер Лістер

8
@MrLister: Я не думаю, що справедливо називати людей дурнями, оскільки вони думають, що існує зв'язок між тим, що називається "W3Schools", і тим, що називається "W3C". Обидва вони досить схожі за назвою та доменом, щоб викликати плутанину, і припущення, що перше якимось чином схвалено, або пов'язане з другим. Це явно намір W3Schools, що є однією з причин того, що вони гнівають так багато людей, які розуміють проблему. Той факт, що велика частина їх інформації є неточною, поєднує проблему (тобто вона може бути трохи прощеною, якщо вони насправді надають розумну послугу)
Боббі Джек

Посилання на tag_doctype.aspнедійсне (404), і це питання стосується doctypeдекларації, яка не є тегом ... У будь-якому випадку висновок правильний: у HTML5 ключове слово doctypeможе бути у верхньому, нижньому або змішаному регістрі.
Авель

3

З питань запитання випливає, що є лише одна правильна відповідь, надає кілька варіантів із двох і просить вибрати один. Я б запропонував, що для HTML5 обидва <!DOCTYPE html>і <!doctype html>дійсні.

Отже, браузер із підтримкою HTML5 прийняв би малий регістр і обробив HTML належним чином.

Браузери, попередні і не звертаючи уваги на HTML5, я чув, навіть без доктрипу, намагаються обробити html якнайкраще. І якщо вони не розпізнають малу доктрипу, вони зроблять те саме. Тому немає сенсу робити це великими літерами, оскільки ці браузери не зможуть повністю реалізувати декларації HTML5.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.