Тег закрывающий: Тег | htmlbook.ru

Содержание

одиночные и парные теги (открывающий и закрывающий тег)

HTML элемент — это основная структурная единица веб-страницы, написанная на языке HTML.

Парные и одиночные теги HTML

Синтаксис HTML элементов, состоящих из парных тегов:

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

Примечание: не забывайте в закрывающем теге ставить символ «/«, он указывает браузеру, что ваш элемент закончился и что то, что будет написано после него, является уже другим элементом. Если не поставить символ «/» в закрывающем теге, то браузер примет его за новый элемент, вложенный в предыдущий, который по мнению браузера всё ещё не закрыт.

Синтаксис HTML элементов, состоящих из одиночных тегов:

  • Элемент состоит только из открывающего тега.

Элементы, состоящие из одиночных тегов называются пустыми. Всего в HTML 16 одиночных тегов:

Вложенные элементы

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

Следующий пример состоит из трех элементов, два из которых вложенные:


<html>
  <body>

    <p>Мой первый абзац</p>

  </body>
</html>

В этом примере элемент <p> вложен в элемент <body>, который, в свою очередь, вложен в элемент <html>.

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


<p>Это <em>очень</p> интересно</em>

Здесь элемент <em> выходит за пределы элемента <p>:

Пример с правильной вложенностью:


<p>Это <em>очень</em> интересно</p>

Здесь элемент <em> правильно вложен — он находится полностью в элементе <p>:

Пробельные символы

Браузер игнорирует пробельные символы в HTML-коде, поэтому их можно использовать с пользой для себя, придавая коду удобочитаемый вид. К пробельным символам относятся: символы табуляции, перенос строки и обычные пробелы, их можно использовать в любом количестве. Пример кода, в котором используются пробельные символы:


<html>
  <head>
    <title>Заголовок</title>
  </head>
  <body>

    <h2>Мой первый заголовок</h2>
    <p>Мой первый абзац</p>

  </body>
</html>

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


<html><head><title>Заголовок</title></head><body><h2>Мой первый заголовок</h2><p>Мой первый абзац</p></body></html>

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

С этой темой смотрят:

«Не закрывайте теги!» — CSS-LIVE

С таким провокационным призывом на днях обратился к своим читателям в Твиттере не кто-нибудь, а Таб Аткинс, главный редактор львиной доли спецификаций CSS. Конечно, речь шла не о любых тегах, а об опциональных (необязательных), которые разрешает не ставить сам стандарт HTML. Но всё равно призыв Таба многих шокировал, очень уж вразрез он шел со всем, чему нас учили с самого начала веб-карьеры.

Может, Таб просто всех троллил? Или же в его совете есть рациональное зерно? Попробуем непредвзято разобраться.

Какие теги можно не закрывать?

Так и хочется воскликнуть «Никакие!» :). Но давайте всё-таки обратимся к стандарту. Он разрешает опускать не только 19 закрывающих тегов, но и 5 открывающих. Все они, вместе с условиями, когда это можно делать, явно перечислены в целом одном страшно секретном разделе 12.1.2.4. И еще 14 тегов закрывать просто нельзя.

В таблицах ниже я попытался максимально упростить формулировку условий из спецификации (если где-то перестарался — прошу поправить):

Необязательные открывающие теги

Тег Когда можно не писать
<html> Если перед ним не идет <!-- комментарий -->
<head> Если перед ним не идет <!-- комментарий -->
<body> Если body начинается не с <!-- комментария -->, пробела, либо одного из тегов, который может быть и в head
<tbody> Перед <tr>, если перед ним нет незакрытого thead, tfoot или другого tbody
<colgroup> Перед <col>, если перед ним нет незакрытого другого colgroup

Нельзя опускать открывающий тег, если у него есть какие-либо атрибуты (напр. lang для <html>). Также открывающий <body> необходим, если его первым потомком должен быть script, link или другой элемент, который может быть и в head — иначе он попадет именно туда.

Необязательные закрывающие теги

Тег Когда можно не писать
</html> Если после него не идет <!-- комментарий -->
</head> Если после него не идет <!-- комментарий --> или пробел
</body> Если после него не идет <!-- комментарий -->
</li> Перед <li> или </ul>/</ol>
</dt> Перед <dt> или <dd>
</dd> Перед <dt>, <dd> или концом родителя
</p> Перед открывающим тегом любого не-фразового потокового («блочного» по-старому:) элемента, либо закрывающим тегом родительского элемента (если у того не прозрачная модель контента)
</rt> и </rp> Перед <rt>, <rp> или </ruby>
</optgroup> Перед <optgroup> или </select>
</option> Перед <option>, <optgroup>, </optgroup> или </select>
</colgroup> Если после него не идет <!-- комментарий --> или пробел
</caption> Если после него не идет <!-- комментарий --> или пробел
</thead> Перед <tbody> или <tfoot>
</tbody> Перед другим <tbody>, <tfoot> или </table>
</tfoot> Перед </table>
</tr> Перед <tr> или концом родителя
</td> и </th> Перед <td>, <th> или концом родителя

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

У правила для <p> общая логика похожа, но оно сложнее и потому стоит особняком (мы к нему еще вернемся).

А условие про HTML-комментарий означает лишь требование предсказуемости итоговой DOM. Например, что без явного тега нельзя вставить этот комментарий снаружи элемента. Это всё равно не будет ошибкой, просто в итоговой DOM комментарий окажется внутри него.

Теги, закрывать которые нельзя

Это пустые (void) элементы: area, base, br, col, embed, hr, img, input, link, meta, param, source, track, wbr.

Многие поспешат возразить: «Это же самозакрывающие(ся) теги, у них свой способ закрытия — слеш перед >!». Что ж, их ждет сюрприз: в HTML этот слеш… не значит ничего! Он не считается ошибкой, чтобы было легче переходить с XHTML, но «самозакрытыми», точнее, не требующими закрытия, их делает не слеш, а «зашитый» в алгоритм парсинга список этих пустых элементов. И «закрыть» по аналогии, скажем, <div /> нельзя — для HTML это будет открывающий тег (притом уже с ошибкой). Только для SVG- и MathML-элементов (напр. <g />) этот слеш означает честное «самозакрытие» (т.е. сокращение для <g></g>).

