GH GambleHub

Сеточная система и модульность

1) Зачем сетка

Сетка обеспечивает предсказуемое поведение интерфейса при росте контента и экранов:
  • ускоряет дизайн и разработку (общий язык: «12 колонок, gutter 24»),
  • уменьшает когнитивную нагрузку (ровный ритм, стабильные линии),
  • повышает переносимость компонентов между страницами,
  • позволяет строить модульную библиотеку без «микроверстки».

2) Базовые элементы сетки

Контейнер — максимальная ширина контента, центрированная область.
Колонки — вертикальные области для размещения модулей.
Gutter — горизонтальный промежуток между колонками.
Margin — внешние поля слева/справа от контейнера.
Row/Track — горизонтальная направляющая (в CSS Grid — строки/треки).
Baseline — вертикальная сетка типографики.

Рекомендуемый вертикальный ритм: 8-pt (иногда 4-pt для нюансов), единицы размеров и отступов кратны 4/8.

3) Брейкпоинты и контейнеры

Подберите брейкпоинты из реальной аналитики устройств. Пример:
ТочкаШирина вьюпортаКол-во колонокКонтейнерGutter
XS≥ 3604fluid16
SM≥ 6006560–58416
MD≥ 8408760–80820
LG≥ 1200121104–115224
XL≥ 1440121280–132024–32
Правила:
  • Контейнер растровый (фикс. max-width) на больших экранах, fluid — на мобильных.
  • Gutter может плавно увеличиваться к большим брейкпоинтам.
  • Колонки — 4/6/8/12 как «основной набор».

4) Модульность и плотности

Модуль — блок контента, занимающий 1..N колонок и кратные baseline-высоты.

Плотности:
  • Comfort (дашборды, чтение): крупнее шрифты, отступы 16–24.
  • Compact (таблицы, профи-mode): шрифты +0/−1 px, вертикальные отступы −4/−8, высоты строк фиксированы (кратно 8).

Компоненты должны иметь два пресета плотности минимум.

5) Типографика и baseline-сетка

Выберите базовый line-height (например, 24 px) и синхронизируйте высоты элементов (кнопки 40/48/56 px кратны baseline).
Заголовки закрепляют вертикальные ритмы: отступы над/под кратны 8.
Иконки выравнивайте по капвысоте текста.

6) Шаблоны раскладок

6.1 Карточки (cards)

Сетка: мозаика (фикс. ширина карточки) или колоночная (карточка = N колонок).
Минимальные высоты контента, чтобы избежать «прыжков» при загрузке; skeleton в пределах карточки.
Внутренний padding: 16/20/24 в зависимости от брейкпоинта.

6.2 Таблицы

Контейнер на всю ширину; замораживаем первый столбец/шапку при горизонтальном скролле.
Ячейки — baseline-кратные; числовые колонки выравниваем по разрядам/десятичным.
На XS — «карточные строки» (stacked layout) вместо горизонтального скролла, если столбцов слишком много.

6.3 Формы

Одноколоночные на XS/SM, дву- или трехколоночные на MD+ (с учетом логики табов/секций).
Поле + лейбл + хелп-текст укладываются в общий модуль (высоты кратны 8).

6.4 Дашборды

Грид с фиксированными треками и облаками (areas) для стабильности.
Виджеты имеют минимальную и максимальную ширину в колонках; высоты — кратны baseline.
При ресайзе — меняется кол-во колонок, не дробим виджеты произвольно.

7) Адаптивность, auto-layout и поведение

Контент впереди сетки: сетка подстраивается под содержимое, а не ломает его.

Figma/Auto-layout:
  • Используйте constraints (left/right/center) и auto-layout для карточек/списков.
  • Поддерживайте варианты компонента для XS/SM/MD/LG (изменяются паддинги, порядок слотов).
CSS:
  • На уровне секций — CSS Grid (области, колонки, строки).
  • Внутри компонентов — Flex (оси, баланс пробелов).

8) CSS Grid / Flex — практикум

Контейнер и 12-колоночная сетка:
css
.container {
max-width: 1280px; margin: 0 auto; padding: 0 16px;
display: grid; gap: 24px;
grid-template-columns: repeat(12, minmax(0, 1fr));
}
.col-4 { grid-column: span 4; }
@media (max-width: 1199px) {
.container { grid-template-columns: repeat(8, 1fr); gap: 20px; }
.col-4 {grid-column: span 8; }/full-width card/
}
@media (max-width: 839px) {
.container { grid-template-columns: repeat(6, 1fr); gap: 16px; }
}
@media (max-width: 599px) {
.container { grid-template-columns: repeat(4, 1fr); }
}
Грид-области (дашборд):
css
.dashboard {
display: grid; gap: 24px;
grid-template:
"kpi kpi chart chart" auto
"tbl tbl chart chart" 1fr / 1fr 1fr 1fr 1fr;
}
.kpi  { grid-area: kpi; }
.chart { grid-area: chart; }
.tbl  { grid-area: tbl; }
@media (max-width: 1199px) {
.dashboard { grid-template:
"kpi" auto "chart" auto "tbl" 1fr / 1fr; }
}

