es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CSS Grid: ¿mínimo ancho dinámico dependiente?

Tengo la siguiente estructura:

  • grid raíz
    • grid1
    • grid2
    • grid3

Defino las columnas: repeat(5, 1fr)

El problema es que, debido a que su contenido tiene diferentes anchos. ¿Hay alguna manera de seleccionar de alguna forma el ancho del elemento más grande y establecerlo como el ancho mínimo de los otros 2 grids?

Algo así como este código simbólico:

repeat(5, minmax(max(ancho_celdas_grid1, ancho_celdas_grid2, ancho_celdas_grid3), 1fr))

O en caso de que sepa qué grid será el más ancho:

repeat(5, minmax(ancho_celdas_grid2, 1fr))

Este es un método no automático y bastante parcheado:

let min_width = window.getComputedStyle(grid2.children[0]).width
grid1.style.gridTemplateColumns = `repeat(${grid1_ncols}, minmax(${min_width}, 1fr))`

¿Existe una solución mejor?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución sería utilizar JavaScript para calcular dinámicamente el ancho del elemento más ancho en cada cuadrícula y luego establecerlo como ancho mínimo para todas las columnas en todas las cuadrículas. Aquí tienes un ejemplo:

    const grids = document.querySelectorAll('.grid');
    
    grids.forEach(grid => {
      let maxChildWidth = 0;
    
      // encontrar el elemento hijo más ancho en la cuadrícula
      grid.querySelectorAll('.cell').forEach(cell => {
        const childWidth = cell.getBoundingClientRect().width;
        if (childWidth > maxChildWidth) {
          maxChildWidth = childWidth;
        }
      });
    
      // establecer el ancho mínimo de todas las columnas en la cuadrícula
      grid.style.gridTemplateColumns = `repeat(5, minmax(${maxChildWidth}px, 1fr))`;
    });
    

    Este código selecciona todos los elementos con la clase grid (asumiendo que la has agregado a tu cuadrícula principal y a las cuadrículas secundarias), luego itera sobre cada uno. Para cada cuadrícula, encuentra el elemento hijo más ancho obteniendo su ancho de rectángulo delimitador y establece la variable maxChildWidth en consecuencia.

    Finalmente, establece la propiedad gridTemplateColumns de la cuadrícula para repetir cinco columnas con un ancho mínimo de maxChildWidth píxeles y un ancho máximo de 1fr, asegurando que todas las columnas en todas las cuadrículas sean lo suficientemente anchas como para acomodar el contenido más ancho.

Comments are closed.