Аргументы против незакрытия тегов

«Это невалидный код!»

Необязательные теги — часть стандарта HTML. Значит, код, использующий их по правилам, валиден (точнее, соответствует этому стандарту). Так что это — невалидный аргумент:)

Нельзя полагаться на механизм исправления ошибок в браузерах

Вообще-то, в HTML5 алгоритм исправления ошибок «зашит» в стандартный алгоритм парсинга, и все браузеры клянутся, что соблюдают этот стандарт. Так что ошибочная запись <a href="...">раз<a href="...">два</a> везде даст две ссылки подряд, а не вложенную ссылку.

Но я согласен: полагаться на ошибочное поведение чего бы то ни было — очень, очень плохая идея.

Вот только разрешенные необязательные теги — не ошибка. А хоть и непривычный, но вариант правильного HTML-кода. И этот аргумент валидный — но мимо:)

Хрупкость

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

Например, вдруг в нашем шаблоне появился HTML-комментарий. Давайте честно: на что может повлиять, добавится этот комментарий внутрь неявного <head> или <body> или снаружи?

Или возьмем динамически генерируемый список. Если внутрь нашего пункта списка попадет другой <li>, то пункт развалится на два — но это произойдет независимо от того, явно он был закрыт или неявно.

Еще в <head>...</head> нередко попадает то, что не может там находиться. Например, что-то, что браузер считает выводимым на экран текстом (в подключаемых PHP-шаблонах это часто могла быть BOM-метка). Это сразу же неявно закрывает </head> и открывает <body>. И снова независимо от того, где и как стояли соотв. теги.

Другое дело, если кто-то возьмет и не закроет другой тег, скажем, </div> или тот же </a>. Но это уже проблема нарушения стандарта (равно как и закрытие тега в неподходящем месте!). Ее решение — валидация кода (в т.ч. автоматическая, на этапе сборки/CI). И оно снова не зависит от наличия/отсутствия необязательных тегов!

Может быть, в комментариях вы подскажете более убедительный пример, где именно легально незакрытый тег будет причиной хрупкости?

Несовместимость с XML (и JSX)

Факт: HTML и XML — разные языки (а JSX — вообще де-факто третий, хоть отчасти и «косплеит» XML внешне), и правила у них разные. Если нужно соблюсти и те, и те, то, конечно, без явного закрытия тегов никак. Другой вопрос, где и зачем сегодня нужна совместимость HTML с XML?..

Несовместимость с редакторами и IDE

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

Несовместимость с кодстайлами и рабочими процессами

Аналогично: если в проекте принят какой-то дополнительный стандарт оформления кода помимо синтаксической корректности HTML — будь то лимит длины строк или требование явно закрывать теги — его тоже надо соблюдать. Но он не должен становиться самоцелью: если на его соблюдение уходит слишком много сил и он мешает использовать какую-то стандартную возможность языка, удобную для конкретной задачи — может, легче будет его пересмотреть или перейти на другой?

Трудность чтения

Большинству из нас, наверное, читать код с незакрытыми тегами труднее: нет привычных маркеров конца элемента. Правда, это во многом вопрос привычки и форматирования исходника (см. далее). Но привычка — важный фактор, не поспорить. Особенно в команде.

Сложность правил для запоминания

Таблицы с правилами, когда какой тег можно не закрывать, выглядят внушительно. И это я еще их упростил! Даже сам Таб Аткинс в исходном твиттерском треде запутался, какие теги неявно закрывают <p>, а разница между случаями, когда открывающий <body> обязателен, а когда нет, навскидку еще менее интуитивна. Не лучше ли вместо этого вот всего запомнить одно простое правило «всегда закрывай все теги!»?

Увы: одним простым правилом от HTML не отделаешься:). Как минимум 14 исключений — пустые элементы, которые закрывать нельзя — помнить всё равно надо. А что еще важнее, явное закрытие тега не гарантирует, что элемент действительно закончится именно в этом месте (мы уже мельком видели пару примеров, дальше будет больше). Но разве в других языках нет таких «странных» правил? Одна таблица приведения типов в JS чего стоит.

Простота записи поощряет бардак в коде

Занятно, что этот аргумент часто сочетается с предыдущим.

Да, код в стиле «ляпнул открывающий тег и вперёд» может показаться небрежным и «несерьезным». Но это тоже вопрос привычки. Пример обратного — Markdown: одна звездочка — один пункт списка и никаких «закрывающих тегов», при этом в коде полный порядок и читать его — одно удовольствие. Но да, Markdown и HTML — тоже разные языки:)

В любом случае, закрыть тег много ума не надо не так уж сложно (тем более часто это на автомате делает IDE). Сложнее поставить его там, где надо, по правилам языка. Но не поставить его там, где можно по стандарту и уместно по задаче — сложность примерно сопоставимая. Ниже мы увидим, что чтобы писать правильный HTML — хоть с явными тегами, хоть без — его всё равно придется знать.

Явное лучше неявного

Безусловно!

Когда между ними действительно есть выбор.

Увы, с HTML это не всегда так (подробности чуть ниже).

Аргументы за незакрытие тегов

Всего лишь сокращенная запись

В XML были две равнозначные записи элемента без содержимого — полная (<tag></tag>) и сокращенная (<tag/>). Вторая почему-то до сих пор популярна даже в HTML, хотя там этот слеш ничего не значит (см. выше).

Точно так же и в HTML по сути есть две равнозначные записи конструкции «конец элемента и начало следующего» — полная (напр. </p><p>) и сокращенная (напр. <p>). Т.е. формально в обоих случаях эти теги закрыты, просто не всегда очевидным образом.

Экономия трафика

Принцип прост: если не видно разницы — зачем платить писать (и гонять по сети) больше. Древний «гайд» по оформлению HTML/CSS от Google так этот совет и формулировал: «байты — деньги».

