DIVS пора остановиться (злоупотребление)
нам нравится (используем)<div>
Этикетка. Они существуют уже несколько десятилетий, и на протяжении десятилетий они были незаменимым элементом, когда что-то нужно обернуть для (дополнительного) стиля или макета. При просмотре онлайн-сайтов все еще часто можно увидеть что-то вроде следующего:
<div class="container" id="header">
<div class="header header-main">Super duper best blog ever</div>
<div class="site-navigation">
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/archive">Archive</a>
</div>
</div>
<div class="container" id="main">
<div class="article-header-level-1">
Why you should buy more cheeses than you currently do
</div>
<div class="article-content">
<div class="article-section">
<div class="article-header-level-2">
Part 1: Variety is spicy
</div>
<!-- cheesy content -->
</div>
<div class="article-section">
<div class="article-header-level-2">
Part 2: Cows are great
</div>
<!-- more cheesy content -->
</div>
</div>
</div>
<div class="container" id="footer">
Contact us!
<div class="contact-info">
<p class="email">
<a href="mailto:us@example.com">us@example.com</a>
</p>
<div class="street-address">
<p>123 Main St., Suite 404</p>
<p>Yourtown, AK, 12345</p>
<p>United States of America</p>
</div>
</div>
</div>
Ху, это многоdiv
Этикетка. Тем не менее, это работает. Я имею в виду в основном, у него есть структура, которая вам нужна. И я уверен, что это будет выглядеть так, как вы хотите после того, как вы закончите добавлять стили. Тем не менее, у него есть серьезные проблемы:
-
Доступность - много
a11y tools
Он очень умен и сделает все возможное, чтобы проанализировать структуру страницы, чтобы помочь пользователям ориентироваться в соответствии с намерением создателя страницы, и предоставить пользователям простые ссылки перехода, чтобы направить их к той части страницы, которая им интересна. Однако,<div>
Теги на самом деле не передают никакой полезной информации о структуре документа. самый умный в миреa11y tool
Все еще не человек, не могу ожидать, что он разберетclass
а такжеid
Атрибуты или способность распознавать странные и дикие способы, которыми разработчики по всему миру называют блочные элементы. я могу определитьclass="article-header-level-2"
это подзаголовок, но машины не могут. (Уберите это с моего компьютера, если можете, но я и к этому не готовРеволюция искусственного интеллектаШерстяная ткань. ) -
Читабельность — чтобы прочитать этот код, нужно внимательно просмотреть имена классов, начиная с
<div class="..."></div>
Выберите между шаблонами. Как только вы (код) спуститесь на несколько уровней вниз, отслеживайте, какой из них</div>
конечный тег, с которым<div ...>
Начните помечать корреспонденцию, и это становится сложно. Вы начинаете сильно полагаться на функции IDE, такие какРаскажите разные уровни отступаилиВыделите совпадающие тегидля отслеживания вашего местоположения, а в более длинных документах может потребоваться много прокрутки поверх этих функций. -
Согласованность и стандарты. Может быть неприятно начинать новую работу или переходить к новому проекту и с нуля изучать сводящую с ума разметку, используемую в кодовой базе. Если бы у всех был стандартный способ отмечать
web
Общая структура в документации, поэтому ее можно легко просматривать, не знакомясь с кодовой базой.HTML
файл и быстро обработать то, что он должен показать. Если бы был только один такой стандарт...
HTML5: этот стандарт
HTML5Не новый. Это преуменьшение;первоначальный рабочий проектОпубликовано для общественного обсуждения в январе 2008 г. (11 лет назад) и стало 4 с половиной года назад в октябре 2014 г.Комплексная рекомендация W3C. Так, как это было вокруг в течение некоторого времени.
HTML5
Одним из основных достижений стало введение набора стандартизированныхсемантический элемент. Термин «семантический» относится к значению слова или предмета, поэтому «семантические элементы» — это элементы, используемые для обозначения структуры документа более осмысленным образом, что позволяет понять, для чего они предназначены и для чего служат в документе. Какова цель. И что важно, поскольку они стандартизированы, эти элементы, определяющие документ, могут использоваться и пониматься всеми, включая ботов.
Я думаю, что сама спецификация HTML5 находится в<div>
Проблема хорошо описана в комментарии под определением элемента:
Примечания: Автор настоятельно рекомендует использовать
div
Элемент считается последним взятым элементом, в том случае, если другие элементы не подходят. Использование более подходящего элемента вместо элемента div делает его более доступным для читателей и упрощает поддержку для авторов. --Я 3.org/TR/HTML5/person…
Элементы семантического блока я разделяю на две категории:Основная структураа такжеМетрики контента. Это не стандартные термины или другие термины, некоторые (различия) я сделал в этой статье. Но я думаю, что это различие достаточно полезно. 🤷♂️
Основная структура
Существует очень распространенный шаблон, который можно найти на веб-сайтах, в учебных пособиях и даже в библиотеках CSS по всему Интернету, и на то есть веские причины. Мы часто делим самую верхнюю страницу на три области:заголовок,Домаа такженижний колонтитул, а затем разделите эти регионы на необходимое количество регионов. Я включил это в приведенный выше пример, чтобы продемонстрировать это:
<div class="container" id="header">...</div>
<div class="container" id="main">
...
<div class="article-section">...</div>
...
</div>
<div class="container" id="footer">...</div>
Я видел (и использовал) этот шаблон в течение долгого времени, и имеет смысл структурировать документ таким образом, как для чтения HTML, так и для более простого оформления страницы в CSS. Страницы элементов верхнего и нижнего колонтитула могут быть проще в использовании с использованием частичных шаблонов на таких языках, как PHP или Rails/ERB, потому что вы можете включить общие разделы верхнего и нижнего колонтитула на свой сайт:
<?php include 'header.php'; ?>
<div id="main">...</div>
<?php include 'header.php'; ?>
Так вот в чем дело: все думали, что это хорошая модель. Это включает в себяWHATWG
а такжеW3C
, они стандартизировали схему в четыре новых элемента HTML5 с очень понятными именами:<header>
, <main>
, <footer>
а также<section>
.
Bookends: <header>
а также<footer>
<header>
а также<footer>
Элементы в основном являются близнецами: они определяются в спецификации очень похоже и следуют тем же правилам, что и в отношении того, где их разрешено использовать, с той лишь разницей, что их семантическое назначение: заголовки находятся в начале, нижние колонтитулы — в конце. вещи . для事物
, я имею в виду не только для страницы: эта пара элементов предназначена для использования в любой части документа, представляя фрагмент содержимого с четко определенным началом и концом. Это могут быть формы, статьи, разделы статей, сообщения в социальных сетях, карточки и т. д.
Верхний и нижний колонтитулы семантически близкиsectioning rootилиsectioning contentэлемент. картина<body>
, <blockquote>
, <section>
, <td>
,<aside>
и многие другие элементы; щелкните ссылку выше, если хотите просмотреть полный список. Вспомогательные технологии могут использовать эти и другие элементы для создания структуры документа, что может облегчить пользователям доступ к нему. в каждомsectioning root/content
, вы не должны использовать более одного<header>
или<footer>
. (Один в порядке, а не два одинаковых)
В заключение,<header>
Часто элемент заголовка сохраняется как его контекст (<h1>-<h6>
). Это не обязательно, но может помочь сгруппировать другие связанные элементы с заголовками, такими как ссылки, изображения или подзаголовки, и сохранить согласованную структуру, даже если заголовок<header>
единственный элемент в .
хороший:<main>
Третий основной элемент области --<main>
особый. В спецификации указано о<main>
две очень важные вещи:
Область основного содержимого документа включает содержимое, специфичное для документа, и не включает содержимое, которое повторяется в наборе документов, например ссылки для навигации по сайту, информацию о версии, логотип сайта, баннеры и формы поиска (если только основная функция документа или приложения — форма поиска) --Я 3.org/TR/HTML5/person…
так,<main>
Это место, где вы размещаете свои полезные материалы, важная часть страницы, особенно причина (или цель), по которой пользователь пришел на эту страницу, а не на ваш сайт. Другими словами, основное содержание. 😯😲🤯
Все остальное, логотипы, формы поиска и навбары можно найти в<body>
середина<header>
или<footer>
в, но в<main>
за пределами.
В документе не может быть более одного видимого
main
элемент. Если в документе их несколькоmain
элемент, вы должны использоватьскрытый атрибутСкрыть все остальные (основные) экземпляры. --Я 3.org/TR/HTML5/person…
Это очень уникально. а также<header>
а также<footer>
(и другие элементы блока иначе),<main>
Не может использоваться на всей странице произвольного содержимого фрагмента; его следует использовать только один раз. Вернее, его можно использовать в документе несколько раз, но одновременно можно увидеть только один.<main>
элементы, все остальные (
display:none
. Если подумать (вы поймете), это полезный шаблон для предварительной загрузки представлений в приложении: создайте новый<mian hidden>
, получить некоторый контент, который пользователь может просмотреть следующим (например, следующую статью в серии, следующее слайд-шоу и т. д.), а затем, когда пользователь щелкнетссылка/кнопкаПри загрузке этого вида, включив обаскрытый атрибут, электрический ток<main>
Переключитесь на предварительно загруженный (тот).
Прежде чем продолжить, давайте сделаем паузу и посмотрим на пример выше. если мы используем<header>
,<main>
а также<footer>
В качестве основной структуры статьи это выглядит так:
<header>
<h1>Super duper best blog ever</h1>
...
</header>
<main>
<h2>Why you should buy more cheeses than you currently do</h2>
...
</main>
<footer>
Contact us!
<div class="contact-info">this.is.us@example.com</div>
</footer>
Это действительно здорово! Однако предстоит еще много работы.
авария:<section>
Итак, у нас есть базовый план страницы: верхний и нижний колонтитулы и основная область содержимого. Настало время добавить отличный контент.
Часто вы захотите разбить свой контент на разделы, особенно для контента с большим количеством текста, такого как эта статья, потому что никому не нравится читать эти непонятные стены текста.
<section>
Пригодится. Это простейшее из серии правил: структурно говоря, это просто<div>
. Один<section>
Начинает новую область «содержимое разделов», поэтому она может иметь свою собственную<header>
а также<footer>
.
Так,<section>
и старый добрый<div>
В чем разница, и тогда, когда вы должны их использовать? Что ж, позвольте мне снова процитировать спецификацию:
Примечания:
Элемент не является универсальным элементом-контейнером. Авторам рекомендуется использовать элемент [div](https://www.w3.org/TR/html5/grouping-content.html#elementdef-div), когда элемент используется только для целей стилизации или для облегчения написания сценариев. Общее правило заключается в том, что элементы применяются только в том случае, если их содержание явно указано в тексте [контур](https://www.w3.org/TR/html5/sections.html#outline). -- [https://www.w3.org/TR/html5/sections.html#the-section-element](https://www.w3.org/TR/html5/sections.html#the-section- элемент)
Вы знаете, в общих чертах,Спецификация HTML5на самом деле читается. Это одна из наиболее читаемых спецификаций. Всякий раз, когда я просматриваю его в поисках быстрых ответов, я неизбежно узнаю что-то неожиданное и полезное, особенно когда я начинаю нажимать на ссылки. Попробуйте иногда (вы тоже)!
Короче говоря, если вы хотите перечислить часть документа в оглавлении, используйте<section>
. Если нет, используйте<div>
или другие элементы.
Метрики контента
Отлично, у нас есть прочная структура страницы. Мы четко обозначили основные области контента на странице, а не просто настроили их по отдельности.<div>
, мы скорректировали верхние и нижние колонтитулы и главы. Однако семантики здесь определенно больше, чем в нашем документе.
Давайте поговорим о некоторых элементах, добавленных в HTML5, которые передают семантику контента, а не структуру.
в общем и целом:<article>
<article>
Элементы используются для представления совершенно отдельных областей контента, которые могут быть извлечены со страницы и помещены в другой контент, но при этом иметь смысл. Это может быть текстовая статья или блог, но ее также можно использовать для постов в социальных сетях, таких как твиты или стикеры на стене Facebook.
Спецификация HTML5Рекомендуется, чтобы у статей всегда был заголовок, который определяет, что это такое, в идеале с использованием элемента заголовка.(<h1>-<h6>)
.<article>
также может иметь<header>
,<footer>
а также<section>
элемент, поэтому вы можете использовать его для встраивания полного фрагмента документа со всей необходимой структурой в другие страницы.
Возвращаясь к примеру выше, мы используем<article>
и некоторые другие элементы, которые мы обсуждали, чтобы переписать группуclass="article-*"
Элементы.
<article>
<header>
<h1>Why you should buy more cheeses than you currently do</h1>
</header>
<section>
<header>
<h2>Part 1: Variety is spicy</h2>
</header>
<!-- cheesy content -->
</section>
<section>
<header>
<h2>Part 2: Cows are great</h2>
</header>
<!-- more cheesy content -->
</section>
</article>
Разве это не более читабельно, чем оригинал? И это не только легче читать, но и более полезно для вспомогательных технологий; боты не всегда могут определить ваш конкретный шаблон имени класса, но они могут следовать этой структуре.
использовать:<nav>
Этот элемент более известен, чем другие элементы.<nav>
Стремитесь четко определить основные навигационные блоки на странице, группы ссылок, которые помогают пользователям ориентироваться в остальной части сайта (например, карту сайта или список ссылок в заголовке), или текущую страницу (например, оглавление).
В верхней части нашего примера поместим<nav>
Применяется к набору ссылок в заголовке.
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/archive">Archive</a>
</nav>
вообще не меняет структуру, но вы знаете, что это такое, с первого взгляда, но вам не нужно<div>
Читайте и обрабатывайте имена классов, чтобы найти их, и, что более важно, боты тоже могут их найти.
трогать:<address>
Последний элемент, который мы собираемся обсудить, это<address>
. Этот элемент предназначен для отображения контактной информации, которая обычно находится на главной странице.<footer>
используется для обозначения почтового адреса компании, номера телефона, адреса электронной почты службы поддержки и т. д.
Интересно, как<address>
Правила разметки содержимого в элементах открыты.Технические характеристикиУпомяните, что есть несколько других спецификаций, которые касаются этого, и что обеспечение такого уровня детализации, вероятно, выходит за рамки самого HTML.
Распространенным решением являетсяRDFa,СлишкомСпецификация W3C, который использует атрибуты метки для обозначения различных компонентов данных. Ниже представлен нижний колонтитул в нашем примере в разметке<address>
элементы иRDFa
может выглядеть так:
<footer>
<section class="contact" vocab="http://schema.org/" typeof="LocalBusiness">
<h2>Contact us!</h2>
<address property="email">
<a href="mailto:us@example.com">us@example.com</a>
</address>
<address property="address" typeof="PostalAddress">
<p property="streetAddress">123 Main St., Suite 404</p>
<p>
<span property="addressLocality">Yourtown</span>,
<span property="addressRegion">AK</span>,
<span property="postalCode">12345</span>
</p>
<p property="addressCountry">United States of America</p>
</address>
</section>
</footer>
несомненно,RDFa
Немного многословно, но очень удобно для маркировки данных. Если вам интересно узнать оRDFa
Для получения дополнительной информации, пожалуйста, нажмите на следующую ссылку:
- The W3C's RDFa primer
- A description of schemas and links to a bunch of them on schema.org
- The LocalBusiness schema used above
Суммировать
Что ж, мы многое рассмотрели и увидели множество кусочков, примененных к нашим примерам. Итак, давайте соберем все вместе и посмотрим, как это выглядит.
<header>
<h1>Super duper best blog ever</h1>
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/archive">Archive</a>
</nav>
</header>
<main>
<article>
<header>
<h1>Why you should buy more cheeses than you currently do</h1>
</header>
<section>
<header>
<h2>Part 1: Variety is spicy</h2>
</header>
<!-- cheesy content -->
</section>
<section>
<header>
<h2>Part 2: Cows are great</h2>
</header>
<!-- more cheesy content -->
</section>
</article>
</main>
<footer>
<section class="contact" vocab="http://schema.org/" typeof="LocalBusiness">
<h2>Contact us!</h2>
<address property="email">
<a href="mailto:us@example.com">us@example.com</a>
</address>
<address property="address" typeof="PostalAddress">
<p property="streetAddress">123 Main St., Suite 404</p>
<p>
<span property="addressLocality">Yourtown</span>,
<span property="addressRegion">AK</span>,
<span property="postalCode">12345</span>
</p>
<p property="addressCountry">United States of America</p>
</address>
</section>
</footer>
Если вы спросите меня (что вы думаете об обновленном контенте?), то он в 100 раз более удобочитаем, чем исходный пример, и в 100 раз эффективнее с точки зрения SEO и доступности.
Это ни в коем случае не единственные семантические элементы в HTML. Существует множество других элементов, которые помогут вам разметить и структурировать текстовое содержимое, встроить медиа-ресурсы и многое другое. Если вам это нравится и вы хотите копнуть глубже, вот некоторые (теги), чтобы проверить. Вы можете знать некоторые:
Это только начало! Как я уже сказал, когда вы начинаете читатьСпецификация HTMLкогда трудно остановиться. Это очень богатый язык, и я думаю, что люди часто его недооценивают.
оригинал:Dev.to/кен сильфон/…
Статья впервые опубликована:GitHub.com/still99/блог…
больше контента:GitHub.com/still99/блог…