Урок 9 из 49 · Месяц 1. HTML5 и CSS3
Тег script и возможности JavaScript. Итоговая работа месяца
Содержание урока
- Тег script
- Зачем нужен JavaScript
- Встроенный скрипт
- Внешний файл — основной способ
- Где ставить script и что такое defer
- Возможности JavaScript
- Считать и запоминать
- Общаться с пользователем
- Менять страницу
- Реагировать на события
- И многое другое
- Итоговая контрольная работа месяца
- Повторение ключевых тем
- Чек-лист: что нужно уметь
- Пример контрольной работы
- Советы по подготовке
- Практика
- Итоги
Этот урок завершает первый месяц. Сначала мы заглянем в следующую большую тему: узнаем, как тег <script> подключает JavaScript к странице и что вообще умеет этот язык. Затем повторим всё, что прошли по HTML и CSS, пройдёмся по чек-листу навыков и разберём пример итоговой контрольной работы, чтобы вы пришли на неё уверенно.
Тег script
Зачем нужен JavaScript
Вспомним три слоя сайта: HTML — структура, CSS — оформление, JavaScript — поведение. HTML и CSS описывают, как страница выглядит, но не умеют реагировать на действия человека сложнее, чем :hover. JavaScript — настоящий язык программирования: он умеет считать, принимать решения, менять страницу «на лету» и общаться с сервером.
Связь с HTML у него та же, что у CSS со стилями, — через специальный тег. Для JavaScript это <script>.
Встроенный скрипт
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Первый скрипт</title>
</head>
<body>
<h1>Привет!</h1>
<script>
console.log("Скрипт работает!");
</script>
</body>
</html>
console.log(...) выводит сообщение в консоль браузера — служебную панель для разработчика. Откройте DevTools (F12) → вкладка Console — там будет строка «Скрипт работает!». Консоль — ваш главный помощник: туда же браузер пишет ошибки в коде.
Внешний файл — основной способ
Как и стили, скрипты удобнее держать в отдельном файле:
my-site/
├── index.html
├── css/
│ └── style.css
└── js/
└── main.js
<head>
<meta charset="UTF-8">
<title>Внешний скрипт</title>
<link rel="stylesheet" href="css/style.css">
<script src="js/main.js" defer></script>
</head>
// js/main.js
console.log("Подключён внешний файл main.js");
src— путь к файлу скрипта;//— однострочный комментарий в JavaScript;- у тега
<script>всегда есть закрывающий тег, даже если внутри пусто.<script src="..." />не работает.
Где ставить script и что такое defer
Браузер читает HTML сверху вниз. Встретив обычный <script>, он останавливается, скачивает и выполняет скрипт, и только потом продолжает строить страницу. Из этого две проблемы:
- Страница показывается позже, пока грузится скрипт.
- Если скрипт в
<head>обращается к элементу из<body>, этого элемента ещё нет — будет ошибка.
Есть два решения:
<!-- Вариант 1: скрипт в самом конце body -->
<body>
<h1>Заголовок</h1>
<script src="js/main.js"></script>
</body>
<!-- Вариант 2 (современный): в head с атрибутом defer -->
<head>
<script src="js/main.js" defer></script>
</head>
| Атрибут | Как грузится | Когда выполняется |
|---|---|---|
| нет | Блокирует разбор страницы | Сразу, как только скачан |
defer |
Параллельно со страницей | После того, как весь HTML разобран, по порядку |
async |
Параллельно со страницей | Как только скачан, порядок не гарантирован |
type="module" |
Параллельно, как defer |
После разбора HTML; включает современные модули JS |
Возможности JavaScript
Подробно язык мы будем учить весь следующий месяц, а сейчас просто посмотрим, что он умеет. Не пугайтесь синтаксиса — сейчас важна идея.
Считать и запоминать
const price = 200;
const count = 3;
const total = price * count;
console.log("Итого:", total); // Итого: 600
const создаёт переменную — именованную «коробку» для значения (похоже на CSS-переменные, но гораздо мощнее).
Общаться с пользователем
alert("Добро пожаловать!"); // окно с сообщением
const name = prompt("Как вас зовут?"); // окно с полем ввода
console.log("Пользователя зовут", name);
alert и prompt — простейшие встроенные окна. В реальных сайтах ими почти не пользуются, но для первых экспериментов они удобны.
Менять страницу
JavaScript видит всю страницу как дерево объектов — DOM (Document Object Model). Он может найти любой элемент и изменить его текст, стили и классы:
<h1 class="title">Привет!</h1>
const title = document.querySelector(".title"); // найти элемент по CSS-селектору
title.textContent = "Привет от JavaScript!"; // поменять текст
title.style.color = "tomato"; // поменять стиль
document.querySelector принимает тот же селектор, что и CSS: .title, #logo, .menu a. Знания CSS-селекторов пригодятся прямо сейчас.
Реагировать на события
<button class="btn" id="theme-btn">Сменить тему</button>
.dark {
background-color: #1a202c;
color: #f7fafc;
}
const button = document.querySelector("#theme-btn");
button.addEventListener("click", () => {
document.body.classList.toggle("dark");
});
addEventListener("click", ...)— «когда по кнопке кликнут, выполни этот код»;classList.toggle("dark")— добавить классdarkуbody, если его нет, и убрать, если есть.
Обратите внимание на разделение ролей: CSS описывает, как выглядит тёмная тема (класс .dark), а JavaScript только переключает класс. Это правильный подход.
И многое другое
- Формы: проверять, правильно ли заполнены поля, до отправки.
- Запросы к серверу: загружать товары, погоду, курсы валют без перезагрузки страницы (
fetch). - Хранение данных в браузере: запоминать выбранную тему или корзину (
localStorage). - Анимации, слайдеры, модальные окна, вкладки.
- За пределами браузера: серверы (Node.js), мобильные и настольные приложения.
Всё это мы разберём в следующих месяцах — начнём с урока Git, Git Bash и первый проект. Основы JavaScript, а с событиями подробно познакомимся в уроке Введение в DOM.
Итоговая контрольная работа месяца
Повторение ключевых тем
| Урок | Что главное |
|---|---|
| Знакомство и подготовка | Файлы, расширения, VS Code, Live Server, DevTools |
| HTML5: основные теги | Скелет документа, текст, ссылки, списки, таблицы, семантика |
| CSS: подключение и свойства | <link>, селекторы, color, font, width, text-align, каскад и специфичность |
| Позиционирование и блочная модель | margin, padding, border, border-radius, box-sizing, px/%/em/rem, position |
| Flexbox и :hover | Оси, justify-content, align-items, gap, wrap, flex: 1, transition |
| Шрифты и картинки | Планирование, Google Fonts, @font-face, PNG/JPG/SVG |
| img и background-image | Контент или оформление, object-fit, background-size, градиенты |
| Переменные и медиазапросы | :root, var(), calc(), @media, установка Git |
Чек-лист: что нужно уметь
- Создать проект с правильной структурой папок и именами файлов.
- Написать скелет HTML-документа по памяти и объяснить каждую строку.
- Разметить страницу семантическими тегами:
header,nav,main,section,footer. - Правильно использовать заголовки, списки, ссылки (внешние, относительные, якоря) и картинки с
alt. - Подключить внешний CSS и шрифт, задать базовые стили для
body. - Объяснить, какое правило победит, по специфичности и порядку.
- Задать отступы, рамки, скругления; понимать
box-sizing: border-box. - Выбрать подходящие единицы:
remдля шрифтов,%для ширины,pxдля рамок. - Поставить бейдж в угол карточки через
relative+absolute, сделать липкую шапку. - Построить шапку и ряд карточек на Flexbox, отцентрировать блок.
- Сделать плавный
:hoverсtransition. - Выбрать между
<img>иbackground-imageи объяснить выбор. - Вынести цвета и отступы в CSS-переменные и написать простой медиазапрос.
- Подключить скрипт с
deferи увидеть сообщение в консоли.
Пример контрольной работы
Формат, сроки и критерии оценки итоговой работы ментор объявит отдельно. Ниже — пример, на котором удобно потренироваться.
Задание: страница-визитка кофейни.
- Структура. Создайте проект
coffee/с папкамиcss,images,js. Вindex.html— правильный скелет сlang="ru",charset,viewportиtitle. - Шапка.
headerс логотипом (SVG или текст) слева и меню из трёх якорных ссылок справа. Шапка липкая, ссылки меню плавно меняют цвет при наведении. - Первый экран. Секция на всю высоту экрана с фоновой фотографией, затемнением градиентом и центрированными заголовком
h1, текстом и кнопкой. - Меню кофейни. Секция с заголовком
h2и шестью карточками напитков на Flexbox с переносом. В каждой: фото через<img>сaltиobject-fit: cover, название, цена. У двух карточек — бейдж «Хит» в углу. При наведении карточка приподнимается. - Контакты. Таблица часов работы (
thead,tbody) и адрес со ссылкамиtel:иmailto:. - Подвал.
footerс копирайтом через©. - Стили. Подключите шрифт из Google Fonts. Все цвета, скругления и основные отступы — в переменных
:root. Для всех элементов —box-sizing: border-box. Шрифты — вrem. - Медиазапрос. При ширине ≤ 768px меню в шапке прячется или переносится, заголовок первого экрана уменьшается.
- Скрипт. Подключите
js/main.jsсdefer, выведите в консоль приветствие и сделайте кнопку переключения тёмной темы (по примеру из урока).
Каркас, с которого можно начать:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Кофейня «Утро»</title>
<link rel="stylesheet" href="css/style.css">
<script src="js/main.js" defer></script>
</head>
<body>
<header class="header">...</header>
<main>
<section class="hero">...</section>
<section class="menu" id="menu">...</section>
<section class="contacts" id="contacts">...</section>
</main>
<footer class="footer">...</footer>
</body>
</html>
:root {
--color-primary: #6b3e26;
--color-text: #2d2a26;
--color-bg: #faf7f2;
--radius: 12px;
--space: 1rem;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
margin: 0;
font-family: "Inter", Arial, sans-serif;
color: var(--color-text);
background-color: var(--color-bg);
}
Советы по подготовке
- Повторите руками, а не глазами. Сверстайте без подсказок хотя бы одну страницу из практики прошлых уроков.
- Планируйте до кода. Пять минут на схему блоков сэкономят час переделок.
- Проверяйте в DevTools. Блочная модель во вкладке Computed и зачёркнутые правила в Styles отвечают на большинство вопросов «почему не работает».
- Пишите понятные классы и держите стили в одном аккуратном файле с комментариями-разделами.
- Проверяйте мелочи в конце: у всех картинок есть
alt, ссылки ведут куда нужно, страница не ломается при сужении окна, в консоли нет ошибок. - Застряли больше чем на 20–30 минут — спросите ментора, сформулировав вопрос по схеме из первого урока.
Практика
- Первый скрипт. Подключите
js/main.jsсdeferи выведите в консоль своё имя и результат умножения двух чисел. Результат: две строки в Console без ошибок. - Меняем страницу. Найдите заголовок через
document.querySelectorи поменяйте его текст и цвет. Результат: после загрузки страницы заголовок другой. - Тёмная тема. Сделайте кнопку, которая переключает класс
darkуbody; цвета темы опишите через CSS-переменные. Результат: страница меняет тему по клику и обратно. - Чек-лист. Пройдите чек-лист выше и отметьте пункты, в которых не уверены; повторите соответствующие уроки. Результат: список тем, которые нужно подтянуть, и решённая практика по ним.
- Пробная контрольная. Выполните пример контрольной работы целиком за ограниченное время (например, за 3 часа). Результат: готовая страница кофейни, которая проходит все проверки из советов по подготовке.
Итоги
<script>подключает JavaScript; основной способ — внешний файл<script src="..." defer></script>.deferзагружает скрипт параллельно и выполняет после разбора HTML; ошибки ищите в Console.- JavaScript умеет считать, менять DOM, реагировать на события, общаться с сервером и хранить данные.
- Хороший подход: CSS описывает состояния (классы), JavaScript их переключает.
- За месяц вы освоили HTML5, CSS3, блочную модель, позиционирование, Flexbox, шрифты, картинки, переменные и медиазапросы.
- Перед контрольной пройдите чек-лист и сверстайте пробную работу руками.