Это может быть и вправду актуально для Гугла с его объемами трафика. Для остальных это скорее всего экономия на спичках. Особенно с gzip или еще лучшими новыми алгоритмами сжатия. Но протестировать всё равно не помешает:)

Экономия памяти

Любые символы между тегами — включая пробелы и переносы строк — попадают в DOM в виде текстовых нод. В эпоху верстки инлайн-блоками эти ноды-пробелы доставляли немало хлопот (и одним из решений как раз было не закрывать теги:). Сейчас это неактуально, но сами ноды никуда не делись. Так что в DOM списка с закрытыми тегами <li> на самом деле будет вдвое больше нод, чем в DOM списка с незакрытыми (при обычном форматировании исходника, без минификации):

See the Pen
poJKLzb by Ilya Streltsyn (@SelenIT)
on CodePen.

И эти лишние ноды — полноценные DOM-объекты, с кучей свойств и методов. Другой вопрос, так ли много места они занимают в памяти и сильно ли это влияет на производительность страницы (как всегда, надо тестировать и измерять!)

По правде, этот аргумент выходит не столько за незакрытие тегов, сколько за минификацию кода для продакшна, с убиранием всех ненужных пробелов и т.д. Хотя тот же минификатор можно настроить и на вырезание необязательных тегов. Если тесты покажут, что от этого есть толк. Добавлено 26.03.2020: к счастью, проблемы минификаторов 10-летней давности, не всегда умевших отличить необязательный тег от обязательного, остались в прошлом – нынешняя версия html-minifier использует честный HTML5-парсер и, если не злоупотреблять опциями с «невалидным HTML» на выходе, ничего не сломает.

«Защита от дурака»

Вопреки стереотипу, что «явно закрытые теги надежнее», эти добавочные сущности в DOM — еще и новые потенциальные точки отказа, если случайно поставить закрывающий тег не там:

See the Pen
KKpGBqO by Ilya Streltsyn (@SelenIT)
on CodePen.

Причем для абзацев это и валидатор пропустит. Неявно же элементы закрываются только сразу перед другим элементом, и такой неуправляемый «неприкаянный» текст заведомо не появится.

Удобство чтения

Как ни странно, некоторым проще читать код без закрывающих тегов. Для людей программистского склада, привыкших держать все сущности в контейнерах, это звучит дико, но тем, кто больше работает с текстом, часто привычнее думать о разделителях абзацев, пунктов списка и ячеек таблицы. Именно разделители используются в редакторах типа Word, вышеупомянутом Markdown… и HTML задумывался так же (в одном из ранних черновиков те же <p>, <li> и т.п. так и были одиночными разделителями, вроде <br>).

Сравните две разметки таблицы с внешне идентичным результатом:

<table>
  <caption>Цены на продукты<caption>
  <thead>
    <tr>
      <th>Продукт</th>
      <th>Февраль</th>
      <th>Март</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Гречка</th>
      <td>80</td>
      <td>120</td>
    </tr>
    <tr>
      <th>Соль</th>
      <td>5</td>
      <td>15</td>
   </tr>
   <tr>
     <th>Икра</th>
     <td>1500</td>
     <td>900</td>
   </tr>
  </tbody>
</table>

<table>
  <caption>Цены на продукты
  <thead>
    <tr>
      <th>Продукт <th>Февраль <th>Март
  <tbody>
    <tr>
      <th>Гречка  <td>80      <td>120
    <tr>
      <th>Соль    <td>5       <td>15
    <tr>
      <th>Икра    <td>1500    <td>900
</table>

Правда, тут повезло, что вся таблица и текст в ячейках короткие, а хороший кодстайл должен быть универсальным и не зависеть от везения..:)

Лучшее понимание специфики HTML и защита от сюрпризов

Этот аргумент Таба я вынес отдельно, чтобы он не затерялся (и выделил ключевые, на мой взгляд, слова жирным):

Еще одна причина привыкнуть к этому [не ставить необязательные теги] — то, что HTML-парсер будет делать это [достраивать DOM] в любом случае, и вы сможете заодно выучить соответствующие правила, так что не споткнетесь на этом. Если вы используете закрывающие теги с бездумным фанатизмом, вы можете *полагать*, что знаете, где заканчивается элемент, но окажетесь неправы!

Частый вопрос на форумах, StackOverflow, да и в жизни верстальщика: «Почему мой список внутри абзаца не отображается как надо?» Во всех руководствах по HTML <p>...</p> — пример блочного контейнера. С детства мы помним, что абзац — это «законченная мысль», так что если она включает в себя список чего-либо, подводку к нему и некий итог — логично, чтобы всё это было в одном абзаце. Вот открывающий <p>, вот список внутри, вот закрывающий </p>, всё закрыто в правильном порядке… Почему же в DOM-инспекторе список оказался снаружи абзаца?

Да, иногда привычка «мыслить контейнерами» и безоговорочно доверять явным тегам может оказать медвежью услугу не только новичку, маскируя неочевидное поведение парсера. А новичку здесь и валидатор мало поможет: «Найден закрывающий тег без открывающего…» — ну как же его нет, когда вот он? Ладно, <p> допускает лишь «фразовое» («строчное», по-старому) содержимое, а список к нему не относится — но ведь другие теги, даже насквозь «строчный» <span>, от точно такой же неправильной вложенности не рвутся!

А вот знание, что закрывающий </p> необязателен, и открывающий тег любого «блочного» (по-старому) элемента — его стандартный эквивалент, эту ситуацию бы предотвратило. Мы бы сразу обернули эту «мысль» не в <p>...</p>, а во что-то другое, без неявного закрытия — хоть <div>. Что, кстати, рекомендует и спецификация.

Аргумент против тегов вообще

Браузерам, по большому счету, вообще плевать на теги. Они отображают не разметку, а DOM, и оперируют лишь DOM-элементами и их свойствами. DOM может строиться по-разному, и в современном мире куда чаще она строится скриптами, а не парсится прямо из разметки. Разметка — лишь один из способов описания будущей DOM в текстовом формате, в принципе не лучший для машины, зато более понятный для человека.

А люди в наше время тоже редко пишут разметку руками. Чаще эту скучную механическую работу за нас делают инструменты — препроцессоры, шаблонизаторы и всё такое прочее. И это их задача — ставить те теги, которые надо, где надо и как надо, чтобы парсеры, со всеми их странностями и документированными причудами, всё правильно поняли. Их, а не наша.

Не в том ли причина многих проблем нынешней веб-отрасли, что истинную природу веб-платформы от разработчиков всю их жизнь вольно или невольно скрывают — сначала за тегами (и пустяками типа их регистра, словно мы до сих пор в 90-х), а затем за абстракциями фреймворков?..

Заключение

Думаю, подытожить эту статью можно примерно так:

  1. Необязательные теги — не ошибка, не «магия», не «браузерная самодеятельность» и т.п. (как часто считают), а документированная особенность стандарта. По сути — еще один инструмент HTML, такой же, как и закрывающие теги. Можно спорить, входят ли они в «The good parts» языка HTML (скорее всего нет!:), но в некоторых задачах (напр. для экстремальной оптимизации) они могут быть полезны;
  2. Почти все валидные аргументы и за, и против необязательных тегов сводятся к двум фразам: «делайте, как вам удобнее», и «делайте, как у вас (в проекте, в команде, в настройках окружения и т.д.) заведено». Ну и еще «смотрите по задаче и тестируйте!».

Поэтому в подавляющем большинстве случаев все необязательные теги лучше всё-таки ставить. Не потому, что «Так Надо, Ибо Воистину ©», или будто это автоматически «сделает код надежнее», а лишь потому, что:

  • так удобнее и понятнее большинству разработчиков;
  • так настроено по умолчанию большинство инструментов.

Код должен решать свою задачу. Задача исходников — не столько инструкция для браузеров (им-то стиль кода не важен), сколько коммуникация между разработчиками. Понятнее для большинства — коммуникация лучше.

Но не забывайте, что бывают люди и с другими предпочтениями. И увидев у кого-то непривычный стиль валидного кода, не спешите тыкать пальцем «гы-гы, вот ламер, даже теги не закрыл». Лучше поинтересуйтесь, почему так сделано. Некрасиво — не обязательно плохо, а непривычно — не всегда некрасиво. Иногда красота проявляется лишь в целой картине.

А вообще в веб-платформе масса вещей, куда более важных, чем стиль написания тегов или спор между табами и пробелами. Та же доступность хотя бы!

И всё-таки, к одному из аргументов я хотел бы вернуться. В общем-то, ради него я и затеял эту статью:)

Веб-платформа большая и сложная. В ней много неизвестного и непонятного — даже для авторов спецификаций. Сложность и неизвестность пугает. Это естественно. И людям естественно успокаивать себя, отгораживаться от своих страхов приметами и ритуалами. Сплюнул через левое плечо — «беда обойдет». Успел потрогать пуговицу перед черной кошкой — «неудача отступит». Написал тег со слешем — «код не сломается». И т.п.

Не надо так. Приметы не работают. Единственная настоящая защита против неизвестности — знание. Не бойтесь узнавать новое. Даже в том, что другие считают «элементарным». В технике нет мелочей. А HTML — давно не смешные буквы в угловых скобках, а целая колоссальная экосистема. В ней надолго хватит места самым неожиданным открытиям.

А лучший способ изучить что-либо — эксперимент. И у веба огромное преимущество перед, скажем, ядерной физикой или генетикой, что здесь в экспериментах «для себя» иногда можно нарушать правила и смотреть, что из этого выйдет — ничего действительно страшного не случится. Зато станет понятнее, почему правила именно такие. И вообще — а правила ли это (а не реликт совсем другой эпохи с совсем другими ограничениями, скажем — это я не про закрытие тегов, а абстрактно:)

Так что не бойтесь экспериментировать! И пусть с каждым днем всё больше особенностей веб-платформы становится для вас не странной «магией», а понятным и предсказуемым инструментом. Который при ненадобности всегда можно отложить в дальний ящик, но иногда, если задача того потребует, использовать на радость себе и пользователям.

P.S. Это тоже может быть интересно:

seodon.ru | Учебник HTML — Теги и синтаксис HTML

Опубликовано: 29.09.2010 Последняя правка: 08.12.2015

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

Открывающие и закрывающие теги, теги-контейнеры

Теги могут быть открывающими (начальными) и закрывающими (конечными). Открывающие теги состоят из знаков «<» и «>» между которыми указывается имя тега, а у закрывающих перед именем дополнительно ставится прямой слэш (/).

Большинство HTML-тегов являются парными — имеют обязательные открывающий и закрывающий теги, например: <STRONG> и </STRONG>. Некоторые имеют только открывающий тег, например <BR>, и называются пустыми. Другие же могут иметь открывающий тег, а закрывающий можно указывать, а можно и нет, тогда браузер сам определит, где заканчивается действие тега.

Теги, которые имеют обязательный или необязательный закрывающий тег принято называть теги-контейнеры или элементы-контейнеры.

Все теги HTML не чувствительны к регистру, то есть можно указывать <STRONG> и <strong> или вообще <sTRonG>.

Теперь совет. Рекомендую вам всегда писать теги в нижнем регистре (строчными буквами) и ставить необязательные закрывающие теги. Во-первых, это является признаком профессионализма и хорошего тона, а во-вторых, в HTML-коде со всеми закрывающими тегами гораздо проще ориентироваться и править его. Ну да я вам об этом еще не раз напомню.

Пример использования тегов

<b>Жирный шрифт</b> <i>Курсивный шрифт</i>

Результат в браузере

Жирный шрифт Курсивный шрифт

И все таки, как будет правильно — «теги» или «элементы»?

