Si varios elementos de una página web se encuentran cerca uno del otro, los usuarios tienen la sensación de que estos elementos tienen algo en común. La agrupación de elementos ayuda al usuario a comprender su relación al evaluar la distancia entre ellos. Si todos los elementos estuvieran ubicados a la misma distancia entre sí, sería difícil para el usuario navegar a través de la página para descubrir cuáles están relacionados entre sí y cuáles no. Este artículo está dedicado a todo lo que necesita saber sobre cómo establecer distancias entre elementos y sobre cómo configurar espacios internos de elementos. En particular, hablaremos sobre en qué situaciones vale la pena usar relleno interno y en qué - externo (margen).
Tipos de distancia CSS
Las distancias entre los elementos y sus partes, personalizables por CSS, son de dos tipos. Ellos, en relación con el elemento, se dividen en internos y externos. Imagina que tenemos un elemento. Si dentro de ella hay una cierta distancia entre algunas de sus partes, entonces esta es una sangría interna. Si hablamos de la distancia entre los elementos individuales, esta es la sangría externa.Espacio interior y espacio exteriorEn CSS, la distancia entre elementos y sus componentes se puede ajustar de la siguiente manera:.element {
padding: 1rem;
margin-bottom: 1rem;
}
La propiedad se padding
usa aquí para ajustar la sangría, y la propiedad margin
se usa para configurar la sangría. Todo es muy simple. ¿Verdad? Pero ajustar distancias en CSS puede ser muy complicado si trabaja con componentes que tienen muchas partes pequeñas y elementos secundarios.▍ Propiedad de margen - Sangría
La propiedad se margin
utiliza para establecer la distancia entre elementos individuales. Por ejemplo, el ejemplo anterior utilizó la propiedad CSS margin-bottom: 1rem
para agregar la distancia vertical entre dos elementos ubicados uno encima del otro.La sangría externa se puede configurar para cuatro lados de un elemento (superior, derecha, inferior, izquierda - superior, derecha, inferior, izquierda). Por lo tanto, antes de pasar a ejemplos y discusiones sobre diferentes formas de establecer distancias, es importante arrojar luz sobre algunos conceptos básicos.▍ Contraer el acolchado exterior
Si describimos el concepto de "colapso de los márgenes externos" en palabras simples, entonces podemos decir que esto sucede si dos elementos ubicados uno encima del otro tienen márgenes externos, y la sangría de uno de ellos es mayor que la sangría del otro. En este caso, se usará una sangría más grande y se ignorará la más pequeña.La sangría mayor gana.En el diagrama anterior, la propiedad se configura en el elemento superior y la propiedadmargin-bottom
en el inferiormargin-top
. La distancia vertical entre los elementos corresponde al mayor de estos guiones.Para evitar este problema, se recomienda configurar la misma sangría en todos los elementos (como se describe aquí ). Y aquí hay otro hecho interesante. El recurso CSS Tricks votó sobre el uso de propiedadesmargin-bottom
ymargin-top
. Al final resultó que, la propiedadmargin-bottom
ganó, obteniendo el 61% de los votos.Aquí se explica cómo resolver este problema:.element:not(:last-child) {
margin-bottom: 1rem;
}
El uso de un selector CSS :not
facilita la eliminación de la sangría externa del último elemento secundario para eliminar el espacio innecesario entre los elementos.→ Aquí hay una demostración de cómo trabajar con márgenes externos.Otro ejemplo relacionado con el colapso de los márgenes externos está relacionado con los elementos secundarios y primarios. Supongamos que tiene el siguiente HTML:<div class="parent">
<div class="child">I'm the child element</div>
</div>
Aquí están sus estilos:.parent {
margin: 50px auto 0 auto;
width: 400px;
height: 120px;
}
.child {
margin: 50px 0;
}
Así es como se ve el resultado de visualizar todo esto.Niño y padreTenga en cuenta que el niño se apoya contra la parte superior del padre. Este es el resultado del colapso de sus márgenes exteriores. Según el W3C , hay varias opciones para resolver este problema:- Agregar una propiedad
border
al elemento padre. - Establecer la propiedad de un
display
elemento hijo en un valor inline-block
.
Una solución más comprensible a este problema sería establecer la propiedad del padding-top
elemento padre.Establecer la sangría superior del elemento padre▍ Sangría negativa
Se puede usar un valor negativo para cualquier sangría externa. En algunos casos, esta técnica es muy útil. Echa un vistazo a la siguiente figura.Resultados de establecer la propiedad de relleno del elementoprimario El elemento primario tiene una propiedadpadding: 1rem
. Esto hace que el niño tenga desplazamientos desde la parte superior, izquierda y derecha. Pero el niño debe estar adyacente a los bordes del padre. Los márgenes externos negativos ayudarán a lograr esto..parent {
padding: 1rem
}
.child {
margin-left: -1rem;
margin-right: -1rem;
margin-top: -1rem;
}
Eso es lo que sucedió como resultado de tal estilización.Los márgenes externos negativos del niño ayudan a lograr el efecto deseado→ Aquí hay una demostraciónSi está interesado en el tema de los márgenes externos negativos, le recomiendo este artículo.▍ Propiedad de relleno - relleno interno
Como ya se mencionó, la propiedad le padding
permite controlar el espacio dentro del elemento. El propósito de aplicar esta propiedad depende de la situación en la que se use.Por ejemplo, se puede usar para aumentar el espacio alrededor de los enlaces. Esto conduce a un aumento en el espacio de enlace en el que se puede hacer clic .Sangrado en verde▍ Situaciones en las que la propiedad de relleno no funciona
Es importante tener en cuenta que la sangría vertical no funciona con elementos que tienen una propiedad display: inline
. Por ejemplo, estos son elementos <span>
y <a>
. Si configura la propiedad de padding
dicho elemento, dicha configuración en este elemento no funcionará. Este es solo un recordatorio amigable de que los elementos en línea deben cambiar una propiedad display
:.element span {
display: inline-block;
padding-top: 1rem;
padding-bottom: 1rem;
}
Espacio entre elementos de diseño de cuadrícula CSS
En la cuadrícula CSS, puede ajustar fácilmente la distancia entre columnas y filas utilizando la propiedad grid-gap
. Esta es una abreviatura de una propiedad que define la distancia entre columnas y filas.Distancias entre columnas y filas..element {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 16px;
}
Un registro completo de estas propiedades se ve así:.element {
display: grid;
grid-template-columns: 1fr 1fr;
grid-row-gap: 24px;
grid-column-gap: 16px;
}
El espacio entre elementos CSS de un diseño de Flexbox
Se sugiere una propiedad para los diseños de cuadrícula y flexbox. Esta es una propiedad gap
. Actualmente, solo Firefox lo admite ..element {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
Además, esta propiedad no se puede usar con CSS @supports
para determinar si es compatible y para tomar las decisiones adecuadas en función de esto. Si le gusta esta propiedad, vote para agregarla a Chrome.Elementos de posicionamiento en CSS
Quizás el posicionamiento de los elementos no puede atribuirse directamente a las formas de ajustar la distancia entre ellos, pero en algunos casos, el posicionamiento juega un papel importante. Por ejemplo, si hay un elemento secundario en una posición absoluta que necesita ubicarse en 16px
los bordes izquierdo y superior del elemento primario.Considere el siguiente ejemplo. Hay una tarjeta en la que hay un icono que debe colocarse a cierta distancia de los bordes superior e izquierdo del elemento principal. Para lograr este efecto, puede usar el siguiente estilo:.category {
position: absolute;
left: 16px;
top: 16px;
}
La distancia entre los límites de los elementos primarios y secundarios se resalta en verde.Escenarios de uso y estudios de casos
En esta sección, veremos escenarios para usar medios para ajustar distancias entre elementos. Algo similar puede surgir en su trabajo diario con CSS.▍ Componente de encabezado
Un componente es un encabezado que tiene la siguiente configuración: sangría izquierda y derecha, espacio alrededor del logotipo, espacio alrededor del elemento de navegación, distancia entre el elemento de navegación y el nombre de usuarioEn este caso, el componente del encabezado tiene un logotipo, un área de navegación y un área en la que se muestra información sobre el perfil del usuario. ¿Puedes adivinar cómo debería ser el código de estilización de tal elemento? Aquí, para facilitarlo, un marcado esquemático de dicho elemento:<header class="c-header">
<h1 class="c-logo"><a href="#">Logo</a></h1>
<div class="c-header__nav">
<nav class="c-nav">
<ul>
<li><a href="#">...</a></li>
</ul>
</nav>
<a href="#" class="c-user">
<span>Ahmad</span>
<img class="c-avatar" src="shadeed.jpg" alt="">
</a>
</div>
</header>
Márgenes internos y externosSe utilizan márgenes izquierdo y derecho. Su propósito es asegurar que el contenido del encabezado no se adhiera a sus bordes..c-header {
padding-left: 16px;
padding-right: 16px;
}
Al configurar enlaces de navegación, se debe tener en cuenta el hecho de que cada uno de ellos debe tener suficiente espacio interno tanto vertical como horizontalmente. Debido a esto, su área de clic será lo suficientemente grande, lo que mejorará la accesibilidad del proyecto..c-nav a {
display: block;
padding: 16px 8px;
}
Si hablamos de la distancia entre los elementos, puede usar la propiedad margin
o puede cambiar la propiedad de los display
elementos <li>
a inline-block
. Debido a esto, se agrega un pequeño espacio entre los elementos que se encuentran en el mismo nivel, debido al hecho de que dichos elementos se consideran símbolos..c-nav li {
display: inline-block;
}
Finalmente, el nombre de usuario y el avatar tienen una sangría externa izquierda..c-user img,
.c-user span {
margin-left: 10px;
}
Tenga en cuenta que si está creando un sitio web multilingüe, se recomienda utilizar propiedades lógicas de CSS en esta situación :.c-user img,
.c-user span {
margin-inline-start: 1rem;
}
Las distancias antes y después del separador no son las mismas.Tenga en cuenta que las distancias antes y después del separador no son las mismas. La razón de esto es que el ancho del bloque de navegación no está establecido. En cambio, aquí solo se configuran las sangrías internas. Como resultado, el ancho de los elementos de navegación depende de su contenido. Aquí hay soluciones a este problema:- Establecer el ancho mínimo para los elementos de navegación.
- Aumenta la sangría horizontal.
- Agrega una sangría adicional en el lado izquierdo del separador.
La forma mejor y más fácil es usar el tercer método, que es configurar la propiedad margin-left
:.c-user {
margin-left: 8px;
}
→ Aquí hay una demostración▍ Distancias en diseños de cuadrícula - CSS Flexbox
Los diseños de cuadrícula son el lugar donde a menudo se utilizan tecnologías para ajustar la distancia entre elementos. Considere el siguiente ejemplo.Diseño de cuadrículaNecesitamos ajustar la distancia entre las filas y columnas de la tabla. Aquí está el marcado:<div class="wrapper">
<div class="grid grid--4">
<div class="grid__item">
<article class="card"><!-- --></article>
</div>
<div class="grid__item">
<article class="card"><!-- --></article>
</div>
<!-- .. -->
</div>
</div>
Por lo general, prefiero mantener los componentes en un estado encapsulado y evitar configurar sus sangrías externas. Por esta razón, tengo un elemento grid_item
en el que se ubicará el elemento de la tarjeta..grid--4 {
display: flex;
flex-wrap: wrap;
}
.grid__item {
flex-basis: 25%;
margin-bottom: 16px;
}
Gracias a este código CSS, habrá cuatro tarjetas en cada línea. Aquí hay una forma posible de ajustar la distancia entre ellos:.grid__item {
flex-basis: calc(25% - 10px);
margin-left: 10px;
margin-bottom: 16px;
}
Al usar la función CSS, calc()
se resta la sangría flex-basis
. Como puede ver, esta no es una solución tan simple. De hecho, prefiero lo siguiente:- Establezca la propiedad del elemento de cuadrícula
padding-left
. - Configure el elemento padre para que tenga un margen externo negativo
margin-left
con el mismo valor que y padding-left
.
Aprendí acerca de este método hace muchos años, después de leer aquí un artículo, cuyo nombre ya se ha olvidado (si sabe qué tipo de artículo, por favor hágamelo saber)..grid--4 {
display: flex;
flex-wrap: wrap;
margin-left: -10px;
}
.grid__item {
flex-basis: 25%;
padding-left: 10px;
margin-bottom: 16px;
}
La razón por la que usé un valor negativo aquí margin-left
es porque la primera tarjeta tiene una propiedad padding-left
que, en realidad, no es necesaria. Como resultado, muevo el elemento contenedor hacia la izquierda y elimino el espacio innecesario.→ Aquí hay un ejemplo de trabajo:otra idea similar es usar sangría y sangría negativa. Aquí hay un ejemplo del sitio de Facebook.Márgenes internos y externosAquí está el código CSS que ilustra esta idea:.wrapper {
margin-left: -4px;
margin-right: -4px;
}
.story {
padding-left: 4px;
padding-right: 4px;
}
▍Distancia en diseños de cuadrícula - CSS Grid
Y ahora, ¡la mejor parte! En los diseños basados en la cuadrícula CSS, la distancia entre elementos es muy conveniente para ajustar usando la propiedad grid-gap
. Además, no puede preocuparse por el ancho de los elementos y los bordes externos inferiores. El diseño de cuadrícula CSS se encarga de todo esto..grid--4 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 1rem;
}
Eso es todo. Creo que nadie argumentará que configurar diseños de cuadrícula es más fácil y más comprensible que configurar diseños de Flexbox.▍ Establecer distancia entre elementos solo cuando sea necesario
En los diseños de cuadrícula, me gusta mucho el hecho de que la propiedad grid-gap
se aplica solo cuando debe haber cierta distancia entre los elementos. Eche un vistazo al siguiente diseño.El diseño de la cuadrícula en el que los elementos en el entorno móvil están dispuestos verticalmente y en el escritorio, horizontalmente,hay una sección del sitio con dos tarjetas. Necesito que se separen tanto en un entorno móvil, con una disposición vertical de tarjetas, como en un escritorio, con su disposición horizontal. Sin CSS Grid, tal flexibilidad de diseño es imposible de lograr. Echa un vistazo al siguiente código:.card:not(:last-child) {
margin-bottom: 16px;
}
@media (min-width: 700px) {
.card:not(:last-child) {
margin-bottom: 0;
margin-left: 1rem;
}
}
No muy conveniente ¿Verdad? ¿Qué pasa con el próximo estilo?.card-wrapper {
display: grid;
grid-template-columns: 1fr;
grid-gap: 1rem;
}
@media (min-width: 700px) {
.card-wrapper {
grid-template-columns: 1fr 1fr;
}
}
¡Se hace! Y todo es mucho más simple.▍Trabajar con sangría externa inferior
Supongamos que tenemos los siguientes componentes ubicados uno encima del otro. Cada uno de ellos tiene una sangría externa más baja.Un conjunto de componentes dispuestos horizontalmenteTenga en cuenta que hay un margen exterior inferior para el último elemento. Y esto está mal, ya que las sangrías deben estar presentes solo entre elementos.Puede solucionar este problema recurriendo a una de las soluciones que ahora analizaremos.Solución # 1: selector CSS: no
.element:not(:last-child) {
margin-bottom: 16px;
}
Solución No. 2: una combinación de elementos vecinos del mismo nivel.
.element + .element {
margin-top: 16px;
}
Análisis de decisión
Aunque la solución # 1 parece más atractiva, tiene las siguientes desventajas:- Conduce a problemas específicos de CSS. No se puede redefinir hasta que se use un selector
:not
. - No se aplica cuando hay más de una columna de elementos. Esto se ilustra a continuación.
Dos columnas de elementos y el problema de la solución No. 1Si hablamos de la solución No. 2, su aplicación no genera problemas de especificidad. Es cierto que esta solución también es adecuada solo en aquellos casos en que se trata de una sola columna de elementos.En esta situación, es mejor recurrir a la decisión de eliminar el espacio innecesario agregando una sangría externa negativa al elemento padre:.wrapper {
margin-bottom: -16px;
}
Aquí sucede lo siguiente. Gracias a esta configuración, el elemento se desplaza hacia abajo una distancia igual a la sangría externa especificada. Pero aquí debe tener cuidado de no establecer una sangría externa cuando utilice elementos que se superpongan.▍ Tarjeta de componente
Ahora quiero discutir en detalle la configuración de las tarjetas de componentes. Quizás al final obtenga un libro completo al respecto. Aquí consideraré un patrón universal para configurar tarjetas y hablaré sobre cómo administrarlas.Tarjeta de componentes (si tiene ganas de comer, lo siento)Piense en dónde exactamente en esta tarjeta se usa la distancia entre los elementos y sus partes. Aquí está mi respuesta a esta pregunta.Márgenes internos y externosAquí está el marcado:<article class="card">
<a href="#">
<div class="card__thumb"><img src="food.jpg" alt=""></div>
<div class="card__content">
<h3 class="card__title">Cinnamon Rolls</font></h3>
<p class="card__author">Chef Ahmad</p>
<div class="card__rating"><span>4.9</span></div>
<div class="card__meta"></div>
</div>
</a>
</article>
Aquí está el estilo de clase card__content
:.card__content {
padding: 10px;
}
Gracias a la sangría establecida aquí, se establecerá el desplazamiento para todos los niños. Luego configure los márgenes exteriores:.card__title,
.card__author,
.card__rating {
margin-bottom: 10px;
}
Al configurar la separación de calificación e información, utilicé el borde:.card__meta {
padding-top: 10px;
border-top: 1px solid #e9e9e9;
}
¡Pero aquí nos enfrentamos a un problema! El borde no está atado a los bordes, lo que se debe a la card__content
sangría del elemento padre con la clase .El separador no está atado al borde.Quizás, ya haya adivinado que las sangrías negativas nos ayudarán aquí:.card__meta {
padding-top: 10px;
border-top: 1px solid #e9e9e9;
margin: 0 -10px;
}
Pero aquí nuevamente, algo salió mal. Ahora el texto se ha pegado al borde de la tarjeta.El separador es normal, pero el contenido de la tarjeta no está ubicado correctamente.Para resolver este problema, debe configurar las sangrías izquierda y derecha para el contenido de la tarjeta..card__meta {
padding: 10px 10px 0 10px;
border-top: 1px solid #e9e9e9;
margin: 0 -10px;
}
La tarjeta está configurada como debería→ Aquí hay un ejemplo▍ Contenido de artículos
Estoy seguro de que de lo que vamos a hablar aquí es una situación muy, muy común. El punto aquí es que el contenido de los artículos generalmente va a páginas de CMS (Sistema de gestión de contenido - sistema de gestión de contenido), o se genera automáticamente en función de los archivos Markdown. No puede especificar clases de elementos aquí.Considere el siguiente ejemplo, que muestra marcas que contienen una mezcla de encabezados, párrafos e imágenes.<div class="wrapper">
<h1>Spacing Elements in CSS</h1>
<p></p>
<h2><font color="#3AC1EF">Types of Spacing</font></h2>
<img src="spacing-1.png" alt="">
<p></p>
<p></p>
<h2><font color="#3AC1EF">Use Cases</font></h2>
<p></p>
<h3><font color="#3AC1EF">▍Card Component</font></h3>
<img src="use-case-card-2.png" alt="">
</div>
Para que todo tenga una apariencia decente, las distancias entre los elementos deben ser uniformes y deben usarse de manera responsable. Mientras trabajaba en este ejemplo, tomé prestados algunos estilos de type-scale.com .h1, h2, h3, h4, h5 {
margin: 2.75rem 0 1.05rem;
}
h1 {
margin-top: 0;
}
img {
margin-bottom: 0.5rem;
}
Aquí hay un diagrama de la página con el texto del artículo.Diseño de página y aplicación de las propiedades margen superior e margen inferiorSi un elemento va<p>
seguido de un encabezado, por ejemplo, un encabezadoTypes of Spacing
,se ignorarála propiedad delmargin-bottom
elemento<p>
. Esto, como puedes adivinar, es una consecuencia del colapso de los márgenes exteriores.→ Aquí hay un ejemplo▍ Sangría externa, según corresponda
Eche un vistazo al siguiente diseño.Elementos en condiciones normales y en una situación defalta de espacio Los elementos no se ven muy bien cuando están demasiado cerca uno del otro. Creé este diseño usando Flexbox. Esta técnica se llama "Ajuste de desplazamiento de alineación". Descubrí su nombre desde aquí ..element {
display: flex;
flex-wrap: wrap;
}
Como resultado de aplicar esta técnica, el ajuste de línea se realiza si el área de visualización es inferior a un cierto límite. Así es como se ve.Los elementos secundarios están en nuevas líneas.Aquí debe lidiar con una situación intermedia en la que dos elementos todavía están uno al lado del otro, pero la distancia entre ellos es cero. En este caso, prefiero recurrir a la propiedadmargin-right
, que evita que los elementos se toquen entre sí y acelera la respuestaflex-wrap
.Los elementos no se tocan▍ Modo de escritura de propiedad CSS
Primero citamos MDN : "La propiedad writing-mode
establece la posición horizontal o vertical del texto, así como la dirección del bloque".¿Alguna vez ha pensado en cómo deben comportarse las sangrías externas cuando se usan con un elemento cuya propiedad writing-mode
es diferente del estándar? Considere el siguiente ejemplo.Tarjeta con un encabezado vertical.Aquí están los estilos:.wrapper {
display: flex;
}
.title {
writing-mode: vertical-lr;
margin-right: 16px;
}
El encabezado se gira 90 grados. Debe haber un espacio vacío entre este y la imagen. Al final resultó que, la propiedad se margin-right
muestra perfectamente con diferentes valores de la propiedad writing-mode
.→ Aquí hay un ejemplo: creo que hemos cubierto suficientes escenarios de sangría. Ahora considere algunos conceptos interesantes.Encapsulación de componentes
Los grandes sistemas de diseño contienen muchos componentes. ¿Será lógico ajustar sus márgenes exteriores?Considere el siguiente ejemplo.Botones<button class="button">Save Changes</button>
<button class="button button-outline">Discard</button>
¿Dónde necesito ajustar la distancia entre los botones? ¿Necesito configurar algunas propiedades del botón izquierdo o derecho? ¿Quizás pueda usar una combinación de elementos vecinos del mismo nivel?.button + .button {
margin-left: 1rem;
}
No hay nada bueno al respecto. ¿Qué pasa si solo hay un botón? ¿Y cómo funcionará en un dispositivo móvil, en el caso de que los botones estén ubicados verticalmente y no horizontalmente? En general, aquí nos enfrentamos a muchas preguntas difíciles.▍Uso de componentes abstraídos
La solución a los problemas anteriores es el uso de componentes abstraídos, que se utilizan para colocar otros componentes en ellos. Esto, como se dijo aquí , es un poco un cambio en la responsabilidad de administrar el relleno al elemento padre. Repensamos el ejemplo anterior a la luz de esta idea.Componentes primarios y secundarios<div class="list">
<div class="list__item">
<button class="button">Save Changes</button>
</div>
<div class="list__item">
<button class="button button-outline">Discard</button>
</div>
</div>
Tenga en cuenta que hay elementos de envoltura. Cada botón tiene su propio envoltorio..list {
display: flex;
align-items: center;
margin-left: -1rem;
}
.list__item {
margin-left: 1rem;
}
¡Eso es todo! Y lo que es más, este concepto es fácil de aplicar a cualquier marco de JavaScript. Por ejemplo:<List>
<Button>Save Changes</Button>
<Button outline>Discard</Button>
</List>
Y la herramienta JS utilizada debe colocar cada elemento en su propio contenedor.Componentes utilizados como separadores
Si duda de leer el encabezado correctamente, no lo dude. Estamos hablando de componentes utilizados como separadores. En particular, aquí me refiero a este artículo, que analiza el concepto que evita el uso de sangría y utiliza componentes separadores en su lugar.Imagine que en una determinada sección del sitio necesita una sangría externa izquierda de tamaño 24px
. Al mismo tiempo, los siguientes requisitos se proponen para la sangría:- La sangría externa no debe configurarse directamente en el componente, ya que forma parte de un sistema de diseño ya creado.
- La sangría debe ser flexible. En una página puede tener un tamaño
X
, y en la otra, un tamaño Y
.
Primero noté este truco mientras exploraba el nuevo diseño de Facebook .Elemento separador de diseño de FacebookAquí se utiliza como elemento separador<div>
con un estilo en líneawidth: 16px
. Su único propósito es agregar espacio vacío entre el elemento izquierdo y el elemento contenedor.Aquí hay una cita de este manual de capacitación de React: “Pero en el mundo real, necesitamos espacios definidos fuera de los componentes para organizar los componentes en páginas y escenas. Es aquí donde la configuración de la sangría externa se abre paso en el código del componente para ajustar las distancias entre los componentes cuando se ensamblan ”.Estoy de acuerdo con eso. En un sistema de diseño grande, agregar sangría a los componentes será irracional. Esto dará como resultado un código no tan atractivo.▍ Problemas del componente separador
Ahora que se ha familiarizado con la idea de componentes separadores, hablemos sobre algunos de los problemas que se espera que ocurran al trabajar con ellos. Estas son las preguntas en las que he estado pensando:- ¿Cómo un componente separador ocupa espacio en un componente padre? ¿Cómo se comporta en diseños horizontales y verticales? Por ejemplo, ¿cómo separaría un componente tales componentes vertical y horizontalmente?
- ¿Necesito
display
diseñar estos componentes en función de la propiedad del componente principal (Flexbox, Grid)?
Examinemos estas preguntas.▍ Tamaños de componentes separadores
Puede crear un componente separador que acepte varios parámetros. No soy un desarrollador de JavaScript, pero creo que esto es lo que se llama "accesorios". Considere el siguiente ejemplo, tomado de aquí .Hay un componente separador ubicado entre Header
y Section
.<Header />
<Spacer mb={4} />
<Section />
Y aquí hay una situación ligeramente diferente. Aquí, el separador se utiliza para crear una distancia ajustable automáticamente entre el logotipo (componente Logo
) y el área de navegación representada por los componentes Link
.<Flex>
<Logo />
<Spacer m="auto" />
<Link>Beep</Link>
<Link>Boop</Link>
</Flex>
Puede parecer que implementar dicho separador usando CSS es muy simple, y que es suficiente para usar el diseño justify-content: space-between
. Pero, ¿qué pasa si necesitas cambiar el diseño? En este caso, debe cambiar la estilización.Eche un vistazo al siguiente ejemplo. ¿Este código parece flexible?<Flex>
<Logo />
<Link>Beep</Link>
<Link>Boop</Link>
<Spacer m="auto" />
<Link>Boop</Link>
</Flex>
En este caso, la estilización necesita ser cambiada.En términos de tamaño, podemos decir que el tamaño del separador se puede ajustar en función del tamaño del elemento padre. En el caso anterior, puede tener sentido crear una propiedad grow
establecida en un valor en CSS flex-grow: 1
.<Flex>
<Spacer grow="1" />
</Flex>
▍Uso de pseudoelementos
Otra idea que se me ocurrió es usar pseudoelementos para crear separadores..element:after {
content: "";
display: block;
height: 32px;
}
¿Quizás tengamos la oportunidad de hacer que un pseudo-elemento sea un separador y no usar un elemento separado para esto? Por ejemplo:<Header spacer="below" type="pseudo" length="32">
<Logo />
<Link>Home</Link>
<Link>About</Link>
<Link>Contact</Link>
</Header>
Hasta ahora, no he usado componentes separadores en mis proyectos. Pero estoy buscando escenarios en los que puedan ser útiles para mí.Funciones matemáticas CSS min (), max (), clamp ()
¿Puede la sangría ser dinámica? Por ejemplo, ¿es posible usar tal sangría, cuyo tamaño mínimo y máximo depende del ancho del área de visualización? Puedo responder esta pregunta positivamente. Las funciones CSS, de acuerdo con los datos de CanIUse , son compatibles con todos los principales navegadores.Recuerde los diseños de cuadrícula y hable sobre cómo se puede usar la sangría dinámica en ellos..wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: min(2vmax, 32px);
}
Construcción min(2vmax, 32px)
significa lo siguiente: use una distancia igual 2vmax
pero no superior 32px
.→ Aquí hay una demostración en video de dicho diseño→ Aquí hay un ejemplo.Tal flexibilidad es realmente asombrosa. Nos brinda muchas oportunidades para crear diseños dinámicos y flexibles de páginas web.Resumen
En este artículo, examinamos las características de ajustar las distancias entre los elementos de las páginas web usando CSS y hablamos sobre la administración del espacio interno de los elementos. Esperamos que encuentre útil lo que aprendió hoy.¡Queridos lectores! ¿Qué herramientas usa con más frecuencia para ajustar la distancia entre los elementos de la página web?