2010-01-26 4 views
0

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

<!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 как минимум.

ответ

0

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

Ради документации, действительные метки (from here):

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

Но ваш код не на самом деле быть истолковано как XML в любом случае, у вас есть Content-Type: text/html. That tells the browser to interpret your code as normal HTML. Чтобы сообщить браузеру интерпретацию XHTML как XML-адреса, необходимо, чтобы должен был отправить сообщение как application/xhtml+xml. There are other problems with this, though.

+1

Спецификации XML и XHTML позволяют использовать самозакрывающийся синтаксис для любого элемента, но применяются только при отправке документа с правильным Content-Type, как вы сказали. – Ms2ger

2

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

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

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

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

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

base 
meta 
link 
hr 
br 
param 
img 
area 
input 
col 

Переходного и Frameset ОТДА добавить:

basefont 
isindex 
frame 
0

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

Detailed explanation of MIME type pitfall.

Это дизайн:

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