Вообще, в большинстве случаев правильно будет говорить — «элементы». Именно из HTML-элементов состоит веб-страница, и именно элементы выводят в окне браузера изображения, таблицы, ссылки и т.д. А теги предназначены для того, чтобы сообщить браузеру, где и какой элемент находится, начинается и заканчивается. Давайте еще раз рассмотрим пример, который расположен выше. Там указаны два элемента B и I. Каждый из них содержит обычный текст и имеет открывающий и закрывающий теги.

Так уж сложилось, что на сегодняшний день слово «тег» прочно вошло в русский язык (да и не только в русский) в качестве синонима слову «элемент». Я думаю из-за того, что при использовании обоих слов не теряется смысл повествования. Поэтому в данном учебнике я тоже буду использовать оба этих слова, чтобы вы привыкли к ним и научились подсознательно определять, о чем идет речь в каждом конкретном случае. И сильно на этом не заморачивайтесь, знаете, чем отличается тег от элемента — вот и хорошо.

Теги можно указывать в одну строку, а можно в несколько

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

Пример

<b>Жирный      шрифт</b>
  <i>
   Курсивный шрифт
  </i>

Результат в браузере

Жирный шрифт Курсивный шрифт

Правильная вложенность тегов

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

<тег1><тег2><тег3>…</тег3></тег2></тег1> — правильно

<тег1><тег2><тег3>…</тег1></тег3></тег2> — неправильно

Пример использования вложенных тегов

<b><i>Жирный курсивный шрифт</i></b>

Результат в браузере

Жирный курсивный шрифт

Родительские и дочерние теги, потомки и предки

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

<тег1>
 <тег2>...</тег2>
 <тег3><тег4>...</тег4></тег3>
</тег1>

Родительские теги — тег является родительским для других тегов, если они вложены внутрь него на один уровень. В нашем примере <ТЕГ1> является родительским для <ТЕГ2> и <ТЕГ3>, но не является для тега <ТЕГ4>. А вот <ТЕГ3> родитель <ТЕГ4>.

Дочерние теги — обратно родительским. <ТЕГ2> и <ТЕГ3> дочерние для <ТЕГ1>, а <ТЕГ4> для тега <ТЕГ3>.

Предки — тег является предком для всех тегов, которые находятся внутри него на любом уровне вложенности. <ТЕГ1> предок для всех тегов, а <ТЕГ3> предок <ТЕГ4>.

Потомки — обратно предкам. Все теги — потомки тега <ТЕГ1>, но <ТЕГ4> еще и потомок тега <ТЕГ3>.

Ну что, не запутались? Чтобы проще запомнить, проведите аналогию со своим семейным древом и сразу все встанет на свои места.

Что значит «один тег содержит другой»?

Как вы уже знаете, теги можно вкладывать друг в друга и, соответственно, одни могут содержать другие. Но тут есть один небольшой, но очень важный момент, которому новички часто не уделяют должного внимания. Давайте возьмем уже знакомый нам пример:

<тег1>
 <тег2>...</тег2>
 <тег3><тег4>...</тег4></тег3>
</тег1>

Говорят, что один тег содержит другой только, если первый является родительским тегом, а второй — дочерним и никак иначе. то есть в нашем примере <ТЕГ1> содержит <ТЕГ2> и <ТЕГ3>, но не содержит <ТЕГ4>. А вот <ТЕГ3> как раз и содержит <ТЕГ4>. Немного необычно, правда? Но своя логика в этом есть, согласитесь.

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

Типы тегов

В HTML, теги делятся на несколько типов или моделей:

Inline (встроенные, уровня строки) — все, что выводят эти теги на страницу, всегда отображается браузером на одной сроке. И только если доступной ширины (например, ширины окна браузера) не хватает, то происходит перенос строки на следующую и т.д.

Пример использования встроенных тегов

<b>Жирный шрифт</b> <i>Курсивный шрифт</i>

Результат в браузере

Жирный шрифт Курсивный шрифт

Block (блочные, уровня блока) — все, что выводит каждый из таких тегов на страницу, отображается браузером с новой строки, После себя такие элементы также создают переносы строк.

Пример использования блочных тегов

<p>Параграф 1</p> <p>Параграф 2</p>

Результат в браузере

Параграф 1

Параграф 2

Есть еще теги других типов, но о них мы с вами поговорим в дальнейших уроках, а эти два типа самые распространенные в HTML.

Ну что, надеюсь пока все понятно? Тогда пошли дальше.

Что такое теги и для чего они нужны? — Знакомство с HTML — codebra

Что такое парные теги?

Продолжим наше ознакомление с искусством верстки на HTML. На очереди – парные теги. И вообще, что за слово такое ругательное? Теги? Итак, тег, умные люди, в частности отцы паутины, называют «дескриптор», но я его так никогда не называл, и не буду называть на моем сайте, можно же просто – «тег». Тег – это элемент языка разметки текста (HTML). Кратко говоря: «Тег – элемент HTML», все, что внутри тега, называют содержанием элемента. Логично, не так ли? Я говорю проще: «внутри тега», умные слова только на конференциях нужно использовать, а не в быту. Итак, подобрались к парным тегам, включаем логику, парный, хм… значит, есть начальный тег и конечный тег, но их так не называют, кроме Википедии, конечно. Правильно так: «Открывающий и Закрывающий тег». Даже с большой буквы написал, в знак уважения. Теперь, например: <p>…</p>, есть открывающий, есть закрывающий тег, значит парный тег. Тег <h2>…</h2> тоже парный, кстати, знакомлю, это заголовок первого уровня, то есть простой текст, по отношению к нему, будет меньше. Для большего понимания проведем аналогию: тег – это одежда, а его содержимое – это человек. Облачив человека в одежду, он преобразуется. Также, если обернуть содержимое (текст, например) в тег, он поменяет свой внешний вид. С парными тегами кончено.

Что такое одинарные теги?

Несложно догадаться, что у одинарного тега нет закрывающего, пример: <br>, <hr>, <img>. Думаю, кто-то видел теги такого плана: <br/>, ну и так далее. Это «Старый стиль». Да, когда был HTML4, нужно было закрывать одинарный тег именно так, но с появлением HTML5 многое изменилось, и не только это конечно. Не настаиваю на написание закрывающей косой черты и в системе проверки это учтено, но давайте быть новаторами и не тормозить процесс! Те три тега «перенос строки», «разделительная линия», «изображение» соответственно.

