La propiedad gap en CSS es una abreviatura de row-gap
y column-gap
, que especifica el tamaño de las canaletas, que es el espacio entre filas y columnas dentro de diseños de cuadrícula, flex y de varias columnas.
/* Grid layout */ .container ( display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 1fr 2fr 1fr; gap: 30px 20px; ) /* Flex layout */ .container ( display: flex; gap: 10%; ) /* Multi-column layout */ .container ( column-count: 5; gap: 20px; )
Utilice el control deslizante de la siguiente demostración para ver la gap
propiedad en acción:
Sintaxis
gap
acepta uno o dos valores:
- Un solo valor establece ambos
row-gap
ycolumn-gap
por el mismo valor. - Cuando se utilizan dos valores, el primero establece el
row-gap
y el segundo establece elcolumn-gap
.
.container ( gap: 1rem; /* Is equivalent to: * row-gap: 1rem; * column-gap: 1rem */ gap: 10px 15%; /* Is equivalent to: * row-gap: 10px; * column-gap: 15%; */ )
La especificación del módulo de diseño de cuadrícula CSS definió el espacio entre las pistas de la cuadrícula utilizando la grid-gap
propiedad. gap
está destinado a reemplazarlo para que las brechas se puedan definir en múltiples métodos de diseño CSS, como flexbox, pero grid-gap
aún debe usarse en casos en los que un navegador puede haber implementado grid-gap
pero aún no ha comenzado a admitir la gap
propiedad más nueva .
Valores
gap
acepta los siguientes valores:
normal
: (Predeterminado) El navegador especificará un valor usado de 1em para el diseño de varias columnas y 0px para todos los demás contextos de diseño (es decir, cuadrícula y flex).: Cualquier longitud CSS válido y no negativo, como
px
,em
,rem
y%
, entre otros.: El tamaño de la brecha como un valor porcentual no negativo en relación con la dimensión del elemento. (Consulte a continuación para obtener más detalles).
initial
: Aplica la configuración predeterminada de la propiedad, que esnormal
.inherit
: Adopta el valor de la brecha del padre.unset
: Elimina la corrientegap
del elemento.
Porcentajes en propiedades de brecha
Cuando el tamaño de un contenedor en la dimensión del espacio es definido, gap
resuelve los porcentajes contra el tamaño del cuadro de contenido del contenedor en cualquier tipo de diseño.
En otras palabras, cuando el navegador conoce el tamaño del contenedor, puede calcular el valor porcentual del gap
. Por ejemplo, cuando la altura del contenedor gap
es de 100 px y se establece en 10%, el navegador sabe que el 10% de 100 px es de 10 px.
Pero cuando el navegador no conoce el tamaño, se preguntará, "¿10% de qué?" En estos casos, se gap
comporta de manera diferente según el tipo de diseño.
En un diseño de cuadrícula, los porcentajes se resuelven contra cero para determinar las contribuciones de tamaño intrínseco, pero se resuelven contra el cuadro de contenido del elemento al diseñar el contenido del cuadro, lo que significa que pondrá espacio entre los elementos, pero el espacio no afecta el tamaño del contenedor.
En esta demostración, la altura del contenedor no está definida. Vea lo que sucede cuando aumenta el gap
tamaño. Luego configure las gap
unidades de píxeles e intente nuevamente:
En un diseño flexible, los porcentajes se resuelven frente a cero en todos los casos, lo que significa que los espacios no se aplicarán cuando el navegador no conozca el tamaño del contenedor:
Usando la función calc () con gap
Puede usar la calc()
función para especificar el tamaño del gap
pero, en el momento de escribir este artículo, no hay soporte para Safari e iOS.
.flex-layout ( display: flex; gap: calc(5vh + 5px) calc(5vw + 5px); )
.grid-layout ( display: grid; grid-template-columns: repeat(3, 1fr); gap: calc(5vmin + 5px); )
Ejemplos
La gap
propiedad está diseñada para su uso en diseños de cuadrícula, flexible y de varias columnas. Veamos algunos ejemplos.
Diseño de cuadrícula
En la siguiente demostración, puede ver cómo gap
se usa para especificar las propiedades row-gap
y column-gap
en un contenedor de cuadrícula, definiendo los medianiles entre las filas de cuadrícula y las columnas de cuadrícula, respectivamente:
Diseño flexible
La aplicación de un espacio al eje principal de un contenedor flexible indica el espacio entre elementos flexibles en una sola línea del diseño flexible.
Aquí se column-gap
usa en una dirección de fila:
Aquí se row-gap
usa en una dirección de columna:
La aplicación gap
al eje transversal de un contenedor flexible indica el espacio entre las líneas flexibles del diseño flexible.
Aquí está row-gap
en una dirección de fila:
Aquí está column-gap
en una dirección de columna:
Diseño de varias columnas
column-gap
aparece en diseños de varias columnas para crear espacios entre los cuadros de columna, pero tenga en cuenta que row-gap
no tiene ningún efecto ya que solo estamos trabajando en columnas. gap
todavía se puede utilizar en este contexto, pero solo column-gap
se aplicará el.
Como puede ver en la siguiente demostración, aunque la gap
propiedad tiene un valor de 2rem, solo separa elementos horizontalmente en lugar de en ambas direcciones, ya que estamos trabajando en columnas:
Cuanto más sepa ...
Hay un par de cosas que vale la pena mencionar acerca de trabajar con la gap
propiedad.
Es una buena forma de evitar espacios no deseados
¿Alguna vez ha utilizado márgenes para crear espacios entre elementos? Si no tenemos cuidado, podemos terminar con un espacio adicional antes y después del grupo de elementos.
Resolver eso generalmente requiere agregar márgenes negativos o recurrir a pseudo-selectores para eliminar el margen de elementos específicos. Pero lo bueno de usar gap
en métodos de diseño más modernos es que solo tiene espacio entre elementos. ¡El impulso adicional al principio y al final nunca es un problema!
Pero, oye, si quieres tener espacio alrededor de los elementos mientras los usas gap
, colócalo padding
alrededor del contenedor así:
.container ( display: flex; gap: 1rem; padding: 1rem; )
El tamaño de la canaleta no siempre es igual al valor de la brecha
La gap
propiedad no es lo único que puede poner espacio entre elementos. Los márgenes, los rellenos justify-content
y align-content
también pueden aumentar el tamaño de la canaleta y afectar el gap
valor real .
En el siguiente ejemplo, estamos configurando un 1em gap
pero, como puede ver, hay mucho más espacio entre los elementos, causado por el uso de alineaciones distribuidas, como justify-content
y align-content
:
Soporte de navegador
Las consultas de características suelen ser una buena forma de verificar si un navegador admite una propiedad específica, pero en este caso, si verifica la gap
propiedad en flexbox, puede obtener un falso positivo porque una consulta de características no distinguirá entre los modos de diseño. En otras palabras, podría ser compatible con un diseño flexible que da como resultado un resultado positivo, pero en realidad no es compatible si se usa en un diseño de cuadrícula.
Diseño de cuadrícula
ES DECIR | Borde | Firefox | Cromo | Safari | Ópera |
---|---|---|---|---|---|
No | 16+ | 61+ | 66+ | 12+ | 53+ |
Safari de iOS | Opera Mobile | Navegador de Android | Chrome para Android | Firefox para Android |
---|---|---|---|---|
12+ | No | 81+ | 84+ | 68+ |
Diseño de cuadrícula con valores calc ()
ES DECIR | Borde | Firefox | Cromo | Safari | Ópera |
---|---|---|---|---|---|
No | 84+ | 79+ | 84+ | No | 69+ |
Safari de iOS | Opera Mobile | Navegador de Android | Chrome para Android | Firefox para Android |
---|---|---|---|---|
No | No | 81+ | 84+ | 68+ |
Diseño de cuadrícula con valor porcentual
ES DECIR | Borde | Firefox | Cromo | Safari | Ópera |
---|---|---|---|---|---|
No | 84+ | 79+ | 84+ | No | 69+ |
Safari de iOS | Opera Mobile | Navegador de Android | Chrome para Android | Firefox para Android |
---|---|---|---|---|
No | No | 81+ | 84+ | 68+ |
Diseño flexible
La especificación para usar gap
con flexbox se encuentra actualmente en estado de borrador de trabajo.
Estos datos de soporte del navegador son de Caniuse, que tiene más detalles. Un número indica que el navegador admite la función en esa versión en adelante.
Escritorio
Cromo | Firefox | ES DECIR | Borde | Safari |
---|---|---|---|---|
84 | 63 | No | 84 | TP |
Móvil / Tablet
Android Chrome | Android Firefox | Androide | Safari de iOS |
---|---|---|---|
88 | 85 | No | No |
Diseño de varias columnas
ES DECIR | Borde | Firefox | Cromo | Safari | Ópera |
---|---|---|---|---|---|
No | 84+ | 79+ | 84+ | No | 69+ |
Safari de iOS | Opera Mobile | Navegador de Android | Chrome para Android | Firefox para Android |
---|---|---|---|---|
No | No | 81+ | 84+ | 68+ |
Más información
- Módulo de alineación de cajas CSS, nivel 3
- Chromium aterriza en la brecha de Flexbox (boleto # 761904)
- Estado de la función CSS de WebKit
Relacionado
- Diseño de cuadrícula
- Diseño de caja flexible
- Diseño de varias columnas