Адаптивная карточка события без тяжёлого фреймворка

Адаптивная карточка спортивного события на широком и узком экранах

Адаптивная карточка события должна выдерживать длинное название, увеличение текста и узкий экран. Для такого компонента не нужен тяжёлый фреймворк. В примере CSS отвечает за расположение, а JavaScript только записывает данные в предназначенный элемент.

Разметка и стили адаптивной карточки

index.html

<!doctype html>
<html lang="ru"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>Карточка события</title>
<style>
* { box-sizing: border-box; }
body { margin: 1rem; font: 1rem/1.5 system-ui; }
.card { max-width: 48rem; padding: 1rem; border: 1px solid #555;
  display: grid; gap: 1rem; grid-template-columns: minmax(0, 1fr); }
.card h1 { margin: 0; overflow-wrap: anywhere; }
.card a { justify-self: start; }
@media (min-width: 42rem) {
  .card { grid-template-columns: minmax(0, 1fr) auto; }
  .card a { align-self: center; }
}
</style>
<article class="card"><div><h1 id="name"></h1>
<p>Дата уточняется организатором</p></div>
<a href="#details">Условия участия</a></article>
<section id="details"><h2>Учебное событие</h2><p>Это демонстрационная карточка, регистрации нет.</p></section>
<script>document.querySelector('#name').textContent = 'Открытая тренировка городского клуба';</script>
</html>

Сохраните страницу и откройте её. На узком экране ссылка располагается после текста, на широком — во второй колонке. Порядок чтения в DOM остаётся прежним. Порог 42rem — условный выбор примера, его нужно подбирать по содержимому вашего компонента, а не по названию устройства.

Решения для устойчивой карточки
Что сравнить На что смотреть Что сделать
minmax(0, 1fr) Колонка может сжиматься Длинное содержимое не задаёт лишний минимум
overflow-wrap Длинный непрерывный текст переносится Проверить названия без пробелов
Обычная ссылка Переход имеет явную цель Не делать всю карточку набором вложенных кликов
Текстовый статус даты Нет вымышленной точности Не подставлять случайную дату ради дизайна

Сначала проверьте содержание

Карточка сообщает название, состояние даты и действие. Если дата неизвестна, интерфейс честно это показывает. Не скрывайте важную информацию только потому, что она ломает высоту макета. Для повторяющегося списка используйте подходящий уровень заголовка: h1 в отдельном демонстрационном файле не означает, что каждая карточка большого каталога должна иметь такой уровень.

  • Проверить узкую ширину без горизонтальной прокрутки.
  • Увеличить текст и убедиться, что ссылка остаётся доступной.
  • Подставить очень длинное название.
  • Пройти ссылку клавиатурой и проверить её цель.

Не добавляйте JavaScript-расчёт ширины, пока задача решается стилями. Обработчик resize увеличит число состояний и может конфликтовать с размером шрифта. Если позже появятся реальные данные, отдельно нужны загрузка и обработка отсутствующих полей. Пример не делает запросов и не обещает актуального расписания.

Вопросы и ответы

Почему нет изображения?

У карточки сначала проверяется информационная задача. Обложку можно добавить при наличии смысла и подходящего альтернативного описания.

Нужно ли выравнивать все высоты?

Только если это помогает чтению. Ограничение текста может скрыть важные условия и требует отдельного решения.

Где должен находиться фокус после перехода?

В этом простом примере ссылка ведёт к разделу страницы. Для другого действия нужно спроектировать соответствующее поведение.

Это готовый календарь клуба?

Нет. Это локальный компонент с демонстрационным содержимым, без реального расписания и регистрации.

Похожие записи