🎯 Цель урока
В этом уроке мы создадим семантическую HTML структуру для игры "Камень-ножницы-бумага". Ты научишься правильно размечать игровой интерфейс, создавать доступные кнопки и организовывать контент.
Мы заложим прочный фундамент для будущего стилизования и добавления JavaScript логики.
Как будет выглядеть структура
Посмотри на итоговый интерфейс, который мы создадим:
👤 Игрок
🤖 Компьютер
📋 Основная HTML структура
Начнём с создания базовой HTML структуры. Используем семантические элементы для лучшей доступности и SEO.
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Камень-Ножницы-Бумага</title> </head> <body> <main class="game-container"> </main> </body> </html>
lang="ru" указывает язык страницы для поисковиков и скринридеров. <main> обозначает основное содержимое страницы.
📊 Заголовок и статистика игры
Создадим заголовок игры и панель статистики, которая будет показывать количество побед, поражений и текущую серию.
<main class="game-container"> <header class="game-header"> <h1>✂️ Камень-Ножницы-Бумага ✂️</h1> <p class="subtitle">Классическая игра на ловкость!</p> </header> <section class="game-stats" aria-label="Игровая статистика"> <div class="stat-card"> <span class="stat-number" id="wins">0</span> <span class="stat-label">Победы</span> </div> <div class="stat-card"> <span class="stat-number" id="losses">0</span> <span class="stat-label">Поражения</span> </div> <div class="stat-card"> <span class="stat-number" id="draws">0</span> <span class="stat-label">Ничьи</span> </div> <div class="stat-card"> <span class="stat-number" id="streak">0</span> <span class="stat-label">Серия</span> </div> </section> </main>
aria-label делает контент доступным для людей с нарушениями зрения. ID элементы понадобятся для обновления статистики через JavaScript.
⚔️ Боевая арена
Создадим центральную часть игры - боевую арену, где будут отображаться выборы игрока и компьютера.
<section class="battle-arena" aria-label="Игровое поле"> <div class="vs-section"> <div class="player-side"> <h3>👤 Игрок</h3> <div class="choice-display" id="playerChoice" aria-live="polite" aria-label="Выбор игрока"> ❓ </div> </div> <div class="vs-divider"> <span aria-hidden="true">VS</span> </div> <div class="computer-side"> <h3>🤖 Компьютер</h3> <div class="choice-display" id="computerChoice" aria-live="polite" aria-label="Выбор компьютера"> ❓ </div> </div> </div> </section>
aria-live="polite" сообщает скринридеру об изменениях содержимого. aria-hidden="true" скрывает декоративный элемент от программ чтения экрана.
🎮 Кнопки выбора
Создадим интерактивные кнопки для выбора хода. Важно правильно их разметить для удобства использования и доступности.
<section class="choice-buttons" aria-label="Выбор хода"> <button class="choice-btn" id="rock-btn" type="button" onclick="makeChoice('rock')" aria-label="Выбрать камень"> <span class="choice-emoji" aria-hidden="true">✊</span> <span class="choice-label">Камень</span> </button> <button class="choice-btn" id="paper-btn" type="button" onclick="makeChoice('paper')" aria-label="Выбрать бумагу"> <span class="choice-emoji" aria-hidden="true">✋</span> <span class="choice-label">Бумага</span> </button> <button class="choice-btn" id="scissors-btn" type="button" onclick="makeChoice('scissors')" aria-label="Выбрать ножницы"> <span class="choice-emoji" aria-hidden="true">✌️</span> <span class="choice-label">Ножницы</span> </button> </section>
type="button" предотвращает отправку формы. Отдельные span элементы позволяют гибко стилизовать эмодзи и текст.
📋 Область результатов
Добавим область для отображения результатов игры и дополнительных элементов интерфейса.
<section class="result-section"> <div class="result-display" id="gameResult" aria-live="assertive" aria-label="Результат игры"> <p class="result-text">Выбери свой ход!</p> </div> </section> <section class="game-controls"> <button class="control-btn reset-btn" type="button" onclick="resetGame()" aria-label="Сбросить статистику игры"> 🔄 Сброс </button> <button class="control-btn rules-btn" type="button" onclick="showRules()" aria-label="Показать правила игры"> 📖 Правила </button> </section>
aria-live="assertive" немедленно сообщает об изменениях результата, что важно для доступности.
🏗️ Общая структура HTML
Посмотри на полную иерархию элементов нашей игры:
♿ Доступность (Accessibility)
🎯 Твоё задание
Создай HTML файл со следующей структурой:
- Базовую HTML5 структуру с правильным DOCTYPE и meta-тегами
- Заголовок игры с названием и подзаголовком
- Панель статистики с четырьмя карточками счётчиков
- Боевую арену с отображением выборов игрока и компьютера
- Три кнопки выбора хода с эмодзи и подписями
- Область результатов с сообщениями для игрока
- Кнопки управления (сброс и правила)
- Правильные aria-атрибуты для доступности
💡 Используй семантические HTML5 теги и не забывай про доступность!