Задание 1

Вёрстка сайта: как устроен Renjer's Space

Задание — сверстать сайт на свободную тему с собственным логотипом, шапкой, меню, контентом и подвалом. Тема этого сайта — устройство движка DOOM, а сама вёрстка подчинена идее «страница — это уровень игры».

Идея и макет

Макет главной страницы для компьютера: шапка, заголовок уровня, плашки, схема, выключатель, статус-бар
Макет главной страницы для компьютера. Сетка 12 колонок, промежутки между блоками — «коридоры» для курсора-игрока.

Главная страница — лендинг, разбитый на главы-уровни E1M1…E1M8. Каждая глава собрана из одних и тех же деталей: заголовок уровня на всю ширину, две-три плашки с текстом, картинки, интерактивная схема и выключатель в конце. Выключатель включает новый слой мини-движка, который рисует поверх страницы автокарту, BSP-дерево, свет, монстров. Поэтому макет делался сразу с оглядкой на движок. Между блоками оставлены широкие промежутки в 44–48 пикселей: на «карте» это коридоры, по которым ходит курсор-игрок.

Макет рисовался прямо в SVG — так его можно хранить вместе с сайтом и править как обычный текст. Сначала была определена сетка: 12 колонок с максимальной шириной 1240 пикселей. Плашка с основным текстом занимает 7 колонок, соседняя — 5, схемы и выключатели растянуты на все 12. Затем были выбраны цвета и шрифты, и только после этого макет превратился в HTML.

Страницы заданий устроены проще: та же шапка, тот же статус-бар, а между ними одна светлая плашка с текстом, картинками и самой работой. Меню «Работы» в шапке и цифры 1–4 в статус-баре ведут на задания, логотип и пункт «Главная» — на главную.

Физическая и логическая структура

Site_Romankov/
├── index.html          главная: энциклопедия-«карта»
├── layout.html         задание 1 (эта страница)
├── picture.html        задание 2: CSS-рисунок
├── flexbox.html        задание 3: flexbox-ролик
├── dom-test.html       задание 4: DOM-тест
├── coursework.html     курсовая (заготовка)
├── css/   style.css · article.css · engine.css · test.css · pic.css · flexbox.css
├── js/    common.js · test.js
│   ├── engine/         core, bsp, render3d, pagemap, layers, monsters, hud, wad_data
│   └── diagrams/       интерактивные схемы глав
└── images/
    ├── freedoom/       графика из Freedoom (BSD-3)
    ├── renders/        карты и кадры, отрисованные скриптами
    ├── pages/          скриншоты и макеты для страниц заданий
    └── flexbox/        картинки задания 3

Каждая страница размечена семантическими тегами: header с логотипом и навигацией nav, основная часть main, подвал footer. Главы на главной — элементы section со своими заголовками header, текстовые плашки — article и aside, картинки с подписями — figure и figcaption. Табличная вёрстка не используется нигде: шапка и статус-бар собраны на flexbox, главы — на CSS Grid, а картинки обтекаются текстом через float.

У вёрстки есть второй, «машинный» слой разметки. Блоки, которые должны стать частью карты, помечены атрибутом data-sector: plate — приподнятая площадка, high — высокий заголовок уровня, room — комната с потолком, solid — колонна. Мини-движок читает эти атрибуты и координаты блоков (getBoundingClientRect) и строит из них линии и секторы. Если поменять вёрстку, карта перестроится сама.

Логотип только на CSS

Построение логотипа в четыре шага: квадрат, линии стен, древко стрелки, оперение
Построение логотипа: квадрат-экран, «стены» из рамок, древко и наконечник, двойное оперение.

Логотип — зелёная стрелка игрока с автокарты DOOM в тёмном квадрате 48×48 пикселей. Его геометрия взята прямо из исходника am_map.c: стрелка там описана семью отрезками в долях радиуса R — древко, два отрезка наконечника и два двойных пёрышка оперения. Каждый отрезок — элемент i высотой 2 пикселя, повёрнутый вокруг своего левого конца через transform-origin: 0 50%. Стены автокарты в углах — это блоки с одной-двумя видимыми сторонами рамки в цветах REDS, YELLOWS и BROWNS. При наведении стрелка делает оборот, как игрок, который осматривается. Логотип выражает идею сайта: вы — это стрелка на карте.

Цвета, шрифты и адаптивность

#4b5764
фон
#262e37
сталь
#ece7da
плашки
#d9481f
акцент
#f0b72f
«опасность»
#3fe04a
игрок

Палитра повторяет техбазу из первого эпизода DOOM: серо-синий металл, светлые панели, оранжевый и жёлтый, как на предупреждающих полосах. Текст лежит на светлых плашках, а тёмным остаётся только окружение — так сайт выглядит как игра, но не становится мрачным и читается легко. Заголовки набраны массивным Arial Black, основной текст — системным шрифтом без засечек, код и цифры движка — моноширинным. Числа в статус-баре нарисованы настоящим шрифтом STTNUM из WAD-файла: двенадцать символов в одной картинке, а нужная цифра выбирается через background-position.

Макет главной для узкого экрана: все блоки в одну колонку
На узком экране все блоки встают в одну колонку, картинки перестают обтекаться текстом.

Адаптивность сделана медиа-запросами. До 980 пикселей все блоки глав растягиваются на 12 колонок из 12. До 760 пикселей уменьшаются отступы и шрифт, плавающие картинки встают на всю ширину, панель слоёв движка сворачивается. До 600 пикселей выключатель переходит в вертикальную раскладку, а статистика интермиссии сжимается. Окно вида от первого лица на телефоне уменьшается до 240 пикселей. Для тех, кто отключил анимации в системе (prefers-reduced-motion), переходы и экран «melt» не проигрываются.

Главная страница с включёнными слоями движка: автокарта, BSP, монстры, окно 3D
Та же вёрстка, когда все слои движка включены: края блоков — линии автокарты, пунктир — разрезы BSP, в углу — страница, отрисованная как уровень.