XHTML 1.0 DocType игнорируется во всех браузерах? - PullRequest
0 голосов
/ 27 января 2010

Я тестировал это, так как я понял, что используя XHTML, я могу использовать любой допустимый XML для пустых <div> элементов:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Test</title>
</head>

<body>
<div style="border:solid 10px black; width:100px; height:100px"></div>
<div style="border:solid 10px red; width:100px; height:100px"></div>
<div style="border:solid 10px blue; width:100px; height:100px"></div>

<div style="border:solid 10px black; width:100px; height:100px" />
<div style="border:solid 10px red; width:100px; height:100px" />
<div style="border:solid 10px blue; width:100px; height:100px" />
</body>
</html>

Это не работает в любом браузере, который я пытаюсь ... вот как FireBug говорит мне, что он понимает документ:

<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
<title>Test</title>
</head>
<body>
<div style="border: 10px solid black; width: 100px; height: 100px;"/>
<div style="border: 10px solid red; width: 100px; height: 100px;"/>
<div style="border: 10px solid blue; width: 100px; height: 100px;"/>
<div style="border: 10px solid black; width: 100px; height: 100px;">
 <div style="border: 10px solid red; width: 100px; height: 100px;">
  <div style="border: 10px solid blue; width: 100px; height: 100px;"/>
 </div>
</div>
</body>
</html>

Я немного сбит с толку, какой смысл использовать XHTML, если мне придется сделать это, я мог бы просто использовать HTML?

Обратите внимание, что установка типа контента равным content = "application / xhtml + xml", по крайней мере, не имеет значения в FF3.

Ответы [ 4 ]

2 голосов
/ 27 января 2010

какой смысл использовать XHTML, если мне нужно это сделать, я мог бы просто использовать HTML?

Вы используете , используя HTML, при условии, что вы отображаете свои страницы как Content-Type: text/html, что (к сожалению) должно быть в данный момент.

Если вы хотите получить преимущества простоты разметки XML, вам придется использовать страницу как тип носителя XML, например application/xhtml+xml. К сожалению, это сломает старые браузеры и IE. Некоторые люди рекомендуют обслуживать XHTML с переменным типом содержимого, зависящим от заголовка запроса Accept браузера, но я бы не стал, поскольку это означает, что у вас есть два набора очень немного отличающихся правил разметки, стилей и сценариев, которые необходимо соблюдать, и это делает кеширование менее эффективным. (Если вы установите Vary: Accept, как вы должны в таком ответе, это нарушит кеширование в IE, и если вы не сделаете этого, браузеры могут получить кешированный неправильный тип.)

Допустимо использовать самозакрывающуюся форму для любого элемента в «реальном» XHTML, но в настоящий момент вы не используете «настоящий» XHTML, вы используете HTML-совместимый XHTML как определяется Приложением C стандарта XHTML. HTML-совместимый XHTML на самом деле не дает никаких преимуществ на стороне браузера, но это означает, что вы можете создавать свой контент в инструментах с поддержкой XML, которые могут легко выполнять такие вещи, как проверки правильности формы, а также преобразовывать или шаблонировать файлы.

HTML-совместимый XHTML требует, чтобы вы использовали самозакрывающиеся теги, если (и только если) рассматриваемый элемент имеет модель содержимого EMPTY (т. Е. Он никогда не может содержать никаких других элементов или текстового содержимого). Элементы в строгом DTD XHTML 1.0 (и, следовательно, также строгий DTD HTML 4.01), которые определены как EMPTY:

base
meta
link
hr
br
param
img
area
input
col

Переходные DTD и Frameset добавляют:

basefont
isindex
frame
1 голос
/ 27 января 2010

Я бы взглянул на следующий вопрос.

Каковы все допустимые самозакрывающиеся теги в XHTML (реализованные основными браузерами)?

Только некоторые теги поддерживаются как самозакрывающиеся.

0 голосов
/ 13 июня 2010

Это правда. DOCTYPE не контролирует, как документ анализируется в браузерах. Только MIME-тип, отправленный в заголовке HTTP Content-Type.

Подробное объяснение ловушки типа MIME .

Это по замыслу:

Рабочая группа по HTML обсуждала эту проблему: намерение было разрешить старым (Только для HTML) браузеров, чтобы принимать документы XHTML 1.0, следуя руководящие принципы, и выступая в качестве текста / HTML. Поэтому документы служили text / html должен рассматриваться как HTML, а не как XHTML. Там не должно быть сниффинг текстовых / html документов, чтобы увидеть, действительно ли они XHTML.

0 голосов
/ 27 января 2010

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

Для документации допустимы следующие теги ( отсюда ):

  • <base />
  • <meta />
  • <link />
  • <hr />
  • <br />
  • <img />
  • <area />
  • <input />
  • <col />

Но ваш код на самом деле не интерпретируется какXML в любом случае , у вас есть Content-Type: text/html. Это говорит браузеру интерпретировать ваш код как обычный HTML. Чтобы сообщить браузеру интерпретировать ваш XHTML как XML, вы должны отправить содержимое как application/xhtml+xml. Однако есть и другие проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...