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

Я заметил, что jQuery (или Firefox) превратит некоторые из моих <span class = "presentational"></span> into <span class = "presentational" />

Теперь мой вопрос: можно ли писать такую ​​разметку? Какие-нибудь браузеры подавятся этим?

Лично я считаю, что <span class = "presentational" /> выглядит чище, если он будет пустым.

AFAIK, что пробел bf косой чертой стал обходным путем для ошибки в IE5, так что теперь это должно быть частью прошлого. - Я счастлив, что сейчас пишу только HTML5, и у меня нет проблем с использованием <x></x>, даже когда этот тег не содержит содержимого. я думаю, что каждый имеет полное право быть счастливый для каждой единственной раздражающей / сбивающей с толку грамматической «особенности» /(SG|XH|HT|X)ML/, которую они могут оставить навсегда; самозакрывающиеся теги - это просто так. Я думаю, что <span class = "presentational"></span> четко сообщает, что это тег без содержимого, и что он универсально и однозначно понимается как таковой.

flow 22.10.2013 22:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
49
1
25 190
7

Ответы 7

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

<script type='text/javascript' src='script.js' />

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

Подходит ли IE6 под старый браузер? Мне нужна поддержка только в IE6, firefox 2, safari 2, chrome +++

alex 08.12.2008 09:04

Думаю, если учесть стандартную жалобу, то она ОЧЕНЬ СТАРА!

mmx 08.12.2008 09:06

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

alex 08.12.2008 09:08

Я знаю из недавнего болезненного опыта, что MSIE6 определенно подавляется этим.

Konrad Rudolph 08.12.2008 11:10

Некоторые новые браузеры тоже. <script src = "/scripts/jquery.js" /><script>/* In Firefox (tested in 3.5 and 3.6), this script does not run, and is not parsed as part of the DOM; the earlier script tag's self-closing slash is marked as red in "view source", and this script's opening tag is displayed as text content of the earlier script, ignored by the parser. */ alert('test 1');</script><script>/* In firefox, this script does run, and is parsed as part of the DOM */ alert('test 2');</script> Интересно, что раньше WebKit вел себя примерно так же, но теперь, похоже, прощает самозакрывающиеся <script>.

eyelidlessness 03.02.2010 19:45

@Mehrdad: LOL @ ваше использование "ЖАЛОБЫ", особенно. относительно IE6 (DIEDIEDIE)

Scott Baker 03.02.2010 19:54

Последние версии Google Chrome также рассматривают <script src = "..." /> как недопустимый.

Adam Ness 24.10.2010 21:08

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

<script> - важный, который нужно закрыть с помощью </script>, чтобы избежать проблем.

Другой - <meta>, который намного лучше работает с пауками, записанными как <meta></meta> вместо <meta />.

Не совсем вопрос, но связанные, с точки зрения форматирования, версии IE имеют проблемы только с пустыми элементами, такими как <div></div> или <div />. В этом случае для сохранения форматирования требуется <div>&nbsp;</div>.

meta - это пустой элемент. В HTML (или XHTML, который используется как HTML) он ДОЛЖЕН быть записан как <meta />! В истинном XHTML это не имеет значения.

thomasrutter 16.06.2010 06:27

@thomas: Разве все теги не должны быть закрыты (включая самозакрытие) в XHTML?

Casebash 06.07.2010 05:09

@Casebash: все элементы должны быть закрыты в XHTML, но есть два способа закрытия элемента - с помощью отдельного закрывающего тега или самозакрывающегося с косой чертой в конце открывающего тега. Однако в HTML и HTML-совместимом XHTML, то есть XHTML1, некоторые элементы, а именно элементы, модель содержимого которых ПУСТАЯ, такие как img, br и meta, НЕ должны иметь отдельный закрывающий тег. Для непустых элементов, таких как div, нужен отдельный закрывающий тег. Вышеупомянутый ответ совершенно неверен относительно <meta> </meta> - это запрещено и должно быть самозакрывающимся, т.е. <meta /> в XHTML1 или <meta> (без закрывающего тега) в HTML.

thomasrutter 06.07.2010 05:25

мы с вами знаем, что почти каждый, кто использует XHTML 1.0, использует его, как если бы это был HTML, и поэтому применяются правила HTML. Синтаксис, специфичный для XHTML, может быть подтвержден, но он не будет работать, если он несовместим с HTML. На самом деле я уточнил то, что сказал, сказав «в HTML и HTML-совместимом XHTML». Теперь, если вы должны обслуживать XHTML как XML, тогда вы можете использовать <meta> </meta>, если захотите. Но вы все равно не можете сделать это в сегодняшней сети. Не будем путать людей.

thomasrutter 06.07.2010 18:48

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

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

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

Чтобы прояснить, я думаю, вы имеете в виду «Обслуживается как text / html, <span> означает создание ...», а не «<span />». Самозакрывающиеся элементы - это XML-изм, который парсеры HTML плохо понимают.

Alan Krueger 12.12.2009 01:23

Нет, я имел в виду именно то, что сказал. Дело в том, что в text / html <span /> не является самозакрывающимся элементом, это открывающий тег для элемента. Все анализаторы HTML, используемые браузерами в настоящее время, обрабатывают это одинаково.

Alohci 12.12.2009 04:25

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

<?xml version = "1.0" encoding = "UTF-8"?>
<!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" xml:lang = "en" lang = "en">
<head>
    <title>Test</title>
    <script type = "text/javascript">
        function show() {
            var span = document.getElementById("span");
            alert(span.innerHTML);
        }
    </script>
</head>
<body onload = "show();">
<p id = "p1">Paragraph containing some text followed by
           an empty span<span id = "span"/></p>
<p id = "p2">Second paragraph just containing text</p>
</body>
</html>

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

</P>
<P id=p2>Second paragraph just containing text</P>

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

Еще у меня есть писал об этом в блоге.

Хороший. Обратите внимание, что это относится не только к диапазону, но и к другим встроенным элементам. И верно независимо от того, используете ли вы <span /> или <span> (хотя последнее приводит к недопустимому XHTML). Но нет к новым элементам HTML5, добавленным с помощью заточки HTML5. Использование «document.createElement ('meter')» и размещение замены <span /> на <meter> имеет тот же множественный родительский эффект, но замена <span /> на <meter /> создает модель DOM, которую вы обычно ожидаете , потому что IE обрабатывает <xxx /> как самозакрывающийся тег, когда xxx зарегистрирован как имя тега html с помощью document.createElement.

Alohci 12.12.2009 05:23

К сожалению, это не работает, если xxx - существующее имя тега HTML 4.

Alohci 12.12.2009 05:25

Есть подробности о том, какие версии IE страдают от этого?

Beni Cherniavsky-Paskin 24.11.2015 12:50

Как сказано в вашем блоге, IE 6, 7, 8. Я проверил, что IE 9+ (и Edge) возвращает пустую строку.

Beni Cherniavsky-Paskin 24.11.2015 13:45

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

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

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

Также стоит отметить, что объявление <?xml ...?> перед типом документа переводит IE в режим причуд.

без век ... где ты был на Stack Overflow? Спасибо за ответ +1

alex 05.02.2010 02:24

@alex, у меня контракт и работы много. Я все еще суетлюсь туда-сюда. :)

eyelidlessness 05.02.2010 18:44

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

Другие вопросы по теме