Posicionamento de âncora CSS: o que é e quando podemos usá-lo?

O posicionamento da âncora CSS promete revolucionar a forma como projetamos e posicionamos elementos na web. Neste artigo, exploraremos o estado atual do posicionamento CSS e compará-lo-emos com as novas possibilidades oferecidas pela ancoragem CSS.

Iremos mergulhar em exemplos do mundo real e trechos de código para mostrar o potencial desse próximo recurso. Por fim, discutiremos algumas limitações que os desenvolvedores devem conhecer ao utilizar a ancoragem CSS.

Ancoragem CSS: Um Novo Paradigma em Layouts Web

A ancoragem CSS fornece uma nova abordagem para posicionamento e layout, introduzindo um conjunto de propriedades e valores que permitem que os elementos sejam vinculados uns aos outros. Oferece mais flexibilidade, controle e simplicidade do que o posicionamento CSS tradicional.

Um dos principais recursos da ancoragem CSS é a capacidade de fixar um elemento em uma posição específica dentro do elemento que o contém. Isso permite layouts dinâmicos e responsivos sem a necessidade de cálculos complexos. Vejamos um exemplo:

1
.parent {
2
  position: relative;
3
}
4

5
.child {
6
  position: absolute;
7
  top: 50%;
8
  left: 50%;
9
  transform: translate(-50%, -50%);
10
  anchor-position: center;
11
}

No trecho de código acima, o .child O elemento é posicionado no centro de seu elemento pai, independentemente das dimensões do pai. O anchor-position propriedade fornece uma maneira mais intuitiva e declarativa de obter tais layouts.

uma âncorauma âncorauma âncora

Definindo uma âncora

Para utilizar a ancoragem CSS, você precisa definir uma âncora que possa ser usada para posicionar outros elementos. Duas maneiras de definir uma âncora estão em seu CSS ou HTML.

Definindo uma âncora com CSS

Primeiro, você pode definir uma âncora em seu CSS definindo o anchor-name propriedade no elemento âncora. Ele aceita um valor de identificação tracejado.

1
.anchor {
2
   anchor-name: --my-anchor;
3
}

No código acima, o .anchor classe define uma âncora chamada --my-anchor.

Definindo uma âncora com HTML

Alternativamente, você pode definir uma âncora em seu HTML usando o anchor atributo. O valor do atributo é o ID do elemento âncora, criando uma âncora implícita.

1
 id="my-anchor" class="anchor">
2

3
 anchor="my-anchor" class="bear">I’m a bear! 

O código acima define uma âncora usando um espaço vazio elemento com o ID my-anchor e a anchor aula. O div elemento com a classe boat usa o anchor atributo para especificar que ele deve ser vinculado ao my-anchor âncora.

Usando a função âncora

Depois de definir uma âncora, você pode usar a função âncora para posicionar elementos em relação a ela. A função âncora leva três argumentos:

  1. Elemento âncora: O nome da âncora a ser usada. Se você omitir o valor, uma âncora implícita será usada. Uma âncora implícita pode ser definida através do relacionamento HTML ou com o anchor-default propriedade usando um valor de nome de âncora.
  2. Lado da âncora: uma palavra-chave ou valor percentual que representa a posição que você deseja usar. Isto pode ser top, right, bottom, left, centerou uma porcentagem. Por exemplo, 50% representaria a posição central.
  3. Cair pra trás: um valor substituto opcional que aceita um comprimento ou porcentagem. O valor de fallback será usado se a posição da âncora não for suportada ou não puder ser determinada.

Aqui está um exemplo de uso da função âncora:

1
.child {
2
  position: absolute;
3
  anchor: --my-anchor center;
4
}

No código acima, o .child elemento é posicionado absolutamente usando o anchor função, que especifica que ele deve ser conectado ao --my-anchor âncora na posição central.

Recursos adicionais de ancoragem CSS

Além dos exemplos acima, o rascunho da especificação para ancoragem CSS introduz vários outros recursos que expandem as possibilidades de layouts web.

Bordas de âncora

A especificação de ancoragem CSS introduz o conceito de arestas de ancoragem, que permite aos desenvolvedores definir as arestas exatas às quais um elemento deve ser ancorado. Isso fornece controle preciso sobre o posicionamento. Por exemplo:

1
.element {
2
  anchor-edge: left top;
3
}

O .element está ancorado no canto superior esquerdo do elemento que o contém.

Margens de âncora

A ancoragem CSS também introduz o anchor-margin propriedade, que permite aos desenvolvedores especificar margem adicional em torno do elemento ancorado. Isto é particularmente útil ao lidar com elementos sobrepostos. Por exemplo:

1
.element {
2
  anchor-position: center;
3
  anchor-margin: 20px;
4
}

Aqui o .element está ancorado no centro do elemento que o contém, com uma margem adicional de 20 pixels.

Ancoragem de rolagem

