PassFront
  1. PassFront
  2. База знаний
  3. Основы CSS

Как изменить количество колонок через Props в CSS-in-JS?

Основы CSS

В CSS-in-JS количество колонок передают через props, а стиль вычисляется из них — или, лучше, через CSS-переменную.

styled-components / Emotion

const Grid = styled.div`
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(${(p) => p.columns}, 1fr);
`;

<Grid columns={3}>…</Grid>

Минус: при каждом новом значении генерируется новый класс.

Через CSS-переменную

const Grid = styled.div`
  display: grid;
  grid-template-columns: repeat(var(--columns), 1fr);
`;

<Grid style={{ '--columns': columns }}>…</Grid>

Класс один, меняется только значение переменной — быстрее и работает и с CSS Modules.

Адаптивность

Иногда колонки лучше не передавать вовсе, а дать сетке подстроиться самой:

grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));

Коротко для собеседования

Передать columns в props и использовать в repeat(${columns}, 1fr); эффективнее — через CSS-переменную в style.

Подробнее: styled-components — Adapting based on props

Другие вопросы раздела