Является ли запись закрывающих тегов для элементов, которые не являются традиционно пустой плохой практикой?

Я заметил, что jQuery (или Firefox) превратит некоторые из моих into

Теперь мой вопрос: хорошо ли написать мою разметку? Будут ли какие-то браузеры задыхаться?

Лично я считаю, что выглядит более чисто, чем если он будет пустым.

Я предполагаю, что ваш вопрос связан с красной конечной чертой на самозакрывающихся элементах при просмотре источника в Firefox. Если это так, вы наткнулись на один из самых яростных, но одновременно пассивных агрессивных дебатов в браузерах против веб-разработчиков войн. XHTML – это не только разметка документа. Это также о том, как документы предназначены для обслуживания через Интернет.

Прежде чем я начну; Я стараюсь не принимать участие здесь.

Спецификация XHTML 1.1 говорит, что веб-сервер должен обслуживать XHTML с Content-Type of application / xhtml + xml. Firefox выделяет эти трейлинг-косые черты как недействительные, потому что ваш документ обрабатывается как text / html, а не application / xhtml + xml. Возьмите эти два примера; идентичная разметка, одна – как application / xhtml + xml, другая – как text / html.

http://alanstorm.com/testbed/xhtml-as-html.php

http://alanstorm.com/testbed/xhtml-as-xhtml.php

Firefox помещает завершающую косую черту в метатеге как недопустимый для документа, обслуживаемого с текстом / html, и действителен для документа, обслуживаемого с помощью приложения / xhtml + xml.

Почему это противоречиво

Для разработчика браузера точка XHTML заключается в том, что вы можете обрабатывать свой документ как XML, а это означает, что если кто-то отправит вам что-то, что недействительно, спецификация говорит, что вам не нужно его разбирать. Итак, если документ используется как application / xhtml + xml и имеет не-правильно сформированный контент, разработчику разрешено говорить «не моя проблема». Вы можете видеть это в действии здесь

http://alanstorm.com/testbed/xhtml-not-valid.php

Когда документ используется как text / html, Firefox рассматривает его как простой старый HTML-документ и использует прощание, исправление для вас, процедуры подбора

http://alanstorm.com/testbed/xhtml-not-valid-as-html.php

Таким образом, для браузера, XHTML, используемый как text / html, нелепо, потому что он никогда не рассматривается как XML с помощью механизма рендеринга браузера.

Несколько лет назад веб-разработчики, которые хотели быть больше, чем тег-обезьяны (Disclaimer: я включаю себя как один из них), начали искать способы разработки лучших практик, которые не включали три раза вложенные таблицы, но все же допускали впечатляющий дизайн , Они / Мы зафиксировали на XHTML / CSS, потому что W3C сказал, что это было будущее, и единственным другим выбором был мир, в котором один поставщик (Microsoft) контролировал спецификацию defacto markup. Настоящим злом является единственный поставщик , и не столько Microsoft. Клянусь.

Так где же споры? Есть две проблемы с application / xhtml + xml. Первый – Internet Explorer. В IE есть устаревшая ошибка / функция, в которой содержимое, используемое в качестве приложения / xhtml + xml, предложит пользователю загрузить документ. Если вы попытались посетить xhtml-as-xhtml.php, перечисленные выше, с IE, вероятно, произошло то, что произошло. Это означает, что если вы хотите использовать application / xhtml + xml, вам нужно использовать браузер для IE , проверить заголовок Accepts и только обслуживать application / xhtml + xml для тех браузеров, которые его принимают. Это не так тривиально, как кажется, чтобы получить право, а также пошел против принципа «писать один раз», к которому стремились веб-разработчики.

Вторая проблема заключается в жесткости XML. Это, опять же, одна из тех проблем, связанных с пламенем, но есть люди, которые думают, что один плохой тег, или одиночный символ, неправильно закодированный, не должны приводить к тому, что пользователь не видит документ, который они хотят. Другими словами, да, спецификация говорит, что вы должны прекратить обработку XML, если он не очень хорошо сформирован, но пользователь не заботится о спецификации, им важно, чтобы сайт их кошки был сломан.

