Компас D-Lab · занятие 2

CSS, JavaScript и первый проект на Canvas

Два урока по 55 минут: от оформления страницы и основных конструкций JavaScript до первого управляемого объекта на Canvas.

55 + 10 + 55 минут
Компас D-Lab · занятие 2
1 / 20
Введение · 5 минут

CSS, JavaScript и первый проект на Canvas

Сегодня мы разделим страницу на три файла, разберём основы CSS и JavaScript, а затем соберём интерактивную сцену.

Интерактивная демонстрация недоступна: браузер не поддерживает Canvas.

Цель занятия

Кнопки изменяют две координаты объекта, после чего JavaScript заново рисует сцену на поле Canvas.

x = 78, y = 112

Сейчас весь код встроен в конспект. В собственной работе мы разнесём HTML, CSS и JavaScript по отдельным файлам.

Актуализация · 5–7 минут

Разминка по прошлому занятию

Шесть коротких заданий помогут повторить структуру HTML-документа и основные конструкции JavaScript, рассмотренные на прошлом занятии.

1. В какой части HTML находится видимое содержимое?
2. Какой тег создаёт главный заголовок?
3. Как называется атрибут, с помощью которого JavaScript находит уникальный элемент?
4. Что в прежнем проекте запускало функцию после щелчка?
5. Запишите вызов функции changePage.
6. Что изменит команда title.textContent = "Старт!";?
CSS · теория · страница 1 из 3

У трёх языков разные роли

HTML определяет структуру и содержание документа: заголовки, абзацы, кнопки и другие элементы страницы. CSS управляет их представлением в браузере, а JavaScript добавляет вычисления и реакцию на действия пользователя.

Такое разделение упрощает разработку: содержание, оформление и программная логика изменяются независимо друг от друга. В небольшом примере код можно поместить в один HTML-файл, но проект из нескольких частей удобнее хранить в отдельных файлах.

HTMLСодержание и структура документа
CSSВнешний вид и расположение элементов
JavaScriptПоведение, события и вычисления

Только HTML

<button>Старт</button>

Браузер создаёт кнопку со стандартным оформлением. Тег определяет назначение элемента, но не задаёт его индивидуальный внешний вид.

HTML вместе с CSS

button {
  color: white;
  background-color: #123d32;
  border-radius: 10px;
}

Селектор button выбирает все элементы <button>. Объявления внутри фигурных скобок задают цвет текста, цвет фона и скругление углов.

Термины. HTML — HyperText Markup Language, язык разметки гипертекста. CSS — Cascading Style Sheets, каскадные таблицы стилей. JavaScript — язык программирования, выполняемый браузером; это название языка, а не аббревиатура.
CSS · теория · страница 2 из 3

Как устроено правило CSS

CSS — язык, основанный на правилах. В каждом правиле указываются элементы, к которым оно относится, и набор свойств, определяющих их оформление. Одно правило может содержать несколько объявлений.

.card {
    background-color: white;
    padding: 16px;
    border: 2px solid orange;
}

Селектор

.card определяет, к каким элементам относится правило. Точка обозначает селектор класса.

Свойство

padding называет характеристику, которую требуется изменить: в данном случае внутренний отступ.

Значение

16px указывает новое значение свойства: отступ размером 16 пикселей.

Запись property: value; называется объявлением CSS. После имени свойства ставится двоеточие, после значения — точка с запятой. Все объявления одного правила заключаются в фигурные скобки.

Одно объявление

h1 {
  color: darkblue;
}

Все заголовки первого уровня получат тёмно-синий цвет текста.

Несколько объявлений

p {
  font-size: 18px;
  text-align: center;
}

Для абзацев одновременно задаются размер и выравнивание текста.

Термины. Selector — селектор; property — свойство; value — значение; declaration — объявление. Обозначение px означает pixel, пиксель — минимальный элемент растрового изображения на экране.
CSS · теория · страница 3 из 3

Селекторы и отдельный файл

Селектор определяет, к каким элементам HTML будет применено правило CSS. Имя тега выбирает все элементы этого типа, класс — элементы одной группы, а идентификатор — элемент с указанным уникальным именем.

CSSЧто выбираетHTML-пример
pВсе абзацы<p>...</p>
.cardВсе элементы указанного классаclass="card"
#titleОдин элемент с указанным idid="title"

index.html

<head>
  <link rel="stylesheet"
        href="style.css">
</head>

Тег link сообщает браузеру, что к документу подключается внешний файл стилей.

style.css

body {
  background-color: #edf4ef;
  font-family: Arial;
}

Все правила оформления находятся в отдельном файле и могут использоваться на нескольких HTML-страницах.

Атрибут rel="stylesheet" обозначает тип связи между документами, а href="style.css" содержит относительный путь к файлу. Если оба файла находятся в одной папке, достаточно указать имя файла.

