Структура веб-страницы создается с помощью языка верстки HTML (HyperText Markup Language, язык гипертекстовой разметки). В основе этого языка лежат теги в формате <tag></tag> или <tag>, которые указывают семантику содержимого внутри себя контента и содержат дополнительные атрибуты <tag key="value">
Каждый HTML-документ начинается с определения его типа, чтобы браузер мог понимать, как его обрабатывать:
<!DOCTYPE html>
В старой версии HTML до его общего принятия тип документа определялся так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
Далее идет тег <html></html>. В нем указываются теги <head></head> и <body></body>. Тег head содержит служебную информацию о странице, такую как:
<link>, например, CSS-файлы со стилями или скрипты на JavaScript<title></title><!DOCTYPE html>
<html>
<head>
<!-- Заголовок -->
<title>Web программирование</title>
<!-- Подключение стилей -->
<link href="styles.css" rel="stylesheet">
<!-- ^ ссылка ^ типа файла (то есть таблица стилей) -->
<meta charset="utf-8">
<!-- ^ кодировка -->
<meta name="keywords" content="web, веб, программирование">
<!-- ^ ключевые слова -->
<meta name="description" content="краткое описание">
<!-- ^ описание -->
</head>
<body>
</body>
</html>
В общем случае теги в head не отображаются непосредственно на странице, но влияют на ее обработку в браузере и поиск в поисковых движках
Далее идет тег <body></body>. Он представляет тело страницы и обычно имеет такую структуру:
<body>
<header></header>
<main></main>
<footer></footer>
</body>
Тег main выделяет основное содержание страницы. На странице должен быть только один видимый main. Дополнительные блоки main возможны только если они скрыты (например, с помощью атрибута hidden) или не участвуют в рендеринге
Тег main окружается тегами header и footer. Первый предназначенный для вводной части страницы (так называемой шапки), где представлены логотип компании и главные ссылки на другие страницы (“Каталог”, “О нас” и прочее)
Тег footer предназначен для заключительной части (так называемого подвала), где представлены дополнительные ссылки (например, на юридические документы) и контактная информация
Примерная HTML-страница выглядит так:
<!DOCTYPE html>
<html>
<head>
<title>Рога и копыта</title>
</head>
<body>
<header>Компания "Рога и копыта"</header>
<main></main>
<footer>+7 (777) 77-77-77</footer>
</body>
</html>
Помимо них также существуют эти теги, обозначающие другие блоки страницы:
<section></section> - секция текста, то есть крупный фрагмент текста, схожий по смыслу, например, главы одной книги или “Каталог”. Если текст можно осмысленно назвать одним словосочетанием, которое не определяет его положение на странице или не является перечислением, то ему явно подходит тег section<nav></nav> (от navigation) - навигация страницы, то есть группа ссылок на другие страницы или на раздел в текущей<article></article> - статья, цельный и законченный фрагмент текста. В отличие от секции содержимое внутри article можно скопировать из этой страницы и вставить в другое место без потери смысла и контекста<h1></h1>, <h2></h2>, <h3></h3>, <h4></h4>, <h5></h5> и <h6></h6> обозначают заголовки (от heading) разных уровней. Заголовок первого уровня самый важный, и лучше всего, чтобы он был один на странице (обычно в шапке), тогда как шестого - очень не важный. На практике используются только h1, h2 и h3<p></p> обозначает параграф (от paragraph) или абзац. По умолчанию параграфы отделяются отступами сверху и снизу от другого контента. Текст может существовать и снаружи тегов p, но он позволяет явно выделять параграфы<ul></ul> обозначает неупорядоченный список (от unordered list), а <ol></ol> обозначает упорядоченный список (от ordered list). Внутри них элементы списка находятся в теге <li></li> (от list item)
Тег ol может иметь дополнительные атрибуты: reversed для смены направления нумерации, start="67" для установки стартового числа и type="1" для указания типа нумерации (1 для чисел, a и A для латинских букв, i и I для римских чисел)
Также списки можно вкладывать внутри других списков
Другой список <dl></dl> (от description list) позволяет перечислять термины в тегах <dt></dt> (от description term) и их определения в <dd></dd> (от description definition). Обычно определения переносятся на новую строку, и браузер добавляет к ним отступ слева
<pre></pre> обозначает предварительно отформатированный текст (preformatted text). На странице он отображается моноширинным шрифтом и с сохранением пробелов и переносов, что чаще всего используется для вставок с кодом
<code></code> обозначает вставку с кодом. На странице он отображается моноширинным шрифтом, но в отличии от pre в теге code пробелы схлопываются, а переносы игнорируются, поэтому теги используют вместе: <pre><code></code></pre>
Чтобы экранировать знаки меньше и больше во вставке с кодом, используются мнемоники - наборы символов, позволяющие в браузере отображать специальные символы, использующиеся в HTML. Так “<” - это <, “>” - это >, “&” - это &, “€” - это €, “©” - это © и так далее
В тег <q></q> (от quote) вкладывается цитата из стороннего источника. В атрибут cite указывается адрес цитаты: <q cite="https://ru.wikiquote.org/wiki/%D0%A3%D0%B8%D0%BD%D1%81%D1%82%D0%BE%D0%BD_%D0%A7%D0%B5%D1%80%D1%87%D0%B8%D0%BB%D0%BB%D1%8C">Сильный, молчаливый мужчина слишком часто лишь потому молчалив, что ему нечего сказать.</q>. Дополнительно в теге <cite> указывается автор: <cite>Уинстон Черчилль</cite>
В тег <blockquote></blockquote> тоже указывается цитата, но вместо текста как в теге q она представляет из себя отдельный блок
Тег <br> (от line BReak) обозначает перенос строки. По умолчанию новая строка в HTML-файле не рендерится в браузере, поэтому переносы создаются либо тегом <br>, либо тегами, которые автоматически переносят последующий контент на новую строку
Однако для разделения тексты на абзацы лучше использовать не его, а отдельные теги <p>
Теги <sub></sub> и <sup></sup> создают нижние и верхние индексы соответственно, например, в формулах: H<sub>2</sub>O - H2O
Тег <time></time> содержит в себе текст, означающий дату и время, но его атрибутом могут быть указаны дата и время в формате ISO 8601 для машинной обработки: <time datetime="2020-11-15T09:54">09:54 утра</time>
Теги форматирования текста:
<i></i> (от italic) и <em></em> (от emphasis), тег em используется для логического акцента, а i для визуального выделения без смыслового акцента (например, термины)<b></b> (от bold) и <strong></strong>, тегом strong выделяется семантически супер важный и серьезный текст<del></del> (от delete), используется для удаленного текста<ins></ins> (от insert) и <u></u> (от underline), ins используется преимущественно для выделения добавленного текстаНаконец, если подходящего тега с нужной семантикой нет, то используют два общих тега: <div></div> и <span></span>
Тег div используется для блока, а span - для текстовой фразы или ее фрагмента. Теги div и span используется только в тех случаях, в который не нашлось других тегов с подходящей семантикой и смыслом
Чтобы придать стиля веб-странице, используют таблицы стилей, написанные на языке CSS (Cascading Style Sheets, каскадные таблицы стилей). Обычно они пишутся в отдельном файле, подключаемом с помощью тега <link>, но также и могут находиться в исходной HTML-странице в теге <style></style>
Правила стилей состоят из селектора, который определяет теги, к которым применяются стили, и блок объявлений, состоящих из свойства и значения:
селектор {
свойство1: значение1;
свойство2: значение2;
свойство3: значение3;
/* ... */
}
Так селектором могут быть:
*, указывающий на все элементыp, div, h1<p id="my-paragraph"></p>, в таком случае селектор указывается #my-paragraph<p class="my-sections"></p>, в таком случае селектор указывается .my-sectionsДалее к ним применяются могут применяться особые условия:
div:first-child - первый ребенок внутри divdiv:last-child - последний ребенок внутри divdiv:nth-child(i) - i-ый ребенок внутри divp:hover указывает на параграф, на который наведен курсорp::first-letter применяются на первую букву параграфакомбинации селекторов:
div, p - все параграфы p и все блоки divdiv p - все параграфы p внутри блока divdiv > p - все параграфы p, которые являются непосредственными детьми блока divdiv + p - параграф p, которые стоит непосредственно после блока divdiv ~ p - все параграфы p, которые стоят после блока divdiv[foo="bar"] - блоки div с атрибутом foo="bar"CSS-стили могут выглядеть так:
/* для всех элементов цвет текста оранжевый */
* {
color: orange;
}
/* для всех блоков div фоновый цвет серый */
div {
background-color: gray;
}
/*
для параграфов с классами `mytext` и `quote`
цвет текста красный
*/
p.mytext.quote {
color: red;
}
/*
для элементов с идентификатором example
цвет текста зеленый
*/
#example {
color: green;
}
Приоритет правил определяется специфичностью селектора, а при равной специфичности - последним объявлением в коде.
Свойств и значений для них в CSS есть огромное множество. Хорошей практикой является использование классов для применения стилей к элементам, а не идентификаторов
По умолчанию, каждый браузер применяет свои собственные стили для элементов (например, использует свой шрифт), поэтому контент может по-разному отображаться в разных браузерах. В таком случае имеет смысл применять сброс CSS - специальный набор правил, которые упраздняют их. Один из самых популярных от Эрика Мейера выглядит так:
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
Также используется сброс стилей normilize.css