<MyRusakov.ru />

Программирование на C++ в Unreal Engine 5

Программирование на C++ в Unreal Engine 5

Данный курс научит Вас созданию игр на C++ в Unreal Engine 5. Курс состоит из 12 разделов, в которых Вас ждёт теория и практика. Причём, в качестве практики будет создан весьма крупный проект объёмом свыше 5000 строк качественного кода, который уже на практике познакомит Вас с принципами создания игр на C++ в Unreal Engine 5.

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

Помимо самого курса Вас ждёт ещё и очень ценный Бонус: «Тестирование Unreal-проектов на Python», в рамках которого Вы научитесь писать очень полезные тесты для тестирования самых разных аспектов разработки игр.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

CSS медиазапросы: практическое руководство для начинающих с примерами

CSS медиазапросы: практическое руководство для начинающих с примерами

Медиазапросы (CSS Media Queries) — основа адаптивной верстки. С их помощью вы меняете стили в зависимости от ширины экрана, ориентации устройства, плотности пикселей, тёмной темы и даже предпочтений пользователя по анимациям. Ниже — практическое руководство: от синтаксиса до отладки и типичных ошибок.

Что такое медиазапросы и как они работают

Медиазапрос — это условие, при котором к стилям применяется дополнительный набор правил. Браузер проверяет условие и, если оно истинно, подключает описанные внутри стили.

/* Базовые мобильные стили (mobile-first) */
.card { padding: 16px; font-size: 16px; }

/* При ширине окна от 768px и больше — усиливаем стили */
@media (min-width: 768px) {
  .card { padding: 24px; font-size: 18px; }
}

/* Только для очень широких экранов */
@media (min-width: 1200px) {
  .card { max-width: 960px; margin: 0 auto; }
}

Мобильный-first vs Desktop-first

  • Mobile-first: пишем базовые стили для маленьких экранов, затем добавляем @media (min-width: ...). Это удобнее, код короче и лучше для производительности.
  • Desktop-first: базовые стили — для больших экранов, затем сужаем через @media (max-width: ...). Подходит реже, например, при переносе старых макетов.
/* Mobile-first (рекомендуется) */
.btn { padding: 10px 12px; }
@media (min-width: 768px) { .btn { padding: 12px 16px; } }
@media (min-width: 1024px) { .btn { padding: 14px 20px; } }

/* Desktop-first (альтернатива) */
.btn { padding: 14px 20px; }
@media (max-width: 1023px) { .btn { padding: 12px 16px; } }
@media (max-width: 767px)  { .btn { padding: 10px 12px; } }

Выбирайте брейкпоинты по контенту, а не «по моде». Типовые ориентиры: 480px, 768px, 1024px, 1280px. Но ставьте точку только там, где верстка реально «ломается».

Диапазоны: современный синтаксис Level 4

Новый синтаксис позволяет писать читаемые условия с диапазонами. Он уже хорошо поддерживается современными браузерами.

/* Между 480px и 1024px включительно */
@media (480px <= width <= 1024px) {
  .sidebar { display: none; }
}

/* Альтернатива для старых браузеров */
@media (min-width: 480px) and (max-width: 1024px) {
  .sidebar { display: none; }
}

Полезные медиа-фичи помимо ширины

Ориентация экрана

/* Горизонтальная ориентация — показываем расширенное меню */
@media (orientation: landscape) {
  .nav--desktop { display: flex; }
}

/* Вертикальная ориентация — компактная навигация */
@media (orientation: portrait) {
  .nav--compact { display: block; }
}

Предпочтения темы: тёмная/светлая