Почему таблицы стилей называются каскадными? К одному элементу могут относиться несколько правил. Браузер сопоставляет эти правила и определяет итоговое оформление. Подробные правила каскада будут изучаться позднее.
Термины. Class — класс, общее имя группы элементов. ID — identifier, идентификатор уникального элемента. href — hypertext reference, ссылка на внешний ресурс.
CSS-тренажёр · ступень 1 из 3

Узнайте конструкцию

задания 1–3 · базовые
1. Что изменит color: purple;?
2. Какой селектор выберет <div class="card">?
3. Запишите свойство цвета фона.
CSS-тренажёр · ступень 2 из 3

Соберите и примените

задания 4–6 · средние
4. Какая строка правильно подключает CSS?
5. Какое свойство создаёт внутреннее пространство между содержимым и рамкой?
6. Нужно оформить только элемент id="scene". Что выбрать?
CSS-тренажёр · ступень 3 из 3

Исправьте и напишите

задания 7–9 · сложные
7. Исправьте правило: color = white;
8. Запишите селектор для всех элементов class="control".
9. Напишите правило, которое задаёт элементу #title выравнивание по центру.
Самостоятельная работа · 15 минут

Оформите интерфейс будущей программы

D-Lab/Имя/
├── index.html
└── style.css

Задание

  1. Подключите style.css.
  2. Оформите страницу, заголовок и поясняющую карточку.
  3. Создайте класс для всех будущих кнопок.
  4. Измените не менее трёх значений самостоятельно.

Минимум свойств

background-color, color, font-family, padding, border, border-radius.

Canvas пока не добавляем: сначала изучим его устройство отдельным блоком.
Структура проекта · 5 минут

Подготовьте третий файл

D-Lab/Имя/
├── index.html  — структура
├── style.css   — оформление
└── script.js   — поведение
<script src="script.js" defer></script>

Атрибут src содержит относительный путь к файлу JavaScript. Атрибут defer указывает, что выполнение сценария следует отложить до завершения разбора HTML-документа.

Контрольная точка: сохраните оба готовых файла, создайте пустой script.js и сделайте перерыв.
Перерыв · 10 минут

HTML задаёт структуру.
CSS создаёт внешний вид.
После перерыва добавим поведение.

JavaScript · теория · страница 1 из 3

Значения и переменные

JavaScript — язык программирования, с помощью которого веб-страница получает динамическое поведение. Браузер выполняет сценарий, когда загружает страницу или когда происходит предусмотренное программой событие.

Данные программы представлены значениями разных типов: числами, строками, логическими значениями и объектами. Переменная — это имя, связанное со значением. Обращаясь к имени, программа может прочитать сохранённое значение или, если это разрешено способом объявления, заменить его новым.

Повторное присваивание запрещено

const step = 20;
const color = "orange";

const применяют, если переменной не потребуется присваивать другое значение. В нашем проекте величина одного шага остаётся постоянной.

Значение изменяется

let x = 50;
let y = 120;
x = x + step;

let применяют, если значение будет меняться во время работы программы. Координата x изменяется при каждом перемещении объекта.

Тип значенияПримерНазначение
Число50Координаты, размеры, скорость
Строка"orange"Текст и названия
Логическое значениеtrue, falseОтвет «да» или «нет»
Термины. Variable — переменная; value — значение; string — строка; Boolean value — логическое значение. Слова const и let являются ключевыми словами JavaScript.
JavaScript · теория · страница 2 из 3

Выражения и функции

Выражение вычисляет значение. Например, выражение x + step складывает два числа. Оператор присваивания = сохраняет результат вычисления в переменной, расположенной слева.

Изменение значения

x = x + step;
x += step;
y -= step;

Первые две строки имеют одинаковый смысл: увеличить x на величину step. Третья строка уменьшает y. Сокращённые операторы удобны при повторяющихся изменениях.

Именованное действие

function moveRight() {
    x += step;
    draw();
}

Функция объединяет несколько команд под одним именем. При вызове moveRight() координата изменяется, после чего функция draw() обновляет изображение.

Код внутри фигурных скобок называется телом функции. Он не выполняется при описании функции, а запускается только после вызова. Такое разделение позволяет использовать одно действие многократно.

Связь с Python: назначение переменных, выражений и функций в двух языках сходно. В Python блок выделяется отступами, а в JavaScript границы блока обозначаются фигурными скобками.
Термины. Expression — выражение; operator — оператор; assignment — присваивание; function — функция; function call — вызов функции.
JavaScript · теория · страница 3 из 3

Элемент, событие, обработчик

После разбора HTML браузер формирует объектную модель документа — дерево объектов, соответствующих элементам страницы. JavaScript может найти нужный объект, прочитать или изменить его свойства и назначить обработчик события.

const button = document.querySelector("#rightButton");

button.addEventListener("click", moveRight);

1. Найти