И в продолжении

Старайтесь учить сразу эти теги. Отрабатывайте их в заданиях и придумывайте свои задания, для себя. Читайте литературу и тематические сайты. А теперь приступите к заданию. В нем немного нужно подумать. Даю подсказку, после слова «это» напишите какой-то тег, тот который в задании.

О парных тегах

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

Правильно структурировать информацию, тоже хорошее дело, ведь поисковые системы (Yandex, Google), любят, когда заголовки помещены в теги заголовка первого уровня – это информация официальная, ее озвучил глава Google. На поисковую выдачу влияет так же использование тегов «маркированный список» и «нумерованный список». На поисковую выдачу так же влияет использование атрибутов title, alt. Да это только малая часть, на самом деле, есть 200 официальных пунктов от Google, которые влияют на выдачу в поисковике. Возможно, обо всех их я напишу.

: Элемент текстового абзаца — HTML

HTML-элемент <p> представляет собой абзац. Абзацы обычно представлены в визуальной среде в виде блоков текста, отделённых от соседних блоков пустыми строками и/или отступом в первой строке, кроме этого HTML-абзацы могут представлять собой структурную группировку однотипного содержимого, например изображений или полей формы.

Абзацы являются блочными элементами и, в частности, автоматически закрываются, если другой блочный элемент находится перед закрывающим тегом </p>. Смотрите ниже «Пропуск тега».

The source for this interactive example is stored in a GitHub repository. If you’d like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

Категории контента Потоковый контент, явный контент.
Разрешённое содержимое Фразовый контент.
Пропуск тега Требуется открывающий тег. Закрывающий тег может быть пропущен, если за элементом <p> сразу следует элемент <address>, <article>, <aside>, <blockquote>, <div>, <dl>, <fieldset>, <footer>, <form>, <h2> (en-US), <h3> (en-US), <h4> (en-US), <h5> (en-US), <h5> (en-US), <h6> (en-US), <header>, <hr>, <menu>, <nav>, <ol>, <pre>, <section>, <table> (en-US), <ul> или другой элемент <p>, или если в родительском элементе больше ничего не содержится и родительский элемент не является элементом <a>.
Разрешённые родительские элементы Любой элемент, который разрешает потоковый контент в качестве содержимого.
Разрешённые роли ARIA Любые
DOM-интерфейс HTMLParagraphElement (en-US)

К этому элементу применимы только глобальные атрибуты.

Примечание: Атрибут align в тегах <p> устарел и больше не должен с использоваться.

HTML

<p>Это первый абзац текста.
  Это первый абзац текста.
  Это первый абзац текста.
  Это первый абзац текста.</p>
<p>Это второй абзац текста.
  Это второй абзац текста.
  Это второй абзац текста.
  Это второй абзац текста.</p>

Результат

По умолчанию браузеры разделяют абзацы одной пустой строкой. Альтернативные методы разделения, такие как отступы в первой строке абзаца, могут быть достигнуты с помощью CSS:

HTML

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

<p>Письмо (имеется ввиду письменность), предназначенное для редактирования,
например, школьные записи и черновики, использует для разделения
как пустые строки, так и отступы. В готовых работах объединение этих двух способов
считается излишним и любительским.</p>

<p>В очень старом письме абзацы были разделены
специальным символом: ¶, <i>pilcrow</i> (знак абзаца).
В настоящее время это считается замкнутым и трудно читаемым.</p>

<p>Насколько трудно читать? Посмотрите сами:
  <button data-toggle-text="О нет! Переключи обратно!">Используем "pilcrow" для абзацев</button>
</p>

CSS

p {
  margin: 0;
  text-indent: 3ch;
}

p.pilcrow {
   text-indent: 0;
   display: inline;
}
p.pilcrow + p.pilcrow::before {
  content: " ¶ ";
}

JavaScript

document.querySelector('button').addEventListener('click', function (event) {
  document.querySelectorAll('p').forEach(function (paragraph) {
    paragraph.classList.toggle('pilcrow');
  });
  var newButtonText = event.target.dataset.toggleText;
  var oldText = event.target.innerText;
  event.target.innerText = newButtonText;
  event.target.dataset.toggleText = oldText;
});

Результат

Разделение контента на абзацы помогает сделать страницу более доступной. Программы чтения с экрана и другие вспомогательные технологии предоставляют шорткаты («shortcut» — кратчайший путь), позволяющие пользователям переходить к следующему или предыдущему абзацу, позволяя им просматривать содержимое, например, как пустая строка позволяет пользователям, воспринимающим информацию визуально, пропускать абзацы.

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

Если требуется дополнительное пространство, используйте свойства CSS, например margin, чтобы создать такой эффект:

p {
  margin-bottom: 2em; // увеличение пустого пространства после абзаца
}

BCD tables only load in the browser

Элементы, теги и атрибуты — Основы HTML, CSS и веб-дизайна

Основы HTML, CSS и веб-дизайна

Немного формальностей

Мало кто любит терминологию и формальности, но, к счастью, в мире HTML всё довольно просто.

Вкратце:

  1. Страница состоит из элементов.
  2. Элемент — это набор из тегов и содержания.
  3. Теги чаще всего идут парами: открывающий (<tag>) и закрывающий (</tag>). Между ними находится то, что попадает под действие этого элемента.
  4. Открывающий тег может содержать дополнительную информацию — атрибуты и значения атрибутов. Атрибуты позволяют «настроить» тег.

В примере из предыдущего урока есть элемент a (anchor — якорь), состоящий из открывающего и закрывающего тегов <a></a>.

<a href="https://ru.hexlet.io">Хекслет</a>

Это ссылка, и у неё есть атрибут href со значением https://ru.hexlet.io. Между открывающим и закрывающим тегами находится содержание — слово «Хекслет». Именно оно становится ссылкой.

