# Проект "Террариум", часть 1: Введение в HTML
```mermaid
journey
title Your HTML Learning Journey
section Foundation
Create HTML file: 3: Student
Add DOCTYPE: 4: Student
Structure document: 5: Student
section Content
Add metadata: 4: Student
Include images: 5: Student
Organize layout: 5: Student
section Semantics
Use proper tags: 4: Student
Enhance accessibility: 5: Student
Build terrarium: 5: Student
```

> Скетчноут от [Tomomi Imura](https://twitter.com/girlie_mac)
HTML, или язык гипертекстовой разметки, является основой каждого веб-сайта, который вы когда-либо посещали. Представьте HTML как скелет, который придает структуру веб-страницам – он определяет, где размещается контент, как он организован и что представляет собой каждый элемент. В то время как CSS позже "оденет" ваш HTML в цвета и макеты, а JavaScript оживит его с помощью интерактивности, HTML обеспечивает основную структуру, которая делает все остальное возможным.
В этом уроке вы создадите HTML-структуру для интерфейса виртуального террариума. Этот практический проект научит вас основным концепциям HTML, одновременно создавая что-то визуально привлекательное. Вы узнаете, как организовывать контент с помощью семантических элементов, работать с изображениями и создавать основу для интерактивного веб-приложения.
К концу урока у вас будет рабочая HTML-страница, отображающая изображения растений в организованных колонках, готовая к стилизации в следующем уроке. Не переживайте, если сначала она будет выглядеть просто – именно так должен выглядеть HTML до того, как CSS добавит визуальный блеск.
```mermaid
mindmap
root((HTML Fundamentals))
Structure
DOCTYPE Declaration
HTML Element
Head Section
Body Content
Elements
Tags & Attributes
Self-closing Tags
Nested Elements
Block vs Inline
Content
Text Elements
Images
Containers (div)
Lists
Semantics
Meaningful Tags
Accessibility
Screen Readers
SEO Benefits
Best Practices
Proper Nesting
Valid Markup
Descriptive Alt Text
Organized Structure
```
## Тест перед лекцией
[Тест перед лекцией](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` для вашего проекта
- **Переходят** в директорию террариума
- **Создают** пустой файл `index.html`
- **Открывают** файл в Visual Studio Code для редактирования
> 💡 **Полезный совет**: Имя файла `index.html` имеет особое значение в веб-разработке. Когда кто-то посещает веб-сайт, браузеры автоматически ищут `index.html` как страницу по умолчанию для отображения. Это означает, что URL, например, `https://mysite.com/projects/`, автоматически покажет файл `index.html` из папки `projects`, без необходимости указывать имя файла в URL.
## Понимание структуры HTML-документа
Каждый HTML-документ следует определенной структуре, которую браузеры должны понимать и правильно отображать. Представьте эту структуру как официальное письмо – оно имеет обязательные элементы в определенном порядке, которые помогают получателю (в данном случае браузеру) правильно обработать содержимое.
```mermaid
flowchart TD
A[""] --> B[""]
B --> C["
"]
C --> D[""]
C --> E[""]
C --> F[""]
B --> G[""]
G --> H["
Heading"]
G --> I["
Containers"]
G --> J[" Images"]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style G fill:#e8f5e8
```
Давайте начнем с добавления необходимой основы, которая требуется каждому 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-документ нуждается в декларации DOCTYPE
- ✅ Что содержит корневой элемент ``
- ✅ Как эта структура помогает браузерам правильно отображать страницы
**Краткий тест для самопроверки**: Можете ли вы объяснить своими словами, что означает "отображение в соответствии со стандартами"?
## Добавление важной метаинформации документа
Секция `` 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 использует парные теги для определения элементов. Большинство тегов имеют открывающий тег, например `
`, и закрывающий тег, например `
`, с содержимым между ними: `
Привет, мир!
`. Это создает элемент абзаца, содержащий текст "Привет, мир!".
### Задание: Добавьте элемент ``
Обновите ваш 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". Это не идеально для доступности. Пользователи экранных читалок будут слышать "plant" 14 раз подряд, не понимая, какое конкретное растение показывает каждое изображение. Можете ли вы придумать более точный и описательный текст alt для каждого изображения?
> 📝 **Типы HTML-элементов**: Элементы `
` являются "блочными" и занимают всю ширину, тогда как элементы `` являются "встроенными" и занимают только необходимую ширину. Как вы думаете, что произойдет, если заменить все эти теги `
` на теги ``?
### 🔄 **Педагогическая проверка**
**Понимание структуры**: Найдите минутку, чтобы пересмотреть вашу HTML-структуру:
- ✅ Можете ли вы определить основные контейнеры в вашем макете?
- ✅ Понимаете ли вы, почему у каждого изображения есть уникальный идентификатор?
- ✅ Как бы вы описали назначение div `plant-holder`?
**Визуальная проверка**: Откройте ваш HTML-файл в браузере. Вы должны увидеть:
- Базовый список изображений растений
- Изображения, организованные в два столбца
- Простой, не стилизованный макет
**Помните**: Этот простой вид – именно то, как должен выглядеть HTML до стилизации с помощью CSS!
С добавленной разметкой растения появятся на экране, хотя пока они не будут выглядеть изящно – для этого предназначен CSS в следующем уроке! На данный момент у вас есть надежная HTML-основа, которая правильно организует ваш контент и следует лучшим практикам доступности.
## Использование семантического HTML для доступности
Семантический HTML означает выбор HTML-элементов на основе их значения и назначения, а не только их внешнего вида. Используя семантическую разметку, вы передаете структуру и смысл вашего контента браузерам, поисковым системам и вспомогательным технологиям, таким как экранные читалки.
```mermaid
flowchart TD
A[Need to add content?] --> B{What type?}
B -->|Main heading| C["