Eu uso grid
com css
, preciso garantir que o elemento esteja no centro se o número da matriz for um, dois ou três.
<div className={styles.testWrap}>
<div className={styles.testGrid}>
{array.map((value, index) => {
return (
<div className={styles.logoBox} key={index}>
<div
onClick={() => router.push({ pathname: `./brand/${brand.id}` })}
className={styles.logoContainer}
>
<NextImage src={brand.logoUrl} width={180} height={180} alt="pic" />
</div>
</div>
);
})}
</div>
CSS
.testWrap {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
background-color: pink;
.testGrid {
display: grid;
width: 100%;
gap: 24px;
justify-content: center;
margin-bottom: 130px;
@include sm {
width: fit-content;
margin: 0 auto;
grid-template-columns: auto auto;
grid-template-rows: auto auto;
margin-bottom: 197px;
}
@include md {
// grid-template-columns: auto auto auto; if array number is three
// grid-template-columns: auto auto; if array number is two
// grid-template-columns: auto; if array number is one
grid-template-columns: params; // How do I get dynamic params over here ?
justify-content: center;
grid-gap: 55px;
width: 100%;
margin-bottom: 195px;
}
}
}
Para ajustar dinamicamente a propriedade grid-template-columns com base no número de itens dentro de uma matriz em um componente React, você pode fazer uso eficiente de CSS Custom Properties, geralmente chamadas de variáveis CSS.
A ideia é aproveitar os recursos de manipulação de string do JavaScript dentro do componente React para gerar dinamicamente o valor desejado para a propriedade grid-template-columns.
Aqui está uma implementação proposta:
Nesse método, usamos o método string repeat() do JavaScript para gerar as repetições "automáticas" desejadas com base no comprimento do array e, em seguida, aparamos o espaço inicial usando trim().
Essa abordagem é eficiente e escalável. A utilização de variáveis CSS garante uma integração perfeita entre o ambiente JS dinâmico e o estilo CSS, fornecendo uma solução elegante para o desafio em questão.