Se vários elementos de uma página da web estiverem localizados próximos um do outro, os usuários terão a sensação de que esses elementos têm algo em comum. O agrupamento de elementos ajuda o usuário a entender seu relacionamento avaliando a distância entre eles. Se todos os elementos estivessem localizados à mesma distância um do outro, seria difícil para o usuário navegar pela página para descobrir quais deles estão relacionados entre si e quais não. Este artigo é dedicado a tudo o que você precisa saber sobre como definir distâncias entre elementos e sobre como configurar espaços internos de elementos. Em particular, falaremos sobre em que situações vale a pena usar preenchimento interno e em que - externo (margem).
Tipos de distância CSS
As distâncias entre elementos e suas partes, personalizáveis por CSS, são de dois tipos. Eles, em relação ao elemento, são divididos em interno e externo. Imagine que temos um elemento. Se dentro dela existe uma certa distância entre algumas de suas partes, esse é um recuo interno. Se estamos falando sobre a distância entre os elementos individuais - esse é o recuo externo.Espaço interno e espaço externoNo CSS, a distância entre elementos e seus componentes pode ser ajustada da seguinte maneira:.element {
padding: 1rem;
margin-bottom: 1rem;
}
A propriedade é padding
usada aqui para ajustar o recuo, e a propriedade margin
é usada para configurar o recuo. Tudo é muito simples. Verdade? Porém, o ajuste de distâncias em CSS pode ser muito complicado se você trabalhar com componentes que possuem muitas peças pequenas e crianças.Property Propriedade da margem - recuo
A propriedade é margin
usada para definir a distância entre elementos individuais. Por exemplo, o exemplo anterior usou a propriedade CSS margin-bottom: 1rem
para adicionar a distância vertical entre dois elementos localizados um acima do outro.O recuo externo pode ser definido para quatro lados de um elemento (superior, direito, inferior, esquerdo - superior, direito, inferior, esquerdo). Portanto, antes de passar para exemplos e discussões de diferentes maneiras de definir distâncias, é importante esclarecer alguns conceitos básicos.▍ Recolher o preenchimento externo
Se descrevermos o conceito de "colapso das margens externas" em palavras simples, podemos dizer que isso acontece se dois elementos localizados um acima do outro possuem margens externas, e o recuo de um deles é maior que o recuo do outro. Nesse caso, um recuo maior será usado e o menor será ignorado.O recuo maior vence.Nodiagrama acima, a propriedade está configurada no elemento superior e a propriedademargin-bottom
no elemento inferiormargin-top
. A distância vertical entre os elementos corresponde ao maior desses recuos.Para evitar esse problema, é recomendável configurar o mesmo recuo em todos os elementos (conforme descrito aqui ). E aqui está outro fato interessante. O recurso CSS Tricks votou no uso de propriedadesmargin-bottom
emargin-top
. Como se viu, a propriedademargin-bottom
venceu, recebendo 61% dos votos.Veja como resolver esse problema:.element:not(:last-child) {
margin-bottom: 1rem;
}
O uso de um seletor de CSS :not
facilita a remoção do recuo externo do último filho, a fim de se livrar do espaço desnecessário entre os elementos.→ Aqui está uma demonstração do trabalho com margens externas.Umoutro exemplo relacionado ao recolhimento de margens externas está relacionado aos elementos filho e pai. Suponha que você tenha o seguinte HTML:<div class="parent">
<div class="child">I'm the child element</div>
</div>
Aqui estão seus estilos:.parent {
margin: 50px auto 0 auto;
width: 400px;
height: 120px;
}
.child {
margin: 50px 0;
}
Veja como é o resultado da visualização de tudo isso.Filho e paiObserve que o filho se encosta na parte superior do pai. Este é o resultado do colapso de suas margens externas. De acordo com o W3C , existem várias opções para resolver esse problema:- Adicionando uma propriedade
border
ao elemento pai. - Configurando a propriedade de um
display
elemento filho para um valor inline-block
.
Uma solução mais compreensível para esse problema seria definir a propriedade do padding-top
elemento pai.Definindo o recuo superior do elemento paiInd Recuo negativo
Um valor negativo pode ser usado para qualquer recuo externo. Em alguns casos, essa técnica é muito útil. Veja a figura a seguir.Resultados de definir a propriedade preenchimento do elemento paido elemento pai tem uma propriedadepadding: 1rem
. Isso faz com que a criança tenha deslocamentos da parte superior, esquerda e direita. Mas a criança deve estar adjacente às fronteiras dos pais. Margens externas negativas ajudarão a conseguir isso..parent {
padding: 1rem
}
.child {
margin-left: -1rem;
margin-right: -1rem;
margin-top: -1rem;
}
Foi o que aconteceu como resultado de tal estilização.As margens externas negativas da criança ajudam a obter o efeito desejado→ Aqui está uma demonstraçãoSe você estiver interessado no tópico margens externas negativas, recomendo este artigo.PropertyPadding padding - padding interno
Como já mencionado, a propriedade padding
permite controlar o espaço dentro do elemento. O objetivo de aplicar essa propriedade depende da situação em que é usada.Por exemplo, ele pode ser usado para aumentar o espaço ao redor dos links. Isso leva a um aumento no espaço do link clicável .Recuado em verde▍ Situações em que a propriedade padding não funciona
É importante observar que o recuo vertical não funciona com elementos que possuem uma propriedade display: inline
. Por exemplo, esses são elementos <span>
e <a>
. Se você configurar a propriedade padding
desse elemento, essa configuração não funcionará. Este é apenas um lembrete amigável de que os elementos embutidos precisam alterar uma propriedade display
:.element span {
display: inline-block;
padding-top: 1rem;
padding-bottom: 1rem;
}
Espaço entre elementos de layout de grade CSS
No CSS Grade, você pode facilmente ajustar a distância entre colunas e linhas usando a propriedade grid-gap
. Esta é uma abreviação de uma propriedade que define a distância entre colunas e linhas.Distâncias entre colunas e linhas.element {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 16px;
}
Um registro completo dessas propriedades é semelhante a este:.element {
display: grid;
grid-template-columns: 1fr 1fr;
grid-row-gap: 24px;
grid-column-gap: 16px;
}
O espaço entre elementos CSS de um layout Flexbox
Há uma propriedade sugerida para layouts de grade e caixa flexível. Esta é uma propriedade gap
. Atualmente, apenas o Firefox suporta ..element {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
Além disso, essa propriedade não pode ser usada com CSS @supports
para determinar se é suportado e para tomar decisões apropriadas com base nisso. Se você gosta desta propriedade - vote para adicioná-la ao Chrome.Elementos de posicionamento em CSS
Talvez o posicionamento de elementos não possa ser atribuído diretamente a maneiras de ajustar a distância entre eles, mas, em alguns casos, o posicionamento desempenha um papel. Por exemplo, se houver um elemento filho absolutamente posicionado que precise ser localizado nas 16px
bordas esquerda e superior do elemento pai.Considere o seguinte exemplo. Há um cartão no qual existe um ícone que precisa ser colocado a alguma distância das bordas superior e esquerda do elemento pai. Para alcançar esse efeito, você pode usar o seguinte estilo:.category {
position: absolute;
left: 16px;
top: 16px;
}
A distância entre os limites dos elementos pai e filho é destacada em verde.Usar cenários e estudos de caso
Nesta seção, examinaremos os cenários para o uso de meios para ajustar distâncias entre elementos. Algo semelhante pode aparecer no seu trabalho diário com CSS.▍ Componente de cabeçalho
Um componente é um cabeçalho com as seguintes configurações: recuo esquerdo e direito, espaço ao redor do logotipo, espaço ao redor do elemento de navegação, distância entre o elemento de navegação e o nome do usuárioNesse caso, o componente do cabeçalho possui um logotipo, uma área de navegação e uma área na qual as informações são exibidas. sobre o perfil do usuário. Você consegue adivinhar como deve ser o código de estilização desse elemento? Aqui, para facilitar, uma marcação esquemática de um desses elementos:<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>
Margens internas e externas As margensesquerda e direita são usadas. Seu objetivo é garantir que o conteúdo do cabeçalho não se apegue às bordas..c-header {
padding-left: 16px;
padding-right: 16px;
}
Ao configurar links de navegação, é necessário levar em consideração o fato de que cada um deles deve ter espaço interno suficiente, tanto vertical quanto horizontalmente. Devido a isso, sua área clicável será grande o suficiente, o que melhorará a acessibilidade do projeto..c-nav a {
display: block;
padding: 16px 8px;
}
Se falamos sobre a distância entre os elementos, você pode usar a propriedade margin
ou - você pode alterar a propriedade dos display
elementos <li>
para inline-block
. Por isso, um pequeno espaço é adicionado entre os elementos que estão no mesmo nível, devido ao fato de que esses elementos são considerados símbolos..c-nav li {
display: inline-block;
}
Finalmente, o nome de usuário e o avatar têm um recuo externo esquerdo..c-user img,
.c-user span {
margin-left: 10px;
}
Observe que, se você estiver criando um site multilíngue, é recomendável usar propriedades lógicas de CSS nesta situação :.c-user img,
.c-user span {
margin-inline-start: 1rem;
}
As distâncias antes e depois do separador não são as mesmas.Tenha ematenção que as distâncias antes e depois do separador não são as mesmas. A razão para isso é que a largura do bloco de navegação não está definida. Em vez disso, apenas os recuos internos são configurados aqui. Como resultado, a largura dos elementos de navegação depende do seu conteúdo. Aqui estão as soluções para esse problema:- Configurando a largura mínima para itens de navegação.
- Aumente o recuo horizontal.
- Adiciona um recuo extra no lado esquerdo do separador.
A melhor e mais fácil maneira é usar o terceiro método, que é configurar a propriedade margin-left
:.c-user {
margin-left: 8px;
}
→ Aqui está uma demonstração▍ Distâncias nos layouts de grade - CSS Flexbox
Os layouts de grade são o local em que as tecnologias para ajustar a distância entre os elementos são frequentemente usadas. Considere o seguinte exemplo.Layout da gradePrecisamos ajustar a distância entre as linhas e colunas da tabela. Aqui está a marcação:<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>
Normalmente, prefiro manter os componentes em um estado encapsulado e evitar configurar seus recuos externos. Por esse motivo, tenho um elemento grid_item
no qual o elemento do cartão será localizado..grid--4 {
display: flex;
flex-wrap: wrap;
}
.grid__item {
flex-basis: 25%;
margin-bottom: 16px;
}
Graças a este código CSS, haverá quatro cartões em cada linha. Aqui está uma maneira possível de ajustar a distância entre eles:.grid__item {
flex-basis: calc(25% - 10px);
margin-left: 10px;
margin-bottom: 16px;
}
Usando a função CSS, o calc()
recuo é subtraído de flex-basis
. Como você pode ver, essa não é uma solução tão simples. Na verdade, eu prefiro o seguinte:- Defina a propriedade do item de grade
padding-left
. - Defina o elemento pai para ter uma margem externa negativa
margin-left
com o mesmo valor que y padding-left
.
Eu aprendi sobre esse método há muitos anos, depois de ler aqui algum artigo, cujo nome já se esqueceu (se você souber que tipo de artigo - por favor me avise)..grid--4 {
display: flex;
flex-wrap: wrap;
margin-left: -10px;
}
.grid__item {
flex-basis: 25%;
padding-left: 10px;
margin-bottom: 16px;
}
A razão pela qual eu usei um valor negativo para aqui margin-left
é porque o primeiro cartão tem uma propriedade padding-left
que, na realidade, não é necessária. Como resultado, movo o elemento wrapper para a esquerda e me livre de espaço desnecessário.→ Aqui está um exemplo de trabalho:outra idéia semelhante é usar recuo e recuo negativo. Aqui está um exemplo do site do Facebook.Margens internas e externasAqui está o código CSS que ilustra esta ideia:.wrapper {
margin-left: -4px;
margin-right: -4px;
}
.story {
padding-left: 4px;
padding-right: 4px;
}
▍Distância nos layouts de grade - CSS Grid
E agora - a melhor parte! Em layouts baseados-Grid CSS, a distância entre os elementos é muito conveniente para ajustar o uso da propriedade grid-gap
. Além disso, você não pode se preocupar com a largura dos elementos e as bordas externas inferiores. O layout da grade CSS cuida de tudo isso..grid--4 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 1rem;
}
Isso é tudo. Acredito que ninguém argumentará que a configuração de layouts de grade é mais fácil e compreensível do que a configuração de layouts Flexbox.▍Definir a distância entre os elementos somente quando necessário
Nos layouts de grade, gosto muito do fato de a propriedade grid-gap
ser aplicada apenas quando deve haver alguma distância entre os elementos. Veja o seguinte layout.O layout da grade na qual os elementos no ambiente móvel são organizados verticalmente e na área de trabalho - horizontalmente.Háuma seção do site com dois cartões. Preciso que eles sejam separados em um ambiente móvel, com um arranjo vertical de cartões e em um desktop, com seu arranjo horizontal. Sem o CSS Grid, é impossível obter essa flexibilidade de layout. Dê uma olhada no seguinte código:.card:not(:last-child) {
margin-bottom: 16px;
}
@media (min-width: 700px) {
.card:not(:last-child) {
margin-bottom: 0;
margin-left: 1rem;
}
}
Não é muito conveniente. Verdade? E o 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;
}
}
Está feito! E tudo é muito mais simples.OrkTrabalho com recuo externo inferior
Suponha que temos os seguintes componentes localizados um acima do outro. Cada um deles tem um recuo externo mais baixo.Um conjunto de componentes dispostos horizontalmenteObserve que há uma margem externa inferior para o último elemento. E isso está errado, já que os recuos devem estar presentes apenas entre os elementos.Você pode corrigir esse problema recorrendo a uma das soluções que analisaremos agora.Solução 1: seletor de CSS: não
.element:not(:last-child) {
margin-bottom: 16px;
}
Solução nº 2: uma combinação de elementos vizinhos do mesmo nível
.element + .element {
margin-top: 16px;
}
Análise de decisão
Embora a solução nº 1 pareça mais atraente, ela possui as seguintes desvantagens:- Isso leva a problemas específicos de CSS. Não pode ser redefinido até que um seletor seja usado
:not
. - Não se aplica quando há mais de uma coluna de itens. Isso é ilustrado abaixo.
Duas colunas de elementos e o problema da solução nº 1Se falamos da solução nº 2, sua aplicação não leva a problemas com especificidade. É verdade que essa solução também é adequada apenas nos casos em que se trata de uma única coluna de elementos.Nessa situação, é melhor recorrer à decisão de remover espaço desnecessário adicionando um recuo externo negativo ao elemento pai:.wrapper {
margin-bottom: -16px;
}
Aqui acontece o seguinte. Graças a essa configuração, o elemento é deslocado para baixo por uma distância igual ao recuo externo especificado. Mas aqui você deve tomar cuidado para não definir um recuo externo ao usar a sobreposição dos elementos.▍ Placa Componente
Agora, quero discutir em detalhes as configurações das placas componentes. Talvez no final eu receba um livro inteiro sobre isso. Aqui vou considerar um padrão universal para configurar cartões e falar sobre como gerenciá-los.Placa de componentes (se você sentir vontade de comer - me desculpe)Pense onde exatamente nesta placa é usada a distância entre os elementos e suas partes. Aqui está a minha resposta a esta pergunta.Margens internas e externasAqui está a marcação:<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>
Aqui está o estilo da classe card__content
:.card__content {
padding: 10px;
}
Graças ao recuo definido aqui, o deslocamento para todos os filhos será definido. Em seguida, configure as margens externas:.card__title,
.card__author,
.card__rating {
margin-bottom: 10px;
}
Ao configurar a separação de classificação e informação, usei a borda:.card__meta {
padding-top: 10px;
border-top: 1px solid #e9e9e9;
}
Mas aqui estamos diante de um problema! A borda não está vinculada às bordas, devido ao card__content
recuo do elemento pai na classe .O separador não está amarrado à borda.Vocêtalvez já tenha adivinhado que os recuos negativos nos ajudarão aqui:.card__meta {
padding-top: 10px;
border-top: 1px solid #e9e9e9;
margin: 0 -10px;
}
Mas aqui novamente, algo deu errado. Agora, o texto ficou preso na borda do cartão.O separador é normal, mas o conteúdo do cartão não está localizado corretamente.Pararesolver esse problema, você precisa configurar os recuos esquerdo e direito para o conteúdo do cartão..card__meta {
padding: 10px 10px 0 10px;
border-top: 1px solid #e9e9e9;
margin: 0 -10px;
}
A placa está configurada como deveria→ Aqui está um exemplo▍ Conteúdo dos artigos
Estou certo de que o que falaremos aqui é uma situação muito, muito comum. O ponto aqui é que o conteúdo dos artigos geralmente vai para as páginas do CMS (Content Management System - sistema de gerenciamento de conteúdo) ou é gerado automaticamente com base nos arquivos Markdown. Você não pode especificar classes de elementos aqui.Considere o exemplo a seguir, que mostra a marcação contendo uma mistura de títulos, parágrafos e imagens.<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>
A fim de trazer tudo para uma aparência decente, as distâncias entre os elementos devem ser uniformes e devem ser usadas com responsabilidade. Enquanto trabalhava neste exemplo, peguei emprestados alguns estilos do type-scale.com .h1, h2, h3, h4, h5 {
margin: 2.75rem 0 1.05rem;
}
h1 {
margin-top: 0;
}
img {
margin-bottom: 0.5rem;
}
Aqui está um diagrama da página com o texto do artigo.Layout da página e aplicação das propriedades da margem superior e inferior da margemSe um elemento for<p>
seguido por um cabeçalho, por exemplo, um cabeçalhoTypes of Spacing
, a propriedade domargin-bottom
elemento<p>
será ignorada. Isso, como você pode imaginar, é uma conseqüência do colapso das margens externas.→ Aqui está um exemploInd Recuo externo, conforme aplicável
Veja o seguinte layout.Elementos em condições normais e em uma situação de falta de espaço Oselementos não parecem muito bons quando estão muito próximos um do outro. Eu criei esse layout usando o Flexbox. Essa técnica é chamada de "Alinhamento de deslocamento de alinhamento". Eu descobri o nome dela daqui ..element {
display: flex;
flex-wrap: wrap;
}
Como resultado da aplicação desta técnica, a quebra de linha é realizada se a área de visualização for menor que um determinado limite. Aqui está como fica.Os elementos filhos estão em novas linhas:aqui você precisa lidar com uma situação intermediária na qual dois elementos ainda estão próximos, mas a distância entre eles é zero. Nesse caso, prefiro recorrer à propriedademargin-right
, que impede que os elementos se toquem e acelere a respostaflex-wrap
.Elementos não se tocamModo de gravação da propriedade CSS
Primeiro, citamos o MDN : "A propriedade writing-mode
define a posição horizontal ou vertical do texto, bem como a direção do bloco".Você já pensou em como os recuos externos devem se comportar quando usados com um elemento cuja propriedade writing-mode
é diferente do padrão? Considere o seguinte exemplo.Cartão com cabeçalho verticalAqui estão os estilos:.wrapper {
display: flex;
}
.title {
writing-mode: vertical-lr;
margin-right: 16px;
}
O cabeçalho é girado 90 graus. Deve haver um espaço vazio entre ele e a imagem. Como se viu, a propriedade margin-right
mostra-se perfeitamente com diferentes valores da propriedade writing-mode
.→ Aqui está um exemplo: acredito que já cobrimos cenários de indentação suficientes. Agora considere alguns conceitos interessantes.Encapsulamento de componentes
Sistemas de design grandes contêm muitos componentes. Será lógico ajustar suas margens externas?Considere o seguinte exemplo.Botões<button class="button">Save Changes</button>
<button class="button button-outline">Discard</button>
Onde preciso ajustar a distância entre os botões? Preciso configurar algumas propriedades do botão esquerdo ou direito? Talvez você possa usar uma combinação de elementos vizinhos do mesmo nível?.button + .button {
margin-left: 1rem;
}
Não há nada de bom nisso. E se houver apenas um botão? E como funcionará em um dispositivo móvel, no caso em que os botões estão localizados na vertical e não na horizontal? Em geral, aqui nos deparamos com muitas questões difíceis.SingUsando componentes abstratos
A solução para os problemas acima é o uso de componentes abstraídos, que são usados para colocar outros componentes neles. Isso, como dito aqui , é uma mudança na responsabilidade de gerenciar o preenchimento do elemento pai. Repensamos o exemplo anterior à luz dessa idéia.Componentes pai e filho<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>
Observe que existem elementos de invólucro. Cada botão possui seu próprio invólucro..list {
display: flex;
align-items: center;
margin-left: -1rem;
}
.list__item {
margin-left: 1rem;
}
Isso é tudo! Além disso, esse conceito é fácil de aplicar a qualquer estrutura JavaScript. Por exemplo:<List>
<Button>Save Changes</Button>
<Button outline>Discard</Button>
</List>
E a ferramenta JS usada deve colocar cada elemento em seu próprio wrapper.Componentes usados como separadores
Se você duvida que leu o cabeçalho corretamente - não hesite. Estamos falando de componentes usados como separadores. Em particular, refiro-me a este artigo, que discute o conceito que evita o uso de indentação e usa componentes separadores.Imagine que em uma determinada seção do site você precise de um recuo externo esquerdo 24px
. Ao mesmo tempo, os seguintes requisitos são apresentados ao recuo:- O recuo externo não deve ser configurado diretamente no componente, pois faz parte de um sistema de design já criado.
- O recuo deve ser flexível. Em uma página pode ter um tamanho
X
e, por outro - um tamanho Y
.
Notei esse truque pela primeira vez ao explorar o novo design do Facebook .Elemento separador de design do FacebookAqui é usado como um elemento separador<div>
com um estilo embutidowidth: 16px
. Seu único objetivo é adicionar espaço vazio entre o elemento esquerdo e o elemento container.Aqui está uma citação deste manual de treinamento do React: “Mas no mundo real, precisamos de espaços definidos fora dos componentes para organizar os componentes em páginas e cenas. É aqui que as configurações da indentação externa entram no código do componente para ajustar as distâncias entre os componentes quando são montados. ”Eu concordo com isso. Em um grande sistema de design, adicionar recuo aos componentes será irracional. Isso resultará em um código não tão bonito.Issues Problemas do componente separador
Agora que você se familiarizou com a ideia de componentes separadores, vamos falar sobre alguns dos problemas que se espera que ocorram ao trabalhar com eles. Aqui estão as perguntas que eu tenho pensado:- Como um componente separador ocupa espaço em um componente pai? Como ele se comporta nos layouts horizontais e verticais? Por exemplo, como esse componente separaria os componentes vertical e horizontalmente?
- Preciso estilizar esses componentes com base na propriedade
display
do componente pai (Flexbox, Grid)?
Vamos examinar essas perguntas.IzesTamanhos de componentes separadores
Você pode criar um componente separador que aceite vários parâmetros. Não sou desenvolvedor de JavaScript, mas acho que isso é chamado de "adereços". Considere o exemplo a seguir, retirado daqui .Há um componente separador localizado entre Header
e Section
.<Header />
<Spacer mb={4} />
<Section />
E aqui está uma situação um pouco diferente. Aqui, o separador é usado para criar uma distância ajustável automaticamente entre o logotipo (componente Logo
) e a área de navegação representada pelos componentes Link
.<Flex>
<Logo />
<Spacer m="auto" />
<Link>Beep</Link>
<Link>Boop</Link>
</Flex>
Parece que implementar um separador usando CSS é muito simples e basta usar o design justify-content: space-between
. Mas e se você precisar alterar o design? Nesse caso, você precisa alterar a estilização.Veja o exemplo a seguir. Esse código parece flexível?<Flex>
<Logo />
<Link>Beep</Link>
<Link>Boop</Link>
<Spacer m="auto" />
<Link>Boop</Link>
</Flex>
Nesse caso, a estilização precisa ser alterada.Em termos de tamanho, podemos dizer que o tamanho do separador pode ser ajustado com base no tamanho do elemento pai. No caso acima, pode fazer sentido criar uma propriedade grow
definida como um valor em CSS flex-grow: 1
.<Flex>
<Spacer grow="1" />
</Flex>
SeUso de pseudoelementos
Outra idéia que me veio à mente é usar pseudoelementos para criar separadores..element:after {
content: "";
display: block;
height: 32px;
}
Talvez tenhamos a oportunidade de transformar um pseudoelemento em um separador e não usar um elemento separado para isso? Por exemplo:<Header spacer="below" type="pseudo" length="32">
<Logo />
<Link>Home</Link>
<Link>About</Link>
<Link>Contact</Link>
</Header>
Até agora, não usei componentes separadores em meus projetos. Mas estou procurando cenários em que eles possam ser úteis para mim.Funções matemáticas CSS min (), max (), clamp ()
O recuo pode ser dinâmico? Por exemplo, é possível usar esse recuo, cujo tamanho mínimo e máximo depende da largura da área de visualização? Eu posso responder essa pergunta positivamente. As funções CSS, de acordo com os dados do CanIUse , são suportadas por todos os principais navegadores.Lembre-se de layouts de grade e fale sobre como o recuo dinâmico pode ser usado neles..wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: min(2vmax, 32px);
}
Construção min(2vmax, 32px)
significa o seguinte: use uma distância igual, 2vmax
mas não superior a 32px
.→ Aqui está uma demonstração em vídeo desse layout→ Aqui está um exemplo.Essa flexibilidade é realmente incrível. Isso nos dá muitas oportunidades para criar layouts dinâmicos e flexíveis de páginas da web.Sumário
Neste artigo, examinamos os recursos de ajuste das distâncias entre elementos de páginas da Web usando CSS e discutimos sobre o gerenciamento do espaço interno dos elementos. Esperamos que você ache útil o que aprendeu hoje.Queridos leitores! Quais ferramentas você usa com mais frequência para ajustar a distância entre os elementos da página da web?