Содержание
Введение в HTML
HTML-теги
Тег: <имя_тега>
Примеры тегов: <html> <body> <section> <article> <div> <h1> <nav> <ul> <ol> <li> <p> <a> <strong> <em> <time> <mark> <img> <video> <audio> <form> <input> <button> <label>
<!— А я комментарий! —>
Парные теги
<h1>Три главных слова</h1>
<p> Инкапсуляция, наследование, полиморфизм! </p>
Одиночные теги
<hr> <!— разделитель —>
<br> <!— перенос строки —>
<input type=»text»> <!— поле ввода —>
<img src=»logo.png»> <!— изображение —>
Вложенные теги
<p> Текст абзаца с <em>выделением</em> </p>
<ul> <li>элемент списка</li> <li>элемент списка</li> </ul>
Ошибки вложенности
<!— Неверный порядок закрытия —> <strong><em>жирный</strong> курсив</em>
<!— Правила для отдельных тегов —>
<ul> <p>название списка</p> <li>элемент списка</li> </ul>
Атрибуты тегов
Атрибутов может быть несколько.
Некоторые теги не могут использоваться без атрибутов.
<img src=»image.jpg»> <input type=»text» name=»email»> <p class=»important»>…</p> <input type=»submit» class=»btn»> <div class=»logo»>…</div> <span class=»date»>…</span>
Простейшая страница
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Заголовок окна</title> </head> <body> <!-- Содержимое --> </body> </html>
Страница сложнее
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Заголовок окна</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1>Заголовок 1</h1> <p>Абзац - это лучшее, что у нас есть!</p> <script src="scripts.js"></script> </body> </html>
Спецификация HTML
Категории содержания
- Metadata content — метаданные для браузеров, поисковиков и так далее (всё, что в <head>).
- Flow content — потоковый контент (всё, что в <body>).
- Sectioning content — крупные смысловые разделы документа.
- Heading content – заголовки.
- Phrasing content — фразовый контент, сам текст документа и мелкие текстовые элементы, которые мельче абзаца.
- Embedded content — встраиваемый контент (изображения, видео, аудио и так далее).
- Interactive content — интерактивные элементы, то, с чем взаимодействует пользователь.
Валидатор
Markup Validation Service http://validator.w3.org/nu/
Обзор тегов
Крупные смысловые разделы
<article>
- Значение: независимая, отделяемая смысловая единица, например комментарий, твит, статья, виджет ВК и так далее.
- Особенности: желателен заголовок внутри. – Типовые ошибки: путают с тегами <section> и <div>.
<section>
- Значение: смысловой раздел документа. Неотделяемый, в отличие от <article>.
- Особенности: желателен заголовок внутри. – Типовые ошибки: путают с тегами <article> и <div>.
<nav>
- Значение: смысловой раздел документа. Неотделяемый, в отличие от <article>.
- Особенности: желателен заголовок внутри. – Типовые ошибки: путают с тегами <article> и <div>.
Заголовки
<h1>…<h6>
- Значение: заголовки смысловых разделов.
- Особенности:
Желателен один <h1> на странице.
Не желательны пропуски в уровнях заголовков на странице. Внутри <article> заголовков можно начинать с <h1>.
На главных страницах не всегда рисуют заголовок первого уровня. - Типовые ошибки:
Определение уровня заголовка по размеру текста на макете.
Не весь крупный текст – заголовки
Поток
<header>
- Значение: вводная часть смыслового раздела или всего сайта, обычно содержит подсказки и навигацию.
- Особенности: этих элементов может быть несколько на странице.
- Типовые ошибки: использовать только как шапку сайта.
<main>
- Значение: основное, не повторяющееся на других страницах, содержание страницы.
- Особенности: должен быть один на странице, исходя из определения.
- Типовые ошибки: включать в этот тег то, что повторяется на других страницах (навигацию, копирайты и так далее).
<footer>
- Значение: заключительная часть смыслового раздела или всего сайта, обычно содержит информацию об авторах, список литературы, копирайт и так далее.
- Особенности: этих элементов может быть несколько на странице. Тег <footer> не обязан находиться в конце раздела.
- Типовые ошибки: использовать только как подвал сайта
<ul>/<ol>
- Значение: неупорядоченный и упорядоченный списки.
- Особенности:
Если существует набор однородных элементов, порядок которых не важен (пункты меню), то используем <ul>.
Если порядок элементов важен (топ популярных товаров, последовательные шаги в рецепте), то используем <ol>. - Типовые ошибки
Объединять в список неоднородные элементы.
Использовать что-то, кроме <li> в качестве дочерних элементов списка.
Неправильная разметка вложенных списков.
<p>
- Параграф в HTML – это структурный элемент, а не смысловой.
- Параграфы можно явно выделять с помощью тега <p>. Если не выделите явно, они всё равно будут существовать неявно.
- <p> – универсальный контейнер для группировки мелких фразовых элементов, отделения их друг от друга, особенно, когда нужна стилизация.
- Значение: параграф (как структурный элемент, а не как смысловой).
- Типовые ошибки: использовать внутри параграфов не фразовые элементы, например, списки.
<table>
- Значение: многомерные связанные данные (табличные данные).
- Особенности:
Простейший, двумерный, вид связанных данных – «параметр-значение». Его можно описать как таблицей, так и списком определений (тег <dl>).
Когда измерений больше (параметр-значение1-значение2-…), подходят только таблицы. Пример: тарифы сотового оператора, расписание поездов. - Типовые ошибки:
Использовать таблицы для сеток (так уже не делают).
Не использовать таблицы там, где они нужны.
<div>
- Значение: многомерные связанные данные (табличные данные).
- Особенности:
Простейший, двумерный, вид связанных данных – «параметр-значение». Его можно описать как таблицей, так и списком определений (тег <dl>).
Когда измерений больше (параметр-значение1-значение2-…), подходят только таблицы. Пример: тарифы сотового оператора, расписание поездов. - Типовые ошибки:
Использовать таблицы для сеток (так уже не делают).
Не использовать таблицы там, где они нужны.
Различия <article>, <section>, <div>
- Можете дать имя разделу и вынести этот раздел на другой сайт? <article>
- Можете дать имя разделу, но вынести на другой сайт не можете? <section>
- Не можете дать имя? Вменяемое имя, а не «новости и фотогалерея» или «правая колонка». <div>
Фразовые
<img>
- Значение: контентное изображение.
- Особенности: есть обязательные атрибуты (src). Хороший тон — задавать атрибут alt, который описывает содержание картинки.
- Типовые ошибки:
Использовать контентные изображения вместо фоновых.
Использовать фоновые изображения вместо контентных.
<a>
- Значение: ссылка.
- Особенности: если атрибута href нет, то это заглушка («здесь будет ссылка при других обстоятельствах»). Ссылка без href используется, чтобы не делать ссылку на саму себя.
- Типовые ошибки: использовать вместо ссылок другие элементы, например, кнопки.
<button>
- Значение: кнопка.
- Особенности:
Лучше явно указывать атрибут type. Его значение по умолчанию — submit, но часто нужно значение button.
Кнопка не обязательно должна находиться в пределах формы. Часто это просто интерактивный элемент, который «оживляется» с помощью JavaScript. Например, кнопка закрытия всплывающего окна. - Типовые ошибки: использовать вместо кнопок другие элементы, например, ссылки или спаны.
<b>
- Значение: текст, который выделяется для привлечения внимания, но без придания значимости.
- Типовые ошибки: слишком частое неуместное использование.
Подробнее про теги <b>, <i>, <em>, <strong>:
http://html5doctor.com/i-b-em-strong-element
<br>
- Значение: перенос строки.
- Типовые ошибки:
Слишком частое использование.
Использование вместо параграфов.
<span>
- Значение: универсальный фразовый элемент без собственного значения.
- Особенности: смысл этому элементу придаётся с помощью атрибута class.
Глобальные атрибуты
Атрибуты, которые могут быть у любого тега. – class – accesskey – contenteditable – contextmenu – dir – draggable – dropzone – hidden – id – lang – spellcheck – style – tabindex – title – translate – атрибуты для обработки событий – data-атрибуты
Атрибут class
- Описывает один или несколько классов (группа предметов или явлений, обладающих общими признаками), к которым принадлежит элемент.
- Помогает уточнить смысл и предназначение каждого тега.
- Множественные классы перечисляются через пробел.
- Наш лучший друг при разметке!
Как делать разметку
Что такое разметка
Когда все содержательные сущности документа размечены подходящими по смыслу тегами.
Декоративные (не содержательные) сущности в разметку входить не должны. Кроме тех случаев, когда без них никак.
Подходы к разметке
- Страница как документ
- Страница как интерфейс
- Дивянка
Страница как документ
- Задача — восстановить из макета первоначальную логическую структуру документа.
- Можно добавлять то, чего не видно на макете.
- В разметку попадает не всё, что есть на макете.
Алгоритм разметки
- Выделяем повторяющиеся на каждой странице блоки (шапка и подвал) и основное содержание.
- В этих блоках размечаем крупные смысловые разделы.
- В документе, и в каждом смысловом разделе выделяем заголовки (если их нет в макете, то позже прячем с помощью стилей).
- Размечаем оставшиеся мелкие элементы в каждом смысловом разделе методом исключения:
- Получилось найти самый подходящий тег – используем его.
- Нужно разметить потоковый контейнер – <div>.
- Нужно сгруппировать мелкие фразовые элементы – <p>.
- Нужно выделить сам мелкий фразовый элемент (слово или фразу) – <span>.
- При разметке добавляем всем тегам понятные имена классов. Теги без классов допустимы, если из контекста понятно их назначение.
- При дальнейшей вёрстке разметка может меняться, если это необходимо для стилизации. Чаще всего добавляются обёртки с помощью <div>.
Как называть классы?
- Имя класса должно отражать назначение элемента, а не рассказывать о его внешнем виде.
- Воздержитесь от транслита.
Типовые имена классов
https://github.com/yoksel/common-words
Пространства имён
- Упрощают именование классов.
- Разбивают код на относительно независимые блоки.
- Предотвращают нежелательное перемешивание стилей.
- Ускоряют разработку и упрощают поддержку.
Признаки хорошей разметки
- Простота
- Использовано минимально необходимое количество тегов.
- Имена классов рассказывают о назначении элементов.
- Есть чёткие границы смысловых блоков, легко понять к какому блоку принадлежит тег.
- Соблюдение стиля кодирования
- Ориентируемся на Кодгайды
- Отсутствие лишних элементов
- Декоративные элементы отсутствуют в разметке
- Работоспособность
- Доступность всего контента
Содержательный текст (вспомните шапку Седоны, где есть декоративный текст) должен быть в HTML-разметке, содержательные изображения должны быть размечены с помощью <img>. - Корректный сбор данных от пользователей
Формы работоспособны, у полей форм есть подходящие имена и значения. - Связность документов
Всё, что должно быть ссылками сделано ссылками.
- Доступность всего контента
Полезные ссылки
О разметке
- Спецификация HTML
- Спецификация HTML, перевод
- Зачем нужны заголовки
- Секции в футере
- Ссылки вокруг блоков
- W3C или WHATWG
- Обсуждения о правильном использовании тегов в комментариях
- Видеозапись доклада «Семантика или смерть»
- Слова, часто используемые в CSS-классах
- Как отличить контентное изображение от декоративного