🎯 Цель урока
В этом уроке мы изучим, как создать привлекательный дизайн для игры "Угадай число". Освоим градиенты, анимации, адаптивный дизайн и интерактивные эффекты.
Ты узнаешь, как CSS может превратить обычную HTML-форму в захватывающий игровой интерфейс, который будет отлично выглядеть на любых устройствах.
🎮 Демонстрация стилей
Попробуй интерактивные элементы:
🎨 Базовые стили игры
Начнём с создания основных стилей. Хорошая игра должна иметь яркий, но не раздражающий дизайн, который подсказывает пользователю, что делать.
/* Определяем переменные для цветовой схемы */ :root { /* Основные цвета игры */ --primary-color: #667eea; --secondary-color: #764ba2; --success-color: #00b894; --warning-color: #fdcb6e; --error-color: #e17055; /* Градиенты */ --main-gradient: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); /* Размеры и отступы */ --border-radius: 15px; --shadow-main: 0 10px 30px rgba(0, 0, 0, 0.2); } /* Базовые стили для игрового контейнера */ .game-container { max-width: 600px; margin: 50px auto; background: var(--main-gradient); border-radius: var(--border-radius); box-shadow: var(--shadow-main); color: white; padding: 30px; text-align: center; }
CSS переменные (кастомные свойства) позволяют легко изменять цветовую схему и поддерживать консистентность дизайна по всему проекту.
🌈 Стили для полей ввода
Создаём интерактивные поля ввода с анимированными состояниями:
/* Стили для числового поля ввода */ .guess-input { width: 100%; max-width: 300px; padding: 15px 20px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 25px; background: rgba(255, 255, 255, 0.9); font-size: 1.2rem; text-align: center; outline: none; transition: all 0.3s ease; font-weight: bold; color: #2c3e50; } /* Состояние фокуса */ .guess-input:focus { border-color: var(--warning-color); box-shadow: 0 0 20px rgba(253, 203, 110, 0.5); transform: scale(1.05); background: white; } /* Состояние ошибки */ .guess-input.error { border-color: var(--error-color); box-shadow: 0 0 15px rgba(225, 112, 85, 0.5); animation: shake 0.5s ease-in-out; }
transform: scale() увеличивает элемент при фокусе, а transition делает изменения плавными.
🎨 Цветовая система игры
Используем семантические цвета для разных состояний игры:
#00b894
#fdcb6e
#e17055
#74b9ff
#6c5ce7
/* Стили для разных результатов игры */ .result-message { padding: 15px 20px; border-radius: 10px; margin: 15px 0; font-weight: bold; text-align: center; transition: all 0.3s ease; } /* Успешное угадывание */ .result-success { background: linear-gradient(135deg, #00b894, #00a085); color: white; animation: celebration 0.6s ease-out; } /* Число больше загаданного */ .result-high { background: linear-gradient(135deg, #e17055, #d63031); color: white; } /* Число меньше загаданного */ .result-low { background: linear-gradient(135deg, #74b9ff, #0984e3); color: white; }
✨ Анимации и эффекты
Добавляем жизни в интерфейс с помощью CSS анимаций:
/* Анимация празднования при победе */ @keyframes celebration { 0% { transform: scale(0.8) rotate(-5deg); opacity: 0; } 50% { transform: scale(1.1) rotate(2deg); opacity: 1; } 100% { transform: scale(1) rotate(0deg); opacity: 1; } } /* Тряска при ошибке */ @keyframes shake { 0%, 100% { transform: translateX(0); } 10%, 30%, 50%, 70%, 90% { transform: translateX(-8px); } 20%, 40%, 60%, 80% { transform: translateX(8px); } } /* Пульсация для подсказок */ @keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.05); opacity: 0.8; } }
Анимации делают интерфейс живым и отзывчивым. Используй их умеренно - они должны помогать, а не отвлекать.
🎯 Стили для кнопок
Кнопки - ключевые элементы интерфейса. Они должны быть яркими, заметными и давать чёткую обратную связь при взаимодействии.
/* Основная игровая кнопка */ .game-button { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; border: none; padding: 12px 30px; border-radius: 25px; font-size: 1.1rem; font-weight: bold; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 5px 15px rgba(102, 126, 234, 0.3); position: relative; overflow: hidden; } /* Эффект при наведении */ .game-button:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); } /* Эффект нажатия */ .game-button:active { transform: translateY(0); box-shadow: 0 3px 10px rgba(102, 126, 234, 0.3); } /* Заблокированное состояние */ .game-button:disabled { background: #95a5a6; cursor: not-allowed; transform: none; box-shadow: none; }
:hover, :active и :disabled псевдоклассы создают разные состояния кнопок.
📱 Адаптивный дизайн
Игра должна отлично работать на любых устройствах:
Контрольные точки (Breakpoints)
до 576px
576px - 768px
768px - 992px
от 992px
/* Стили для планшетов */ @media (max-width: 768px) { .game-container { margin: 20px auto; padding: 20px; } .guess-input { font-size: 1rem; padding: 12px 15px; } .game-button { width: 100%; margin-top: 15px; } } /* Стили для мобильных устройств */ @media (max-width: 480px) { .game-container { margin: 10px; padding: 15px; } h1 { font-size: 1.5rem; } .guess-input { max-width: 100%; } }
@media запросы позволяют применять разные стили для разных размеров экрана. Всегда проектируй сначала для мобильных!
🎮 Игровые состояния
CSS можно использовать для показа разных состояний игры: начало, процесс, победа, поражение. Каждое состояние должно иметь уникальный визуальный стиль.
/* Состояние загрузки */ .game-loading { opacity: 0.6; pointer-events: none; } .game-loading::after { content: ""; position: absolute; top: 50%; left: 50%; width: 40px; height: 40px; border: 4px solid rgba(255, 255, 255, 0.3); border-top: 4px solid white; border-radius: 50%; animation: spin 1s linear infinite; transform: translate(-50%, -50%); } /* Состояние победы */ .game-won { background: linear-gradient(135deg, #00b894, #55a3ff); animation: victory-pulse 2s infinite; } /* Состояние поражения */ .game-lost { background: linear-gradient(135deg, #e17055, #c44569); animation: defeat-fade 1s ease-out; }
pointer-events: none отключает все клики, а псевдоэлементы ::after позволяют добавлять визуальные эффекты без изменения HTML.
🎨 Твоё задание
Создай полноценную CSS-стилизацию для игры "Угадай число":
- Настрой CSS переменные для цветовой схемы
- Создай стили для игрового контейнера с градиентом
- Стилизуй поле ввода с интерактивными состояниями
- Добавь стили для кнопок с hover эффектами
- Создай цветовую систему для результатов игры
- Добавь CSS анимации для обратной связи
- Реализуй адаптивный дизайн с медиа-запросами
- Добавь стили для различных состояний игры
- Протестируй на разных устройствах
💡 Помни: хороший дизайн не только красив, но и функционален!