Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

554
Views
Problema al crear una cuadrícula de tarjeta de 3 columnas usando Bulma y Nextjs (buscar)

Estoy tratando de crear una cuadrícula de tarjetas de 3 columnas con Bulma en Nextjs. Los datos provienen de JSON Endpoint.

Recuperé con éxito los datos y se está recuperando perfectamente.

Pero, no puedo encontrar lo que estoy haciendo mal en este caso.

¿Hay alguna forma en que pueda limitar la columna? En Bootstrap hice Col sm={4} para limitar a 3 columnas. No estoy seguro de cómo hacer eso en Bulma

Está apareciendo así.

Obtuve el código para SplitEvery de esta pregunta SO ( agregue un nuevo contenedor de columnas cada 3 elementos de columna en React.js con Bulma.css )

ingrese la descripción de la imagen aquí

Esto es exactamente lo que quiero. Solo quiero 3 columnas (3 tarjetas en una fila) como a continuación

ingrese la descripción de la imagen aquí

Aquí está el código de mi index.js

 import Head from "next/head"; import Image from "next/image"; import styles from "../styles/Home.module.css"; export const getStaticProps = async () => { const res = await fetch("http://localhost:3000/lorem.json"); const data = await res.json(); console.log(data); return { props: { number: data }, }; }; //Below Part is referred from //https://stackoverflow.com/questions/54187450/add-new-columns-container-every-3-column-elements-in-react-js-with-bulma-css const splitEvery = (array, length) => array.reduce((result, item, index) => { if (index % length === 0) result.push([]); result[Math.floor(index / length)].push(item); return result; }, []); const Home = ({ numbers }) => { return ( <div> {splitEvery(numbers, 3).map((number) => ( <div className="columns"> {numbers.map((number) => ( <div className="column" key={number.id}> <div className="card"> <div className="card-content"> <p className="title is-4">💠 {number.name}</p> </div> </div> </div> ))} </div> ))} </div> ); }; export default Home;
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Tu problema surge porque Bulma está basada en Flexbox. Con el código anterior, esencialmente está llamando a su función (con lo que asumo de acuerdo con la imagen publicada) que actúa en una matriz de números 1-7. De forma predeterminada, todos los elementos de Flexbox intentarán encajar en una línea. Por lo tanto, es escupir una carta por cada número en una línea.

De la documentación, ( Más información aquí ) "Siempre que desee comenzar una nueva línea, puede cerrar un contenedor de columnas y comenzar uno nuevo. Pero también puede agregar el modificador is-multiline y agregar más elementos de columna de los que cabrían una sola fila".

Por lo tanto, todo lo que tiene que hacer es agregar is-multiline al div que contiene className="columns" y también agregar is-one-third al div que contiene className="column" para definir cuánto espacio ocupa cada tarjeta. Este es uno de los inconvenientes con un marco como Bulma; puedes estar limitado a ciertas cosas que quieres hacer.

En general, debería verse como algo como:

 const Home = ({ numbers }) => { return ( <div> {splitEvery(numbers, 3).map((number) => ( <div className="columns is-multiline"> {numbers.map((number) => ( <div className="column is-one-third" key={number.id}> <div className="card"> <div className="card-content"> <p className="title is-4">💠 {number.name}</p> </div> </div> </div> ))} </div> ))} </div> ); };

Nota: Recreé esto en una máquina local y funcionó bien.

about 4 years ago · Juan Pablo Isaza Report

0

Puede confiar en CSS para dividir sus columnas. Al igual que Bootstrap, Bulma también usa diseños de 12 columnas: consulte los tamaños de columna y las columnas receptivas .

También debe agregar el nombre de clase is-multiline para que los elementos se envuelvan y eliminen el código SplitEverything ; ya no es necesario.

 const Home = ({ numbers }) => ( <div className="columns"> {numbers.map((number) => ( <div className="column is-multiline is-12-mobile is-6-tablet is-4-desktop" key={number.id}> <div className="card"> <div className="card-content"> <p className="title is-4">💠 {number.name}</p> </div> </div> </div> ))} </div> );
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!