4
respostas

[Dúvida] Criar de layout responsivo

Como posso resolver esse problema dos cards ficaram grandes quando não tem outros cards para ocupar o espaço de tela? O objetivo é que quando ocorra a quebra de linha e não tenha outro card para ocupar o espaço o card fique do mesmo tamanho que os outros alinhado a esquerda. Da mesma maneira que está na segunda imagem (flex-grow desativado). Estou usando basicamente flex-wrap e flex-grow. Uso o tailwind no react.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade Esse é o codigo react

import CardProduct from "./CardProduct";
import products from './products.json'

export default function HallProducts() {
    return (
        <main className="flex flex-wrap gap-x-10 gap-y-20 my-10 mx-5">
            {products.map((product => {
                return (
                    <CardProduct image={product.image} description={product.descriptionProduct} name={product.nameProduct} price={product.price} />
                )
            }))}
        </main>
    )
}

E esse é o codigo do card

import { AiOutlineShoppingCart } from 'react-icons/ai';

export default function CardProduct({ price, name, image, description }) {
    return (
        <div className='group w-52 text-letterLight cursor-pointer'>
            <img
                className='opacity-70 group-hover:opacity-100 rounded-t'
                src={image}
                alt={description}
            />
            <div className='px-1 mb-10'>
                <h3 className='mb-4 mt-2'>{name}</h3>
                <p className='text-primary text-xl font-bold'>{`R$${price}`}</p>
                <p className='text-xs'>À vista com 15% de desconto</p>
            </div>
            <button className='flex items-center justify-center w-full bg-primary rounded py-1 font-bold'>
                <AiOutlineShoppingCart size={20} className='mr-2' />
                Comprar
            </button>
        </div>
    )
}
4 respostas

Olá Carlos! Para resolver o problema dos cards ficarem grandes quando não há outros cards para ocupar o espaço de tela, você pode utilizar a propriedade flex-basis no CSS. Essa propriedade define o tamanho inicial de um item flexível e, combinada com flex-grow: 1, faz com que os cards sejam redimensionados para ocupar todo o espaço disponível na linha, mas mantenham o mesmo tamanho quando não houver mais espaço disponível.

No seu código React, você pode adicionar a propriedade flex-basis: calc(100% / 3) (ou outro valor que você preferir) na classe do CardProduct, para definir o tamanho inicial dos cards. Em seguida, adicione a propriedade flex-grow: 1 para que os cards sejam redimensionados quando necessário.

O código CSS ficaria assim:

.CardProduct {
  flex-basis: calc(100% / 3);
  flex-grow: 1;
}

Testa por favor.

Espero ter ajudado e bons estudos!

Não resolve, os últimos cards ficam grande do mesmo jeito.

E se você definir um tamanho padrão para eles já que eles vão permencecer iguais sempre? Tipo um height: 200px; e um width: 100px; só exemplo.

pior que não fica, vou mudar para grid para ver se resolve, flexbox não está com o comportamento esperado.