A inset
propriedade em CSS é um atalho para as quatro propriedades embutidas, top
, right
, bottom
e left
em uma declaração. Assim como as quatro propriedades individuais, inset
não tem efeito sobre os elementos não posicionados (estáticos). Em outras palavras, um elemento deve declarar um position
valor explícito antes que as propriedades de inserção tenham efeito.
.box ( inset: 10px 20px 30px 40px; position: relative; )
inset
é inicialmente definido na especificação CSS Logical Properties and Values Level 1, que está no Editor's Draft em 20 de abril de 2020.
Sintaxe
Como você deve ter percebido no exemplo acima, inset
segue a mesma sintaxe de vários valores de padding
e margin
. Isso significa que ele aceita até quatro valores (para offsets Declare para top
, right
, bottom
e left
) e, como poucos como um valor (para declarar offset igual para todas as quatro propriedades). E, assim como padding
e margin
, os valores fluem no sentido horário, começando com top
.
.element ( inset: 1em 2em 3em 0; /* top right bottom left */ inset: 10% 5% -10%; /* top left/right bottom */ inset: 0 10px; /* top/bottom left/right */ inset: 20px; /* all edges = 20px */ )
Antes inset
, teríamos que declarar cada inset
subpropriedade separadamente, assim:
.box ( position: absolute; top: 0; right: 0; bottom: 0; left: 0; )
Agora, podemos simplesmente fazer isso em uma única linha de CSS:
.box ( position: absolute; inset: 0; /* ? */ )
Valores
A inset
propriedade aceita valores numéricos como superior, direito, inferior e esquerdo. Esses valores podem ser de qualquer comprimento CSS válido, como px
, em
, rem
e %
, entre outros.
Vamos falar sobre propriedades lógicas
Vamos apenas arranhar a superfície das propriedades lógicas aqui, já que o foco real está em inset
e em suas subpropriedades relacionadas. Mergulhe a fundo no tópico neste artigo da Smashing Magazine, de Rachel Andrew.
Há mais inset
sub-propriedades do que top
, right
, bottom
e left
, mas, a fim de entendê-los, vale a pena se familiarizar com propriedades e valores lógicos.
O conteúdo pode ser exibido em diferentes direções (ou seja, modos de escrita), incluindo da esquerda para a direita, da direita para a esquerda, de cima para baixo e de baixo para cima. Quando falamos sobre conceitos “lógicos”, estamos realmente nos referindo ao ponto de partida com base na direção da escrita do conteúdo.
Imagine que você está construindo um site que precisa ser compatível com os idiomas da esquerda para a direita (LTR), como inglês e espanhol, e os idiomas da direita para a esquerda (RTL), como persa ou árabe. Digamos que você queira adicionar uma margem entre um ícone e uma linha de texto ao lado dele.
Naturalmente, você pode alcançar a margin-right
propriedade para suportar LTR e, em seguida, adicionar outro conjunto de regras que remova essa margem e a substitua por margin-left
para RTL:
.icon ( margin-right: 1em; )
/* or .icon:dir(rtl) */ (dir="rtl") .icon ( margin-right: 0; margin-left: 1em; )
Esta é uma pequena parte de uma página. Agora imagine construir um grande site desta forma - é muito trabalho! Mas as propriedades lógicas facilitam, levando em consideração o modo de escrita para nós. Por exemplo, podemos adicionar margem ao final do elemento, onde quer que seja:
.icon ( margin-inline-end: 1em; )
Isso é o que queremos dizer quando nos referimos a propriedades lógicas - elas são relativas ao modo de escrita ao invés de uma direção física. Vê como as propriedades lógicas são muito mais lógicas para trabalhar?
Propriedades lógicas inseridas
Portanto, sabendo o que você sabe agora sobre propriedades lógicas, aqui estão quatro subpropriedades adicionais de inserção:
Propriedade Lógica | Equivalente de fluxo horizontal | O que faz |
---|---|---|
inset-block-start | top | Especifica o deslocamento da borda inicial na direção perpendicular à direção de escrita. |
inset-block-end | bottom | Especifica o deslocamento da borda final na direção perpendicular à direção de escrita. |
inset-inline-start | left | Especifica o deslocamento para a borda inicial na direção da escrita, que mapeia para um deslocamento físico dependendo do modo de escrita do elemento, direção e orientação do texto. |
inset-inline-end | right | Especifica o deslocamento da borda final na direção da escrita. |
Podemos até agrupar essas quatro subpropriedades em duas propriedades abreviadas adicionais:
Propriedade Lógica | Abreviação de | O que faz |
---|---|---|
inset-inline | inset-inline-start inset-inline-end | Aceita um único valor para definir inset-inline-start e inset-inline-end .Também aceita dois valores, onde o primeiro especifica inset-inline-start e o segundo especifica inset-inline-end . |
inset-block | inset-block-start inset-block-end | Aceita um único valor para definir inset-block-star t e inset-block-end .Também aceita dois valores, onde o primeiro especifica inset-block-start e o segundo especifica inset-block-end . |
Demo
Altere o modo de escrita e os valores das propriedades de inserção para ter uma ideia melhor de como funcionam:
Atenção: a inset
propriedade não é lógica
Embora inset
seja parte da especificação de Propriedades e Valores Lógicos, ela não define bloco lógico ou deslocamentos em linha. Em vez disso, ele define deslocamentos físicos, independentemente do modo de escrita do elemento, direção e orientação do texto. Em outras palavras, inset
é apenas uma abreviação para top
, right
, bottom
e left
.
Há alguma discussão aqui no GitHub sobre o uso de algumas palavras-chave para poder usar essa propriedade de maneira lógica também.
Então, ainda usamos compensações físicas? Imagine que você queira um crachá ou logotipo fixado no canto superior esquerdo da página e, não importa o idioma, você quer que ele esteja lá. Nesse caso, você não pode usar deslocamentos lógicos e, em vez disso, precisará recorrer às propriedades físicas.
Suporte para navegador
O suporte para a inset
propriedade ainda está em seus estágios iniciais. No momento em que este livro foi escrito, caniuse estima o suporte global em apenas 3,79%.
Área de Trabalho
Internet Explorer | Beira | Raposa de fogo | cromada | Safári | Ópera |
---|---|---|---|---|---|
Não | Não | 66+ | Não | Não | Não |
Móvel
iOS Safari | Opera Mini | Navegador Android | Chrome Android | Firefox Android |
---|---|---|---|---|
Não | Não | 68 | Não | Não |
Mais Informações
- Propriedades lógicas e valores CSS nível 1 (especificação, rascunho do editor)
- Noções básicas sobre propriedades lógicas e valores (Smashing Magazine)
- Propriedades lógicas CSS (truques CSS)