А ниже есть картинка. Это пример одиночного тега, элемента, в котором не нужен закрывающий тег. Их ещё называют self-closing element — «самозакрывающиеся элементы».

<img src="https://i.imgur.com/789p0uP.png">

Как видите, мы указали атрибут src (от английского «source» — источник) со значением https://i.imgur.com/789p0uP.png. Это адрес файла изображения.

А некоторые элементы состоят из нескольких вложенных элементов. Например, списки:

<ol>
  <li>Код. Тайный язык информатики (Чарльз Петцольд)</li>
  <li>Не заставляйте меня думать (Steve Krug)</li>
  <li>Дизайн привычных вещей (Donald Norman)</li>
</ol>

Это — пронумерованный список (ordered list), поэтому тег называется <ol>. А каждая строчка списка — это элемент списка (list item) — <li>.

На странице это будет выглядеть примерно так:


  1. Код. Тайный язык информатики (Чарльз Петцольд)
  2. Не заставляйте меня думать (Steve Krug)
  3. Дизайн привычных вещей (Donald Norman)

А непронумерованный список (unordered list) создаётся с помощью <ul>. Заметьте, что достаточно лишь изменить открывающий и закрывающий тег всего списка, а сами элементы списка изменять не нужно.

<ul>
  <li>Код. Тайный язык информатики (Чарльз Петцольд)</li>
  <li>Не заставляйте меня думать (Steve Krug)</li>
  <li>Дизайн привычных вещей (Donald Norman)</li>
</ul>

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

See the Pen HTML lists with links by Hexlet (@hexlet) on CodePen.


Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >

Нашли опечатку или неточность?

Выделите текст, нажмите
ctrl + enter
и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Закрывающий тег в HTML / JavaScript

У меня есть JavaScript, в котором одна из строк

imgtag = '<div><a expr:href="data:post.url"><img src="'+img[0].src+'"/></a></div>';

В приведенном выше коде я хочу, чтобы <a expr:href="data:post.url"> был изменен в <a expr:href='data:post.url'> , но добавление этого типа закрывающего тега противоречит закрывающему тегу Javascripts. Что же мне делать ?

javascript

html

Поделиться

Источник


Dhiraj Barnwal    

09 августа 2013 в 15:00

3 ответа


  • jQuery — как переместить закрывающий тег в мой HTML

    Я ищу способ переместить только закрывающий тег формы с помощью jQuery. В настоящее время HTML выглядит примерно так: <form class=myform> <input class=text_field id=profile_nickname name=profile[nickname] size=30 type=text value= data-validate=true> </form> <div…

  • закрывающий тег скрипта и document.write помечается в Visual Studio

    Окружающая среда: Visual Studio 2008 SP1, ASP.NET и JavaScript Я пытаюсь сделать быстрый тест document.write , но как только я добавляю теги скрипта Visual Studio, редактору это не нравится. В частности, закрывающий тег сценария? Я получаю эти волнистые линии, как только ввожу закрывающий тег…



2

Вы можете избежать одинарной кавычки, например \'

Поделиться


Raidri supports Monica    

09 августа 2013 в 15:03



2

Вы хотите сказать, что хотите убежать от персонажей?

Если это так, то вам нужно будет включить \' вместо " и изменить свой код на:

imgtag = '<div><a expr:href=\'data:post.url\'><img src="'+img[0].src+'"/></a></div>';

Это приведет к появлению строки expr:href='data:post.url'

Поделиться


Tim B James    

09 августа 2013 в 15:04



1

Спаситесь от него с помощью \' .

imgtag = '<div><a expr:href=\'data:post.url\'><img src="'+img[0].src+'"/></a></div>';

Поделиться


sushain97    

09 августа 2013 в 15:04


  • Закрывающий тег PHP в литий

    Как вы знаете, большинство источников PHP устарело вставлять закрывающий тег , но мне интересно, почему в документации Lithium рекомендуется включать закрывающий тег PHP? Есть ли для этого рациональная причина? Кроме того, в его документации есть еще какой-то устаревший стиль. Является ли литий…

  • Найдите закрывающий тег HTML в Sublime Text

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


Похожие вопросы:

Закрывающий тег HTML

Когда уместно использовать закрывающий тег и когда достаточно косой черты? <div></div> против. <div />

Закрывающий тег Javascript повторяется дважды с php

<?php echo <script type = ‘text/javascript’></script>; ?> источник страницы вывода показывает это : <script type = ‘text/javascript’></script></script> Почему он…

Как я могу остановить HTML аккуратно удалить мой закрывающий тег?

В настоящее время HTML Tidy изменяет любой пустой тег HTML и объединяет их в один, например: <script src=somescript.js></script> Превращается в: <script src=somescript.js /> Это…

jQuery — как переместить закрывающий тег в мой HTML

Я ищу способ переместить только закрывающий тег формы с помощью jQuery. В настоящее время HTML выглядит примерно так: <form class=myform> <input class=text_field id=profile_nickname…

закрывающий тег скрипта и document.write помечается в Visual Studio

Окружающая среда: Visual Studio 2008 SP1, ASP.NET и JavaScript Я пытаюсь сделать быстрый тест document.write , но как только я добавляю теги скрипта Visual Studio, редактору это не нравится. В…

Закрывающий тег PHP в литий

Как вы знаете, большинство источников PHP устарело вставлять закрывающий тег , но мне интересно, почему в документации Lithium рекомендуется включать закрывающий тег PHP? Есть ли для этого…

Найдите закрывающий тег HTML в Sublime Text

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

javascript regex-добавить закрывающий тег img

Мне нужно добавить закрывающий тег изображения. Текущая html: <img class=logoEmail src=/images/logoPDF.png> Чего я хочу: <img class=logoEmail src=/images/logoPDF.png/> Как я могу это…

Найти соответствующий закрывающий тег в строке html

