Нестандартное поведение тегов в Opera
Вопрос
Я работаю с издательской системой, которая использует пользовательские теги. Они интерпретируются на сервере. Проблема в том, что они вызывают большие проблемы с Opera при локальном просмотре (пользовательские теги не интерпретируются).
Opera обрабатывает эти теги не так, как в других браузерах. Похоже, что он закрывает тег в конце документа (даже если тег содержит закрывающую косую черту). Мне просто интересно, если такое поведение считается ошибкой или функцией.
Кроме того, если у вас есть идеи, как взломать такой код, чтобы я мог отлаживать HTML + CSS для Opera локально (без интерпретируемых пользовательских тегов), пожалуйста, дайте мне знать. Спасибо.
Попробуйте следующий код, чтобы увидеть его в действии ( живой пример ): р>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Non-standard tag behavior in Opera</title>
<style type="text/css" media="all">
div { background: yellow; padding: 1em; }
nonstandardtag { border: 1px solid red; }
</style>
</head>
<body>
<div>
<nonstandardtag>content of non-standard tag</nonstandardtag>
main tag content
</div>
<div>
<nonstandardtag />
main tag content
</div>
</body>
</html>
Решение 3
Это, кажется, исправлено в Opera 10 . Так что, думаю, это была не особенность.
Другие советы
Я использую оперу более 5 лет. Это браузер, который лучше всего подходит к стандарту. Большинство сайтов, которые плохо выглядят в Opera, являются & Quot; оптимизированными & Quot; для IE.
Но очевидный вопрос - зачем вам использовать нестандартные теги? Вы можете использовать теги div и span практически для любого нестандартного решения.
Коротко: это не ошибка. Несмотря на DOCTYPE, ваша страница не интерпретируется как XHTML (а это преднамеренно ).
HTML просто не поддерживает синтаксис самозакрывающихся тегов так же, как XML. Р>
В HTML на практике <foo />
совпадает с <foo>
или <foo /="">
. Теоретически это так же, как <foo></foo>>
.
Вы должны указать браузеру интерпретировать страницу как X [HT] ML. DOCTYPE недостаточно. Чтобы сделать это локально, файл должен иметь расширение .xml
или .xhtml
. Когда вы работаете с файлом по HTTP, вы должны установить заголовок Content-Type
на application/xhtml+xml
или аналогичный тип XML (для статических файлов обычно text/html
расширение файла выполняет свою работу). Р>
Ваш живой пример представлен как <=>, поэтому он не будет интерпретироваться как XHTML и не будет работать так, как вы ожидаете.
Кстати: XHTML не допускает нестандартные элементы. Если вы все равно хотите добавить свои собственные элементы, вам следует как минимум использовать собственное пространство имен.
Во-первых, вам не нужны нестандартные элементы. Во-вторых, что бы вы ни указывали с помощью вашего doctype, это не XHTML, а HTML (как вы ясно дали понять с помощью <meta http-equiv="Content-Type" content="text/html…
. Это, очевидно, означает, что браузеры используют свои анализаторы HTML , а те - нет ( и не должен) поддерживать сокращенный синтаксис XML <element/>
для пустых элементов.
Краткий ответ: нет никаких гарантий или требований в отношении того, что может сделать пользовательский агент, если вы предоставите ему искаженные данные.