A ancoragem de rolagem é um recurso que ajuda a manter a posição de rolagem quando elementos são adicionados ou removidos dinamicamente do documento. Ele evita que a página salte e fornece uma experiência de rolagem mais suave para os usuários. O comportamento de ancoragem de rolagem está habilitado por padrão, mas pode ser desabilitado se necessário:

1
html {
2
  overflow-anchor: none;
3
}

O código acima desativa o comportamento de ancoragem de rolagem para todo o documento HTML.

Exemplo

Neste exemplo, recriaremos uma dica de ferramenta usando âncoras CSS em vez do método de posicionamento antigo.

1
 class="container">
2

3
     id="my-anchor" class="anchor">
4
         xmlns=" https://www.w3.org/2000/svg" width= "24" height= "24" viewBox= "0 0 24 24"></span>information-circle<span style="color: #f4bf75"> fill= "none"> d= "M11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0zm-9-3.75h.008v.008H12V8.25z" stroke-width= "1.5" stroke-linecap=" round" stroke-linejoin=" round">
5
        This is some important notice in your application.
6
    
7

8
     class="tooltip">
9
        

Tooltip

10
        Tooltip content

11
    
12

A principal mudança é a forma como abordamos o CSS. O .anchor turma recebe um novo anchor-name chamado tooltip, que nos permite definir seu vizinho de ancoragem com .tooltip

1
/* As of June 2023 this requires Chrome Canary with Experimental features enabled */
2

3
body {
4
  font-family: sans-serif;
5
  padding: 1rem;
6
}
7

8
.container {
9
  margin: 4rem auto;
10
  max-width: 600px;
11
}
12

13
.anchor {
14
  anchor-name: --tooltip;
15
  color: #444;
16
  font-weight: 500;
17
  padding: .5rem 1rem;
18
  border-top-left-radius: 6px;
19
  border-top-right-radius: 6px;
20
}
21

22
.anchor svg {
23
  stroke: currentcolor;
24
  color: #444;
25
  width: 24px;
26
  height: 24px;
27
  position: relative;
28
  top: 6px;
29
}
30

31
.anchor:hover ~ .tooltip {
32
  opacity: 1;
33
  visibility: visible;
34
  transition: ease-in .2s all;
35
}
36

37
.tooltip {
38
  opacity: 0;
39
  visibility: hidden;
40
  position: fixed;
41
  
42
  anchor-default: --tooltip;
43
  bottom: anchor(auto);
44
  
45
  width: 400px;
46
  background: rgba(0, 0, 0, .01);
47
  padding: 1rem;
48
  border: 1px solid #ddd;
49
  border-radius: 6px;
50
  color: #333;
51
  transition: ease-in .2s all;
52
}
53

54
.tooltip h3 {
55
  margin: 0;
56
}

Você pode estabelecer esse relacionamento e, em seguida, adicionar estilos e configurações adicionais para construir o posicionamento ideal preferido. Aqui o estilo inferior fica anchor(auto), que desloca a dica de ferramenta para a parte inferior do elemento ancorado. Ajuste isso com mais propriedades como top,right ,bottom, left , auto-same.

auto-same é equivalente a:

1
.cover {
2
  top: anchor(top);
3
  right: anchor(right);
4
  bottom: anchor(bottom);
5
  left: anchor(left);
6
}

Lembre-se, tentei este exemplo usando o Chrome Canary com recursos experimentais ativados. A execução deste código no seu navegador atual pode não funcionar corretamente.

Limitações: o que manter em mente

Embora a ancoragem CSS abra possibilidades interessantes para layouts da web, é essencial estar ciente de suas limitações. No momento em que este artigo foi escrito, o recurso ainda era um rascunho e o suporte do navegador pode variar. É crucial testar minuciosamente e considerar opções alternativas para navegadores não suportados.

A ancoragem CSS pode introduzir complexidades ao trabalhar com layouts complexos ou aninhados. Elementos com vários relacionamentos de ancoragem podem criar comportamentos inesperados, e âncoras sobrepostas ou que se cruzam exigem consideração adicional para alcançar os resultados desejados.

Conclusão

A ancoragem CSS apresenta um novo paradigma interessante no design de layout web, capacitando os desenvolvedores a criar layouts complexos de forma mais rápida e eficiente. Ao vincular os elementos entre si, a ancoragem do CSS elimina a necessidade de soluções alternativas e cálculos complicados, simplificando designs web responsivos e dinâmicos.

À medida que o recurso de ancoragem CSS evolui, é importante manter-se atualizado com as especificações mais recentes e o suporte do navegador. Embora ofereça um excelente potencial, também é crucial considerar as suas limitações atuais e planear adequadamente. A ancoragem CSS foi definida para redefinir a forma como abordamos os layouts da web, fornecendo uma ferramenta mais intuitiva e poderosa para os desenvolvedores criarem experiências de usuário excepcionais.

Saiba mais sobre propriedades CSS

Deixe uma resposta