Me pregunto cómo haría para crear un diseño con cuadrados receptivos . Cada cuadrado tendría contenido alineado vertical y horizontalmente . El ejemplo específico se muestra a continuación ...
html
css
responsive-design
grid-layout
aspect-ratio
garethdn
fuente
fuente
Respuestas:
Puede crear una cuadrícula de cuadrados receptiva con contenido centrado vertical y horizontalmente solo con CSS . Explicaré cómo en un proceso paso a paso, pero primero aquí hay 2 demostraciones de lo que puede lograr:
¡Ahora veamos cómo hacer estos cuadrados elegantes y sensibles!
1. Hacer los cuadrados receptivos:
El truco para mantener los elementos cuadrados (o cualquier otra relación de aspecto) es usar el porcentaje
padding-bottom
.Nota al margen: también puede usar el relleno superior o el margen superior / inferior, pero el fondo del elemento no se mostrará.
Como el relleno superior se calcula de acuerdo con el ancho del elemento principal ( consulte MDN para referencia ), la altura del elemento cambiará de acuerdo con su ancho. Ahora puede mantener su relación de aspecto según su ancho.
En este punto puedes codificar:
HTML :
CSS
Aquí hay un ejemplo de diseño simple de cuadrícula de 3 * 3 cuadrados usando el código anterior.
Con esta técnica, puede hacer cualquier otra relación de aspecto, aquí hay una tabla que proporciona los valores del relleno inferior de acuerdo con la relación de aspecto y un ancho del 30%.
2. Agregar contenido dentro de los cuadrados
Como no puede agregar contenido directamente dentro de los cuadrados (expandiría su altura y los cuadrados ya no serían cuadrados), debe crear elementos secundarios (para este ejemplo estoy usando divs) dentro de ellos
position: absolute;
y colocar el contenido dentro de ellos . Esto eliminará el contenido del flujo y mantendrá el tamaño del cuadrado.No olvide agregar
position:relative;
los divs principales para que los hijos absolutos se posicionen / dimensionen relativamente a sus padres.Agreguemos algo de contenido a nuestra cuadrícula de cuadrados 3x3:
HTML :
CSS :
RESULTADO <- con algo de formato para hacerlo bonito!
3. Centrando el contenido
Horizontalmente:
Esto es bastante fácil, sólo tiene que añadir
text-align:center
a.content
.RESULTADO
Alineamiento vertical
Esto se vuelve serio! El truco es usar
pero no podemos usar
display:table;
on.square
o.content
divs porque entra en conflicto conposition:absolute;
lo que necesitamos crear dos hijos dentro de.content
divs. Nuestro código se actualizará de la siguiente manera:HTML :
CSS:
Ya hemos terminado y podemos ver el resultado aquí:
RESULTADO EN PANTALLA COMPLETA EN VIVO
violín editable aquí
fuente
* { box-sizing: border-box; }
, deberá ajustar la altura y el ancho en .content div al 100%. :)justify-content: center; align-items: center; flex-flow: column nowrap;
Podría usar unidades vw (ancho de vista), lo que haría que los cuadrados respondan de acuerdo con el ancho de la pantalla.
Una maqueta rápida de esto sería:
fuente
margin-left: -4px;
usomargin-right:-4px
. En su lugar, no se meta con la inconsistencia en mincharspace, sino que se establece en un tamaño de fuente principal de contenedor a 0 y no para los elementos secundarios restablecidos a1rem
(relative-em)La respuesta aceptada es excelente, sin embargo, esto se puede hacer con
flexbox
.Aquí hay un sistema de cuadrícula escrito con sintaxis BEM que permite mostrar de 1 a 10 columnas por fila.
Si la última fila está incompleta (por ejemplo, elige mostrar 5 celdas por fila y hay 7 elementos), los elementos finales se centrarán horizontalmente. Para controlar la alineación horizontal de los elementos finales, simplemente cambie la
justify-content
propiedad debajo de la.square-grid
clase.Mostrar fragmento de código
Fiddle: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
Esto se prueba en FF y Chrome.
fuente
Utilizo esta solución para cajas receptivas de diferentes raciones:
HTML:
CSS:
Ver demo en JSfiddle.net
fuente