# Проект "Террариум", часть 1: Введение в HTML

> Скетчноут от [Tomomi Imura](https://twitter.com/girlie_mac)
HTML, или язык гипертекстовой разметки, является основой каждого веб-сайта, который вы когда-либо посещали. Представьте себе HTML как скелет, который придает структуру веб-страницам – он определяет, где размещается контент, как он организован и что представляет собой каждый элемент. В то время как CSS позже "нарядит" ваш HTML с помощью цветов и макетов, а JavaScript оживит его с помощью интерактивности, HTML предоставляет основную структуру, которая делает все остальное возможным.
В этом уроке вы создадите HTML-структуру для интерфейса виртуального террариума. Этот практический проект поможет вам освоить основные концепции HTML, создавая что-то визуально привлекательное. Вы научитесь организовывать контент с помощью семантических элементов, работать с изображениями и создавать основу для интерактивного веб-приложения.
К концу урока у вас будет рабочая HTML-страница, отображающая изображения растений в организованных колонках, готовая к стилизации в следующем уроке. Не переживайте, если сначала она будет выглядеть просто – именно так должен выглядеть HTML до того, как CSS добавит визуальный блеск.
## Предварительный тест
[Предварительный тест](https://ff-quizzes.netlify.app/web/quiz/15)
> 📺 **Смотрите и учитесь**: Ознакомьтесь с полезным видеообзором
>
> [](https://www.youtube.com/watch?v=1TvxJKBzhyQ)
## Настройка вашего проекта
Прежде чем мы начнем писать HTML-код, давайте настроим рабочее пространство для вашего проекта террариума. Создание организованной структуры файлов с самого начала – это важная привычка, которая будет полезна вам на протяжении всего пути веб-разработки.
### Задание: Создайте структуру проекта
Вы создадите отдельную папку для проекта террариума и добавите ваш первый HTML-файл. Вот два подхода, которые вы можете использовать:
**Вариант 1: Использование Visual Studio Code**
1. Откройте Visual Studio Code
2. Нажмите "File" → "Open Folder" или используйте `Ctrl+K, Ctrl+O` (Windows/Linux) или `Cmd+K, Cmd+O` (Mac)
3. Создайте новую папку с названием `terrarium` и выберите её
4. В панели Explorer нажмите на значок "New File"
5. Назовите ваш файл `index.html`

**Вариант 2: Использование команд терминала**
```bash
mkdir terrarium
cd terrarium
touch index.html
code index.html
```
**Что делают эти команды:**
- **Создают** новую директорию с названием `terrarium` для вашего проекта
- **Переходят** в директорию terrarium
- **Создают** пустой файл `index.html`
- **Открывают** файл в Visual Studio Code для редактирования
> 💡 **Полезный совет**: Имя файла `index.html` имеет особое значение в веб-разработке. Когда кто-то посещает веб-сайт, браузеры автоматически ищут файл `index.html` как страницу по умолчанию для отображения. Это означает, что URL, например, `https://mysite.com/projects/`, автоматически откроет файл `index.html` из папки `projects`, без необходимости указывать имя файла в URL.
## Понимание структуры HTML-документа
Каждый HTML-документ следует определенной структуре, которую браузеры должны понимать и правильно отображать. Представьте эту структуру как официальное письмо – оно имеет обязательные элементы в определенном порядке, которые помогают получателю (в данном случае браузеру) правильно обработать содержимое.
Давайте начнем с добавления необходимой основы, которая требуется каждому HTML-документу.
### Декларация DOCTYPE и корневой элемент
Первые две строки любого HTML-файла служат "введением" документа для браузера:
```html
```
**Что делает этот код:**
- **Объявляет** тип документа как HTML5 с помощью ``
- **Создает** корневой элемент ``, который будет содержать весь контент страницы
- **Устанавливает** современные веб-стандарты для правильного отображения браузером
- **Обеспечивает** единообразное отображение в разных браузерах и на разных устройствах
> 💡 **Совет для VS Code**: Наведите курсор на любой HTML-тег в VS Code, чтобы увидеть полезную информацию из MDN Web Docs, включая примеры использования и совместимость с браузерами.
> 📚 **Узнайте больше**: Декларация DOCTYPE предотвращает переход браузеров в "режим совместимости", который использовался для поддержки очень старых веб-сайтов. Современная веб-разработка использует простую декларацию `` для обеспечения [отображения в соответствии со стандартами](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).
## Добавление важной метаинформации документа
Секция `
` HTML-документа содержит важную информацию, которая нужна браузерам и поисковым системам, но которую посетители не видят непосредственно на странице. Это своего рода "закулисная" информация, которая помогает вашей веб-странице работать правильно и отображаться корректно на разных устройствах и платформах.
Эти метаданные сообщают браузерам, как отображать вашу страницу, какую кодировку символов использовать и как обрабатывать разные размеры экрана – все это важно для создания профессиональных и доступных веб-страниц.
### Задание: Добавьте секцию заголовка документа
Вставьте эту секцию `` между открывающим и закрывающим тегами ``:
```html
Welcome to my Virtual Terrarium
```
**Разбор того, что делает каждый элемент:**
- **Устанавливает** заголовок страницы, который отображается на вкладках браузера и в результатах поиска
- **Определяет** кодировку символов UTF-8 для правильного отображения текста по всему миру
- **Обеспечивает** совместимость с современными версиями Internet Explorer
- **Настраивает** адаптивный дизайн, устанавливая ширину области просмотра в соответствии с шириной устройства
- **Контролирует** начальный уровень масштабирования для отображения контента в естественном размере
> 🤔 **Подумайте об этом**: Что произойдет, если вы установите мета-тег области просмотра, например, так: ``? Это заставит страницу всегда быть шириной 600 пикселей, нарушая адаптивный дизайн! Узнайте больше о [правильной настройке области просмотра](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag).
## Создание тела документа
Элемент `` содержит весь видимый контент вашей веб-страницы – все, что пользователи увидят и с чем будут взаимодействовать. В то время как секция `` предоставила инструкции для браузера, секция `` содержит фактический контент: текст, изображения, кнопки и другие элементы, которые создают пользовательский интерфейс.
Давайте добавим структуру тела и разберемся, как HTML-теги работают вместе, чтобы создать осмысленный контент.
### Понимание структуры HTML-тегов
HTML использует парные теги для определения элементов. Большинство тегов имеют открывающий тег, например `
`, и закрывающий тег, например `
`, с содержимым между ними: `
Привет, мир!
`. Это создает элемент абзаца, содержащий текст "Привет, мир!".
### Задание: Добавьте элемент Body
Обновите ваш HTML-файл, чтобы включить элемент ``:
```html
Welcome to my Virtual Terrarium
```
**Что предоставляет эта полная структура:**
- **Устанавливает** базовую структуру HTML5-документа
- **Включает** важные метаданные для правильного отображения браузером
- **Создает** пустое тело, готовое для вашего видимого контента
- **Следует** современным лучшим практикам веб-разработки
Теперь вы готовы добавить видимые элементы вашего террариума. Мы будем использовать элементы `
` как контейнеры для организации различных секций контента и элементы `` для отображения изображений растений.
### Работа с изображениями и контейнерами макета
Изображения занимают особое место в HTML, так как они используют "самозакрывающиеся" теги. В отличие от элементов, таких как ``, которые обрамляют контент, тег `` содержит всю необходимую информацию внутри самого тега, используя атрибуты, такие как `src` для пути к файлу изображения и `alt` для доступности.
Прежде чем добавлять изображения в ваш HTML, вам нужно правильно организовать файлы проекта, создав папку для изображений и добавив графику растений.
**Сначала настройте ваши изображения:**
1. Создайте папку с названием `images` внутри папки вашего проекта террариума
2. Скачайте изображения растений из [папки с решениями](../../../../3-terrarium/solution/images) (всего 14 изображений растений)
3. Скопируйте все изображения растений в вашу новую папку `images`
### Задание: Создайте макет отображения растений
Теперь добавьте изображения растений, организованные в два столбца, между вашими тегами ``:
```html
```
**Пошагово, что происходит в этом коде:**
- **Создается** основной контейнер страницы с `id="page"`, чтобы содержать весь контент
- **Определяются** два контейнера для колонок: `left-container` и `right-container`
- **Организуются** 7 растений в левую колонку и 7 растений в правую колонку
- **Обрамляется** каждое изображение растения в div с классом `plant-holder` для индивидуального позиционирования
- **Применяются** единообразные имена классов для стилизации с помощью CSS в следующем уроке
- **Назначаются** уникальные идентификаторы каждому изображению растения для последующего взаимодействия с JavaScript
- **Указываются** правильные пути к файлам в папке изображений
> 🤔 **Подумайте об этом**: Обратите внимание, что у всех изображений сейчас одинаковый текст alt "plant". Это не идеально с точки зрения доступности. Пользователи экранных читалок будут слышать "растение" 14 раз подряд, не понимая, какое именно растение изображено. Можете ли вы придумать более точный и описательный текст alt для каждого изображения?
> 📝 **Типы HTML-элементов**: Элементы `
` являются "блочными" и занимают всю ширину, в то время как элементы `` являются "встроенными" и занимают только необходимую ширину. Как вы думаете, что произойдет, если вы замените все эти теги `
` на теги ``?
С добавлением этой разметки растения появятся на экране, хотя пока они не будут выглядеть красиво – для этого нужен CSS, который мы изучим в следующем уроке! На данный момент у вас есть надежная HTML-основа, которая правильно организует ваш контент и следует лучшим практикам доступности.
## Использование семантического HTML для доступности
Семантический HTML означает выбор HTML-элементов на основе их значения и назначения, а не только их внешнего вида. Используя семантическую разметку, вы передаете структуру и смысл вашего контента браузерам, поисковым системам и вспомогательным технологиям, таким как экранные читалки.
Этот подход делает ваши веб-сайты более доступными для пользователей с ограниченными возможностями и помогает поисковым системам лучше понимать ваш контент. Это фундаментальный принцип современной веб-разработки, который создает лучшие впечатления для всех.
### Добавление семантического заголовка страницы
Давайте добавим правильный заголовок на вашу страницу террариума. Вставьте эту строку сразу после открывающего тега ``:
```html
My Terrarium
```
**Почему семантическая разметка важна:**
- **Помогает** экранным читалкам навигировать и понимать структуру страницы
- **Улучшает** поисковую оптимизацию (SEO), уточняя иерархию контента
- **Повышает** доступность для пользователей с нарушениями зрения или когнитивными особенностями
- **Создает** лучшие пользовательские впечатления на всех устройствах и платформах
- **Следует** веб-стандартам и лучшим практикам профессиональной разработки
**Примеры семантического и несемантического выбора:**
| Назначение | ✅ Семантический выбор | ❌ Несемантический выбор |
|------------|------------------------|--------------------------|
| Основной заголовок | `
` |
> 🎥 **Посмотрите в действии**: Смотрите [как экранные читалки взаимодействуют с веб-страницами](https://www.youtube.com/watch?v=OUDV1gqs9GA), чтобы понять, почему семантическая разметка важна для доступности. Обратите внимание, как правильная структура HTML помогает пользователям эффективно навигировать.
## Создание контейнера террариума
Теперь давайте добавим HTML-структуру для самого террариума – стеклянного контейнера, где будут размещены растения. Этот раздел демонстрирует важную концепцию: HTML предоставляет структуру, но без стилизации CSS эти элементы пока не будут видны.
Разметка террариума использует описательные имена классов, которые сделают стилизацию CSS интуитивной и удобной для поддержки в следующем уроке.
### Задание: Добавьте структуру террариума
Вставьте эту разметку выше последнего тега `
```
**Понимание структуры террариума:**
- **Создает** основной контейнер террариума с уникальным идентификатором для стилизации
- **Определяет** отдельные элементы для каждого визуального компонента (верх, стены, земля, дно)
- **Включает** вложенные элементы для эффектов отражения стекла (глянцевые элементы)
- **Использует** описательные имена классов, которые четко указывают назначение каждого элемента
- **Готовит** структуру для стилизации CSS, которая создаст внешний вид стеклянного террариума
> 🤔 **Обратите внимание**: Несмотря на то, что вы добавили эту разметку, вы пока не видите ничего нового на странице! Это прекрасно иллюстрирует, как HTML предоставляет структуру, а CSS – внешний вид. Эти элементы `
` существуют, но пока не имеют визуальной стилизации – это будет сделано в следующем уроке!
---
## Задание от GitHub Copilot Agent
Используйте режим Agent, чтобы выполнить следующее задание:
**Описание:** Создайте семантическую HTML-структуру для раздела руководства по уходу за растениями, который можно добавить в проект террариума.
**Подсказка:** Создайте семантический HTML-раздел, включающий главный заголовок "Руководство по уходу за растениями", три подраздела с заголовками "Полив", "Требования к освещению" и "Уход за почвой", каждый из которых содержит абзац информации о уходе за растениями. Используйте правильные семантические HTML-теги, такие как ``, `
`, `
` и `
`, чтобы правильно структурировать контент.
Узнайте больше о [режиме агента](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) здесь.
## Исследуйте вызов истории HTML
**Изучение эволюции веба**
HTML значительно эволюционировал с тех пор, как Тим Бернерс-Ли создал первый веб-браузер в CERN в 1990 году. Некоторые старые теги, такие как `