У меня есть частичная строка html, и, учитывая положение открывающего тега, я хотел бы иметь возможность найти положение соответствующего закрывающего тега. Я не могу использовать парсер html (по…

Имеет ли документ XML закрывающий тег, подобный HTML?

В документе HTML есть HTML открывающих и закрывающих тега: <html> </html> . Это то же самое для XML? Для XML: <?xml version=1.0?> нужно ли ему </xml> ? Я читаю здесь :…

WebD2: общие теги HTML

Ниже приведены некоторые факты о тегах HTML (а также несколько фактов о тегах XHTML):

DOCTYPE: определение вашей версии HTML

Каждая веб-страница должна начинаться с объявления DOCTYPE. Это должен быть самый первый элемент в самой первой строке вашего HTML- или XHTML-кода. Это сообщает браузерам, в какой версии HTML была закодирована веб-страница, что помогает им знать, как обрабатывать код. До HTML5 объявления DOCTYPE были длинными и сложными.Например, вот объявление DOCTYPE для XHTML 1.1:

В HTML5 объявление DOCTYPE намного проще:

Понимание следующих таблиц:

Общие HTML-теги представлены ниже в четырех таблицах в зависимости от их назначения. Первая таблица включает теги, которые управляют общей структурой веб-страницы.Вторая и третья таблицы включают теги, которые размечают большую часть содержимого веб-страницы. Теги контейнеров (содержащие контент) представлены во второй таблице, а теги неконтейнеров (те, которые автономны) представлены в третьей таблице. Итоговая таблица содержит теги, которые используются при разметке таблиц HTML, которые рассматриваются в Модуле 5 этого модуля.

Структура документа

Открывающая бирка Закрытие бирки Описание
Открывает и закрывает HTML-документ
Первый из двух основных разделов HTML-документа.Раздел используется для предоставления информации о документе для использования в основном поисковыми системами и браузерами.
<название> Название документа. Этот элемент вложен в раздел . В HTML5 это единственный обязательный тег, кроме объявления DOCTYPE.
Второй из двух основных разделов HTML-документа.Раздел содержит все содержимое веб-страницы.

Содержимое (контейнер) Теги

С

Открывающая бирка Закрытие бирки Описание

до

по

Заголовки. h2 — основной заголовок, h3 — второстепенный и т. д.
Пункт
Контейнер для блока содержимого
Контейнер для встроенного содержимого , например содержимого внутри абзаца.
Выделение выделенного текста (обычно курсивом , ).
Делает содержащийся текст полужирным .
Ссылка
Заказанный (пронумерованный) список
Неупорядоченный (маркированный) список
  • Элемент списка, должен быть вложен в элемент списка, например

      или

    -> Комментарий.Все, что находится между этими тегами, не отображается на экране. Это полезно для того, чтобы делать заметки себе или другим, кто может просматривать исходный код веб-страницы.

    HTML5

    Семантические теги

    HTML5 представил несколько новых тегов, называемых семантическими тегами. Эти теги были разработаны, чтобы сообщать о функциях блоков контента, которые были обычными для многих веб-страниц. До HTML5 разработчики просто использовали теги

    для всех блоков.

    Открывающая бирка Закрытие бирки Описание
    <заголовок> Содержит вводный контент для страницы (например,g., баннер) или раздел страницы.
    Содержит навигационное содержимое, например меню навигации веб-сайта.
    <основной> Содержит основное содержимое веб-страницы.
    <сторона> Содержит контент, косвенно связанный с основным контентом страницы (часто он представлен на боковой панели).
    <нижний колонтитул> Содержит нижний колонтитул страницы или раздела страницы. Обычно нижний колонтитул содержит информацию о содержимом, такую ​​как автор и заявление об авторских правах.

    Пустые метки (без контейнера)

    Таблицы

    Открывающая бирка Закрытие бирки Примеры атрибутов Описание
    <таблица>
    Добавляет таблицу Строка таблицы (начало и конец). scope = «row»
    scope = «col» При создании таблицы для отображения данных используйте этот тег, чтобы различать первую строку или столбец ячеек как ячейки заголовка для всех других ячеек в том же столбце или строке. Браузеры обычно отображают этот элемент полужирным шрифтом по центру ячейки таблицы. Атрибут области определяет, является ли это заголовком строки или заголовком столбца. Ячейка данных таблицы. colspan = «число» Используется с элементами

    или

    . Распределяет ячейки по нескольким столбцам. rowspan = «число» Используется с элементами

    или

    . Распространяет ячейки на несколько строк.

    Дополнительные закрывающие теги в HTML — tempertemper

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

    Например, вы можете написать список, не закрывая

  • :

      

    • Красный
    • Зеленый
    • Синий

    Возможно, это связано с тем, что я писал HTML до того, как спецификация HTML5 была поддержана в браузерах (XHMTL довольно строго относился к закрывающим тегам!), Но, хотя он действителен, мне это кажется немного странным.

    Помимо того, что выглядит странно, , есть несколько веских причин, по которым я отвлекаю тех, кого я преподаю HTML, от этого типа кода.

    Не для каждого элемента

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

      , ошибочно думая, что вам разрешено делать это со списками, когда разрешено только элементу списка (

    • ) оставаться открытым.

      Вот элементы, которые можно оставить незакрытыми:

      • <опция>


      • <фут>

      Ошибки ломают

      Если вы опустите это

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

    Это может остаться незамеченным для посетителей, которые используют блестящую новую версию Chrome на последней версии macOS, но, как известно каждому веб-разработчику, люди используют всевозможные технологии для чтения наших веб-сайтов; эти старые браузеры, устаревшие операционные системы, программы чтения с экрана и голосовые контроллеры могут быть не такими простыми…

    Усложняет отладку

    Иногда трудно обнаружить сломанный HTML; особенно если вы проверяете свой код вручную.Найти отсутствующий закрывающий тег, который вызывает проблемы с проверкой, намного сложнее, если (совершенно допустимые) закрывающие теги отсутствуют повсюду.

    Найти место сложно

    Даже при отсутствии ошибок проверки отсутствие закрывающего

  • , например, может затруднить поиск своего места на странице.

  • могут содержать всевозможные другие элементы (

    ,

    ,