document.querySelector ищет первый элемент, соответствующий CSS-селектору #rightButton.

2. Назначить обработчик

addEventListener связывает событие click с указанной функцией.

3. Выполнить

После щелчка браузер вызывает moveRight; скобки после имени здесь не пишутся, потому что передаётся сама функция.

Событием называют сообщение браузера о произошедшем действии: щелчке мышью, нажатии клавиши, перемещении указателя или завершении загрузки. Обработчик события — функция, которую браузер вызывает в ответ на это сообщение.

щелчок → функция → изменение состояния → новый результат

Термины. DOM — Document Object Model, объектная модель документа. Event — событие; event listener — слушатель события; event handler — обработчик события. Метод querySelector использует те же селекторы, что и CSS.
JavaScript-тренажёр · ступень 1 из 3

Прочитайте код

задания 1–3 · базовые
1. Чему станет равно x? let x = 50; x += 20;
2. Координата будет меняться. Как объявить её?
3. Запишите вызов функции draw.
JavaScript-тренажёр · ступень 2 из 3

Свяжите действия

задания 4–6 · средние
4. Какая команда найдёт id="startButton"?
5. Что передаётся вторым аргументом?
button.addEventListener("click", moveRight);
6. Как называется событие обычного щелчка?
JavaScript-тренажёр · ступень 3 из 3

Исправьте и допишите

задания 7–9 · сложные
7. Исправьте поиск элемента: document.querySelector(rightButton)
8. Запишите команду перемещения вправо на величину step.
9. Напишите функцию moveLeft, которая уменьшает x на step и вызывает draw().
Canvas · теория · страница 1 из 2

Canvas — область программного рисования

Элемент <canvas> создаёт на странице область фиксированного размера, предназначенную для программного рисования. В отличие от элементов HTML, нарисованные линии и фигуры не образуют самостоятельных узлов документа: они становятся частью общего изображения.

<canvas id="scene"
        width="600"
        height="300">
</canvas>

HTML создаёт прямоугольную область с внутренним размером 600 × 300 пикселей. Атрибуты width и height задают размеры системы координат.

const canvas =
    document.querySelector("#scene");
const ctx = canvas.getContext("2d");

Сначала программа получает объект элемента <canvas>, затем запрашивает у него двумерный контекст рисования.

x →y ↓

Метод getContext("2d") возвращает объект с методами и свойствами для двумерной графики. Этот объект часто сохраняют в переменной ctx, название которой образовано от слова context.

Система координат: начало координат находится слева сверху; координата x растёт вправо, а y — вниз. Поэтому увеличение y перемещает объект не вверх, а вниз.
Термины. Canvas — «холст», область программного рисования. Context — контекст рисования, набор доступных команд. Обозначение 2d означает two-dimensional — двумерный.
Canvas · теория · страница 2 из 2

Состояние и функция отрисовки

Ранее нарисованная фигура не перемещается автоматически. Чтобы показать объект в новом месте, программа изменяет его координаты, очищает область рисования и заново выводит сцену. Поэтому данные о состоянии объекта хранят отдельно от функции отрисовки.

let x = 50;
let y = 120;

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = "orange";
    ctx.fillRect(x, y, 60, 40);
}

Состояние

x и y хранят текущие координаты. Изменение переменных ещё не изменяет изображение.

Очистка

clearRect очищает прямоугольную область от точки (0, 0) до полной ширины и высоты Canvas.

Новый кадр

fillStyle задаёт цвет заливки, а fillRect рисует прямоугольник в текущих координатах.

После изменения x или y необходимо снова вызвать draw(). Последовательность «изменить состояние — очистить Canvas — нарисовать сцену» станет основой будущей анимации.

Термины. State — состояние программы; render — отрисовка; frame — кадр. Имена методов clearRect и fillRect образованы от слов clear — очищать, fill — заполнять и rectangle — прямоугольник.
Практика · 15 минут

Соберите управляемый объект

index.html

<canvas id="scene" width="600" height="300"></canvas>
<button id="upButton">↑</button>
<button id="leftButton">←</button>
<button id="rightButton">→</button>
<button id="downButton">↓</button>
<p>Координата: <span id="coordinates"></span></p>
<script src="script.js" defer></script>

Алгоритм

  1. Получите элемент <canvas> и контекст рисования.
  2. Объявите переменные x, y и константу step.
  3. Определите функцию draw().
  4. Реализуйте движение вправо вместе с учителем.
  5. Добавьте движение влево, вверх и вниз.
После каждого небольшого изменения сохраняйте файл, обновляйте страницу и проверяйте результат.
Финал · 5 минут

От страницы к графической программе

Анимация недоступна: браузер не поддерживает Canvas.

Расширенная версия

Объект движется автоматически и отражается от границ.

В следующем занятии разберём скорость, состояние и цикл анимации.

x = 40 · speed = 3