CSS - Hacer una tabla responsive

 
Vista:
Imágen de perfil de Adolfo

Hacer una tabla responsive

Publicado por Adolfo (18 intervenciones) el 22/11/2022 07:52:23
Buenas de nuevo amigos;

Tenía una tabla para mi web con la información de las cookies pero me di cuenta que no tenía un diseño responsive y cuando la veía desde mi móvil, la tabla hacía que el diseño se saliera del body quedando feo.

Pensé que podría ser una buena oportunidad para probar con una grid, y llegé a la conclusión que la mejor opción, además era trabajar con áreas.

Para ello, tenía este código html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="pic_caption">
   <div class="minicms116_table">
       <div class="thead"><b>Cookie</b></div>
       <div class="thead"><b>Propietario</b></div>
       <div class="thead"><b>Duración</b></div>
       <div class="thead"><b>Finalidad</b></div>
       <div class="thead"><b>Tipo</b></div>
       <div class="tbody"><i>Coppermine</i></div>
       <div class="tbody"><i>www.miweb.es</i></div>
       <div class="tbody"><i>30 Días</i></div>
       <div class="tbody"><i>Información para permitir la funcionalidad del sitio web</i></div>
       <div class="tbody"><i>Propia</i></div>
  </div>
</div>

y ésta era la parte de css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.pic_caption .minicms116_table {
    display:grid;
    column-gap: 2px;
    grid-template-columns: 1fr 1fr 1fr 2fr 1fr;
    grid-template-areas: "thead thead thead thead thead"
                         "tbody tbody tbody tbody tbody";
    justify-items: stretch;
    text-align: center;
    border: 2px solid var(--color_destacado);
    background: var(--color_destacado);
}
 
.pic_caption .minicms116_table .thead {
    background-color: var(--color_destacado);
    color:#f5f5f5;
    display: flex;
    justify-content: center;
    align-items: center;
}
 
.pic_caption .minicms116_table .tbody {
    background-color: #f5f5f5;
    color: var(--color_destacado);
    padding: 5px;
    display: flex;
    justify-content: center;
    align-items: center;
}

Podemos ver que son 2 filas y 5 columnas.

Para la parte responsive pretendía que por debajo de los 619px la tabla solo tuviera una columna y cada celda ocupara todo el ancho posible, para ello pensé en esta manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@media (max-width: 619px) {
 
.pic_caption .minicms116_table {
    display:grid;
    column-gap: 2px;
    grid-template-columns: 1fr;
    grid-template-areas: "thead"
                                           "tbody"
			                   "thead"
			                   "tbody"
			                   "thead"
			                   "tbody"
			                   "thead"
			                   "tbody"
			                   "thead"
			                   "tbody";
	}
}

Pero obviamente debo estar haciéndolo mal porque no funciona. Imagino que no es posible pasar de 5 columnas a 1 de esta forma, la grid no debe admitir modificar esta estructura de manera responsive pero no he localizado información de nada que diga ésto, he dado por hecho que se podría hacer así.

Qué hago mal?, hay otro modo de hacerlo?. El resultado debería quedar de esa manera organizada para que cada "thead" corresponda con su "tbody" debajo de ella.

gracias anticipadas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Adolfo

Hacer una tabla responsive

Publicado por Adolfo (18 intervenciones) el 22/11/2022 19:43:33
Me contesto a mí mismo que, finalmente, encontré la solución. Ciertamente, veo que se puede cambiar perfectamente la estructura de una grid reduciendo el número de columnas de manera responsive. Por lo que veo, no me funcionaba más que nada porque las áreas definidas para la parte responsive no se podían alternar como yo esperaba (iluso de mí, pensé que era como si fueran casillas de Excel, donde yo coloco el área donde quiero y allí se coloca el texto correspondiente, por orden).

Finalmente, al final hay que recapacitar y buscar otro camino, aunque quizás sea algo más largo. Cambié la idea de hacer la tabla basándola en columnas y la rehice en función de las filas. El problema aquí sería el orden, así que no tuve más remedio que editar el html y alternar los elementos, tal que así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="pic_caption">
    <div class="minicms116_table">
        <div class="thead"><b>Cookie</b></div>
        <div class="tbody"><i>Coppermine</i></div>
        <div class="thead"><b>Propietario</b></div>
        <div class="tbody"><i>www.miweb.es</i></div>
        <div class="thead"><b>Duraci&oacute;n</b></div>
        <div class="tbody"><i>30 D&iacute;as</i></div>
        <div class="thead"><b>Finalidad</b></div>
        <div class="tbody"><i>Informaci&oacute;n para permitir la funcionalidad del sitio web</i></div>
        <div class="thead"><b>Tipo</b></div>
        <div class="tbody"><i>Propia</i></div>
    </div>
</div>

Luego en CSS, cambié la grid así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.pic_caption .minicms116_table {
    display:grid;
    column-gap: 2px;
    grid-template-rows: 1fr 1fr;
	grid-auto-flow: column;
    justify-items: stretch;
    text-align: center;
    border: 2px solid var(--color_destacado);
    background: var(--color_destacado);
}
 
.pic_caption .minicms116_table .thead {
    background-color: var(--color_destacado);
    color:#f5f5f5;
    display: flex;
    justify-content: center;
    align-items: center;
	padding: 10px 0 10px 0;
}
 
.pic_caption .minicms116_table .tbody {
    background-color: #f5f5f5;
    color: var(--color_destacado);
    padding: 5px;
    margin: 0px;
    display: flex;
    justify-content: center;
    align-items: center;

El resultado era idéntico pero ahora podría trabajar mejor sobre la parte responsive, lo dejé así:

1
2
3
4
5
6
7
8
@media (max-width: 619px) {
 
	.pic_caption .minicms116_table {
 
		grid-template-columns: 1fr;
		grid-auto-flow: row;
	}
}

Finalmente ha quedado como esperaba:

Captura1

Y la parte responsive queda así:

Captura2

Igual hay otra forma más sencilla, pero yo he conseguido esa :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar