# Проєкт "Тераріум" Частина 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 ``` ![Вступ до HTML](../../../../translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.uk.png) > Скетчноут від [Tomomi Imura](https://twitter.com/girlie_mac) HTML, або HyperText Markup Language, є основою кожного вебсайту, який ви коли-небудь відвідували. Уявіть 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) > 📺 **Дивіться та навчайтеся**: Перегляньте це корисне відео-огляд > > [![Відео основи HTML](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](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` ![Explorer VS Code, що показує створення нового файлу](../../../../translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.uk.png) **Варіант 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-документ слідує певній структурі, яку браузери повинні розуміти та правильно відображати. Уявіть цю структуру як формальний лист – він має обов'язкові елементи в певному порядку, які допомагають отримувачу (у цьому випадку браузеру) правильно обробляти контент. ```mermaid flowchart TD A[""] --> B[""] B --> C[""] C --> D[""] C --> E["<meta charset>"] C --> F["<meta viewport>"] B --> G["<body>"] G --> H["<h1> Heading"] G --> I["<div> Containers"] G --> J["<img> Images"] style A fill:#e1f5fe style B fill:#f3e5f5 style C fill:#fff3e0 style G fill:#e8f5e8 ``` Давайте почнемо з додавання основи, яка потрібна кожному HTML-документу. ### Декларація DOCTYPE та кореневий елемент Перші два рядки будь-якого HTML-файлу служать "вступом" документа для браузера: ```html <!DOCTYPE html> <html></html> ``` **Розуміння того, що робить цей код:** - **Оголошує** тип документа як HTML5 за допомогою `<!DOCTYPE html>` - **Створює** кореневий елемент `<html>`, який міститиме весь контент сторінки - **Встановлює** сучасні вебстандарти для правильного відображення браузером - **Забезпечує** узгоджене відображення на різних браузерах і пристроях > 💡 **Порада VS Code**: Наведіть курсор на будь-який HTML-тег у VS Code, щоб побачити корисну інформацію з MDN Web Docs, включаючи приклади використання та деталі сумісності браузерів. > 📚 **Дізнайтеся більше**: Декларація DOCTYPE запобігає переходу браузерів у "режим помилок", який використовувався для підтримки дуже старих вебсайтів. Сучасна веброзробка використовує просту декларацію `<!DOCTYPE html>` для забезпечення [відображення відповідно до стандартів](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode). ### 🔄 **Педагогічна перевірка** **Зупиніться та подумайте**: Перед тим як продовжити, переконайтеся, що ви розумієте: - ✅ Чому кожен HTML-документ потребує декларації DOCTYPE - ✅ Що містить кореневий елемент `<html>` - ✅ Як ця структура допомагає браузерам правильно відображати сторінки **Швидкий самотест**: Чи можете ви пояснити своїми словами, що означає "відображення відповідно до стандартів"? ## Додавання основних метаданих документа Секція `<head>` HTML-документа містить важливу інформацію, яку потребують браузери та пошукові системи, але яку відвідувачі не бачать безпосередньо на сторінці. Уявіть це як "закулісну" інформацію, яка допомагає вашій вебсторінці працювати правильно та виглядати коректно на різних пристроях і платформах. Ці метадані повідомляють браузерам, як відображати вашу сторінку, яке кодування символів використовувати і як обробляти різні розміри екранів – усе це необхідно для створення професійних, доступних вебсторінок. ### Завдання: Додайте секцію документа Head Вставте цю секцію `<head>` між вашими відкриваючим і закриваючим тегами `<html>`: ```html <head> <title>Welcome to my Virtual Terrarium ``` **Розбір того, що робить кожен елемент:** - **Встановлює** заголовок сторінки, який з'являється на вкладках браузера та в результатах пошуку - **Вказує** кодування символів UTF-8 для правильного відображення тексту у всьому світі - **Забезпечує** сумісність із сучасними версіями Internet Explorer - **Налаштовує** адаптивний дизайн, встановлюючи viewport відповідно до ширини пристрою - **Контролює** початковий рівень масштабування для відображення контенту в природному розмірі > 🤔 **Подумайте про це**: Що станеться, якщо ви встановите мета-тег viewport, наприклад, так: ``? Це змусить сторінку завжди бути шириною 600 пікселів, порушуючи адаптивний дизайн! Дізнайтеся більше про [правильну конфігурацію viewport](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 вам потрібно правильно організувати файли вашого проєкту, створивши папку images і додавши графіку рослин. **Спочатку налаштуйте ваші зображення:** 1. Створіть папку під назвою `images` всередині вашої папки проєкту тераріуму 2. Завантажте зображення рослин із [папки рішення](../../../../3-terrarium/solution/images) (всього 14 зображень рослин) 3. Скопіюйте всі зображення рослин у вашу нову папку `images` ### Завдання: Створіть макет відображення рослин Тепер додайте зображення рослин, організовані в дві колонки, між вашими тегами ``: ```html
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
``` **Крок за кроком, ось що відбувається в цьому коді:** - **Створює** головний контейнер сторінки з `id="page"` для утримання всього контенту - **Встановлює** два контейнера колонок: `left-container` і `right-container` - **Організовує** 7 рослин у лівій колонці та 7 рослин у правій колонці - **Обгортає** кожне зображення рослини в div `plant-holder` для індивідуального позиціонування - **Застосовує** узгоджені назви класів для стилізації CSS у наступному уроці - **Призначає** унікальні ID кожному зображенню рослини для взаємодії з JavaScript пізніше - **Включає** правильні шляхи до файлів, що вказують на папку images > 🤔 **Подумайте про це**: Зверніть увагу, що всі зображення наразі мають однаковий текст alt "plant". Це не ідеально для доступності. Користувачі екранних читачів чули б "plant" 14 разів, не знаючи, яку конкретну рослину показує кожне зображення. Чи можете ви придумати кращий, більш описовий текст alt для кожного зображення? > 📝 **Типи HTML-елементів**: Елементи `
` є "блоковими" і займають всю ширину, тоді як елементи `` є "вбудованими" і займають лише необхідну ширину. Як ви думаєте, що станеться, якщо ви зміните всі ці теги `
` на теги ``? ### 🔄 **Педагогічна перевірка** **Розуміння структури**: Зробіть паузу, щоб переглянути вашу HTML-структуру: - ✅ Чи можете ви визначити головні контейнери у вашому макеті? - ✅ Чи розумієте ви, чому кожне зображення має унікальний ID? - ✅ Як би ви описали призначення 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["

"] B -->|Subheading| D["

,

, etc."] B -->|Paragraph| E["

"] B -->|List| F["

    ,
      "] B -->|Navigation| G["