Добавление еще большего количества бензина в проблему заключается в том, что спецификация XHTML 1.0 (не 1.1) говорит о том, что документы XHTML могут обрабатываться как text / html, при условии соблюдения определенных рекомендаций по совместимости . Такие вещи, как тег img, который сам закрывается и тому подобное. Ключевое слово здесь может быть . В RFC говорят , может означать необязательный. Firefox выбрал НЕ обрабатывать документы, обслуживаемые с помощью типа XHTML, но тип контента text / html как XHTML. Однако валидатор W3C будет с радостью сообщать об этих документах как действительные.

Я оставлю читателя задуматься об одновременном изумлении / ужасе культуры, которая пишет документ, чтобы определить, что они подразумевают под словом may .

Движение вперед

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

Обновления из комментариев

В комментариях Алекс указывает, что если вы собираетесь что-то нюхать, вы должны проверить заголовок Accept, чтобы узнать, принимает ли приложение / xhtml + xml пользовательский агент.

Это абсолютно правильно. В общем, если вы собираетесь нюхать, нюхайте эту функцию, а не браузер.

Добавление к другим ответам: в IE, когда элементы, такие как в вашей разметке , вызовут всевозможные проблемы с методами обхода DOM в JavaScript . Посмотрите на следующий документ XHTML:

     Test    

Paragraph containing some text followed by an empty span

Second paragraph just containing text

Идея заключается в том, что при загрузке страницы JavaScript будет получать ссылку на пустой диапазон и отображать его содержимое HTML. Это будет пустая строка, не так ли? Не в IE это не будет. В IE вы получаете весь контент после пролета во всем документе:

  

Second paragraph just containing text

Кроме того, вторая

отображается в коллекции childNodes . Тот же самый

также находится в коллекции childNodes тела, что childNodes , что узел может эффективно иметь несколько родителей . Это не очень хорошая новость для скриптов, которые полагаются на пересечение DOM.

Об этом я также писал в блогах .

Да. Это. В некоторых случаях это вызовет проблемы для старых браузеров.

  

В этом случае старый браузер может не понимать, что закончился.

Используется как application / xhtml + xml, означает создание элемента span без содержимого.

В качестве текста / html, означает создание элемента span, в котором содержимое элемента следует за этим тегом до тех пор, пока не будет встречен тег , или встретится другой тег (или EOF), который неявно закрывает элемент. т.е. в этом случае означает то же самое, что и .

Помимо этого: HTML 5 определяет как сериализацию HTML и XHTML, так и не влияет на эту проблему так или иначе. Это требует, например, XHTML 1.1, что XHTML будет использоваться как application / xhtml + xml, в отличие от XHTML 1.0. По сути, это ничего не меняет, поскольку все браузеры рассматривают любую версию XHTML, которая используется как text / html как суп-суп.

Также стоит отметить, что объявление До того, как doctype выдает IE в режим quirks.

См. Примечание по теме в рабочей группе XHMTL: http://www.w3.org/TR/xhtml-media-types/

Короче говоря, это нормально, если ваш XHTML будет рассматриваться как XHTML. Если вы собираетесь притворяться, что это HTML (что вам нужно сделать, если вы хотите, чтобы он был загружен Internet Explorer (включая версию 8, последний на момент написания), вам нужно перепрыгнуть через обручи).

Обручи достаточно раздражают, что я бы рекомендовал большинству людей придерживаться HTML 4.01.

Как правило, это не проблема с сокращением для пустых элементов, но есть некоторые исключения, когда это может вызвать проблемы.

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

Другой - который работает намного лучше с пауками, написанными как вместо

Не совсем вопрос, но связанный, с точки зрения форматирования, версии IE имеют проблемы с только пустыми элементами, такими как

или

. В этом случае для сохранения форматирования требуется

 

.

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

  • Анализ XML в iPhone
  • Как создать схему XSD из classа?
  • Открытие ошибок страницы Facelets с «Этот XML-файл, похоже, не связан с какой-либо информацией стиля».
  • Сериализация данных частного участника
  • Удаление повторяющихся элементов с помощью XSLT
  • Как удалить недопустимые шестнадцатеричные символы из источника данных на основе XML до создания XmlReader или XPathDocument, который использует данные?
  • Преобразование элементов XML в атрибуты XML с использованием XSLT
  • Spring schemaLocation не удается, если нет подключения к Интернету
  • Инструмент Grep для XML
  • Простой пример использования и в XML-макетах Android
  • Android, отправляющий XML через HTTP POST (SOAP)
  • Давайте будем гением компьютера.