Почему браузеры думают, что этот тег
не заканчивается сразу?

Вы могли вывести %INC в конце Вашего сценария. Это будет содержать все используемые и необходимые модули. Но конечно, это только будет полезно, если Вы не потребуете модулей условно (потребуйте Foo если $bar).

25
задан BoltClock 14 March 2012 в 15:46
поделиться

1 ответ

Строго говоря, элемент <div> - это непустой / непустой элемент в HTML, то есть он не предназначен для самозакрытия. Хотя <div /> является допустимым XHTML - поскольку /> указывает на самозакрывающийся (или пустой) элемент XML - он интерпретируется обычными анализаторами HTML и некоторыми валидаторами как закрытый открывающий тег и поэтому является недопустимым HTML 4.01 и HTML5 . 1

Фактически, выполнение заданного вами фрагмента HTML через валидатор W3C (как HTML5) приводит к этому сообщению об ошибке:

Самозакрывающийся синтаксис (/>), используемый в непустом элементе HTML. Игнорирование косой черты и трактовка как начальный тег.

Отсюда то, что вы видите.


Из спецификации HTML5 (в первой ссылке):

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

После этого подраздел для элемента <div> гласит:

Элемент div должен иметь как начальный тег, так и конечный тег.

Это делает <div> в отличие от <p> или <li> , которые, как известно, не всегда требуют конечной метки.

Если вы поместите <p> сразу после нераскрытого <p>, он неявно закроет предыдущий <p>. Точно так же относится и к <li>. Это потому, что вы не можете напрямую вкладывать несколько абзацев или элементы списка вместе. Однако <div> является вложенным на любую глубину. Таким образом, открывающий тег <div> не закрывает ранее закрытый тег <div>.

И вот почему вы видите то, что видите.


1 В истинных страницах XHTML (сериализованных в XML с использованием application/xhtml+xml) первый элемент <div /> не будет не расширяться до , чтобы обернуть второй <div>text</div> элемент. Вместо этого, как XHTML, он будет следовать правилам XML и содержать себя как пустой элемент, а не следовать правилам супа HTML-тега и сам по себе интерпретироваться как открывающий тег.

70
ответ дан 28 November 2019 в 18:08
поделиться