9) Отступы и токены

Фиксируйте масштабы в дизайн-системе.

json
{
"space": { "xs": 4, "sm": 8, "md": 12, "lg": 16, "xl": 24, "2xl": 32, "3xl": 48 },
"container": { "sm": 584, "md": 808, "lg": 1152, "xl": 1320 },
"gutter": { "sm": 16, "md": 20, "lg": 24, "xl": 32 },
"columns": { "xs": 4, "sm": 6, "md": 8, "lg": 12 }
}
Правила:
  • Внутренние отступы компонентов — из `space`.
  • Наружные поля контейнеров — из `gutter`/`margin`.
  • Высоты элементов — кратны 8 (40/48/56).

10) Модульные компоненты

Компонент должен:
  • знать, сколько колонок он занимает на каждом брейкпоинте;
  • иметь минимальные/максимальные размеры;
  • не зависеть от «магических» пикселей — только токены;
  • держать внутреннюю сетку (заголовок, контент, футер) на baseline.

11) Изображения и медиапропорции

Фиксируйте aspect-ratio (например, 16/9, 4/3, 1/1) для превью и карточек.

css
.media { aspect-ratio: 16 / 9; object-fit: cover; }

На XS используйте full-bleed (картинка по краям) только для промо, остальной контент следует контейнеру.
Текст на изображении — только на плашках/оверлеях, контраст ≥ AA.

12) RTL и локализация

Грид-направление зеркалится: `dir="rtl"` и `:dir(rtl)`-правила для отступов/иконок.
Порядок колонок и «липкие» области (frozen columns) в таблицах — учитывайте зеркалирование.
Длина строк и переносы могут менять высоты модулей — закладывайте запас.

13) Специфика iGaming

Промо-зоны и баннеры: отдельный грид с крупными модулями; текст всегда на плашке, контраст AAA для ответственных уведомлений (18+, лимиты, риски).
Лидеры/рейтинги: таблицы с фиксированной первой колонкой и sticky-шапкой, числа табличные (tabular-nums), высоты строк кратны 8.
Дашборды игроков/операций: виджеты (сессии, депозиты, RTP, Net Deposits) занимают 3–6 колонок на 12-гриде; перестроение каскадное на MD/SM.
Карточки турниров: сетка карточек 3×N (LG), 2×N (MD), 1×N (SM/XS); CTA в постоянном месте.

14) Доступность и фокус

Фокус-кольца не должны ломать ритм: добавляйте outline-offset или внутренний псевдоэлемент.
Минимальные размеры клика: 44×44 (моб.) / 32×32 (десктоп).
Не кодируйте смысл только размещением; сохраняйте текстовые метки и aria-атрибуты.

15) Производительность

Снижайте глубину вложенности гридов: 1 основной грид секции + флексы внутри.
Избегайте тяжелых теней/масок на сотнях карточек; используйте «плоские» стили в списках.
Ленивая загрузка медиаконтента; фиксированные пропорции предотвращают CLS.

16) Антипаттерны

«Сетка по вкусу» на каждой странице → рассыпается консистентность.
Gutter меняется произвольно по секциям.
Несогласованные плотности (в одном экране и «компакт», и «комфорт»).
Компоненты, зависящие от магических ширин (без колонок/токенов).
Таблицы с горизонтальным скроллом на мобайле без альтернативной раскладки.
Текст на изображении без плашек и контроля контраста.

17) QA-чек-лист

Структура

  • Колонки/контейнер/маргины соответствуют брейкпоинтам.
  • Gutter стабилен внутри страницы.
  • Высоты и отступы кратны 8.

Компоненты

  • Определены колоночные ширины (XS..XL) и min/max.
  • Внутренние сетки согласованы с baseline.

Таблицы/формы

  • Sticky-шапка/первая колонка; stacked-режим на XS.
  • Поля форм кратны baseline; лейбл/хелп-текст не «прыгают».

A11y

  • Фокус-стили не ломают ритм; кликовые зоны ≥ минимальных.

Перформанс

  • Нет CLS из-за медиаблоков; ленивая загрузка включена.

18) Токены и документация в дизайн-системе

Опубликуйте страницу «Grid & Spacing»:
  • значения `container`, `columns`, `gutter`, `space`, baseline;
  • примеры раскладок (карточки/таблицы/формы/дашборды);
  • пресеты плотности (Comfort/Compact) и их влияние на компоненты;
  • код-сниппеты для CSS Grid/Flex и Figma-стили/лейауты.

Краткое резюме

Сетка — это договор между дизайном и разработкой. Зафиксируйте брейкпоинты, контейнеры, колонки и ритм 8-pt, оформите токены и шаблоны раскладок, обеспечьте варианты плотности, адаптивность и доступность. Тогда страницы масштабируются предсказуемо, компоненты повторно используются, а команда работает быстрее и стабильнее.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

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