/* Светлая тема по умолчанию */
body { background: #ffffff; color: #1a1a1a; }

/ * Тёмная, если пользователь её предпочитает * /
@media (prefers-color-scheme: dark) {
  body { background: #0f1115; color: #e6e9ef; }
  .card { background: #171a21; border-color: #2a2f3a; }
}

Снижение анимаций для пользователей с укачиванием

/* Базовая анимация */
.modal[open] { animation: fade-in 200ms ease-out; }

/* Уважайте предпочтение пользователя */
@media (prefers-reduced-motion: reduce) {
  .modal[open] { animation: none; }
  * { scroll-behavior: auto; }
}

@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }

Наведение и тип указателя (мышь/тач)

/* На устройствах с точным указателем (мышь) показываем ховер-эффекты */
@media (hover: hover) and (pointer: fine) {
  .btn:hover { transform: translateY(-1px); }
}

/* На тач-экранах увеличиваем кликабельные области */
@media (hover: none) and (pointer: coarse) {
  .btn { padding: 14px 18px; }
}

Retina/HiDPI графика

.hero { background: url('hero@1x.jpg') center/cover no-repeat; }
@media (min-resolution: 2dppx) {
  .hero { background-image: url('hero@2x.jpg'); }
}

Стили для печати

@media print {
  /* Скрываем навигацию, фоны и анимации */
  nav, .footer, .btn { display: none !important; }
  * { background: transparent !important; box-shadow: none !important; }
  body { color: #000; font-size: 12pt; }
}

Шаблон стартовой структуры

/* 1) База (мобильные стили) */
:root { color-scheme: light dark; }
body { margin: 0; font: 16px/1.5 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; }
.header { padding: 16px; }
.grid { display: grid; gap: 16px; grid-template-columns: 1fr; }

/* 2) Брейкпоинт: >= 600px */
@media (min-width: 600px) {
  .grid { grid-template-columns: repeat(2, 1fr); }
}

/* 3) Брейкпоинт: >= 900px */
@media (min-width: 900px) {
  .header { padding: 24px 32px; }
  .grid { grid-template-columns: repeat(3, 1fr); }
}

/* 4) Предпочтения */
@media (prefers-reduced-motion: reduce) {
  * { animation: none; transition: none; }
}

Отладка: как быстро понять, какой брейкпоинт сработал

Удобный приём — «бейдж» активного брейкпоинта через псевдоэлемент. Он сразу покажет вам состояние прямо на странице.

body::before {
  position: fixed; z-index: 9999; right: 8px; bottom: 8px;
  padding: 4px 8px; border-radius: 4px; font: 12px/1.2 monospace;
  background: #111; color: #fff; content: 'base';
}
@media (min-width: 600px) { body::before { content: '>=600'; } }
@media (min-width: 900px) { body::before { content: '>=900'; } }

Ещё: используйте режим Responsive в DevTools, проверяйте ориентацию, эмулируйте «hover: none» и «prefers-reduced-motion».

Когда медиазапросы бессильны: контейнерные запросы

Если нужно менять виджет в зависимости от ширины его родителя, а не окна — рассмотрите Container Queries. Короткий пример:

/* Родителю нужен контейнер */
.card-list { container: cards / inline-size; }

/* Меняем .card, когда контейнер достаточно широкий */
@container cards (min-width: 700px) {
  .card { display: grid; grid-template-columns: 160px 1fr; gap: 16px; }
}

Медиазапросы и контейнерные запросы отлично дополняют друг друга: первые — про окно, вторые — про блоки.

Частые ошибки и как их избежать

  • Слишком много брейкпоинтов. Держите минимум: только там, где контент реально «ломается».
  • Смешивание min-width и max-width без системы. Выберите стратегию и следуйте ей.
  • Дублирование одинаковых правил в разных медиа. Выносите общие стили в базовый слой.
  • Пиксель-перфекционизм. Учитывайте плотность пикселей и субпиксельный рендеринг — принимайте «чуть-чуть иначе» как норму.
  • Игнорирование доступности. Добавляйте @media (prefers-reduced-motion) и корректные контрастные цвета для тёмной темы.

Что дальше

Закрепить знания по адаптиву проще на практике: от сеток и типографики до продвинутых паттернов. Рекомендую пошаговую программу с упражнениями и разбором ошибок — Хочу уверенно освоить вёрстку с нуля и адаптив под реальные проекты.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.