position:sticky está de volta no Chrome

Há quatro anos, Eric Bidelman criou uma postagem de blog bastante legal sobre o fato de que position: sticky chegou ao WebKit, que na época era o mecanismo que alimentava o Chrome (assim como muitos outros navegadores, incluindo o Safari). Um ano depois, e para a consternação dos desenvolvedores da Web, removemos position:sticky do Chrome porque "a implementação atual não foi projetada de uma maneira que se integra bem ao sistema de rolagem e composição existente".

Sempre quisemos que ele voltasse ao Chrome, como o bug indicava: "Depois de colocar a rolagem e a composição em ordem, devemos retornar a position: sticky e implementar o recurso de uma maneira que se integre bem ao restante do mecanismo". O metabug que rastreia a implementação está em desenvolvimento desde 2013.

A boa notícia é que, a partir do Chrome 56 (atualmente Beta desde dezembro de 2016, estável desde janeiro de 2017), o position: sticky está de volta ao Chrome.

O que é position:sticky?

Demorou um pouco para chegar aqui, então por que estou animado com isso?

position:sticky é um atributo de posicionamento do CSS que permite fixar um elemento na janela de visualização (ou seja, fixá-lo na parte de cima da tela) somente quando o elemento pai está visível na janela de visualização e está dentro do valor de limite. Quando não está fixado à viewport, o elemento age como se fosse position: relative. É uma adição muito boa e simples à plataforma que elimina a necessidade de usar JavaScript em um manipulador de eventos onscroll apenas para bloquear um elemento na parte de cima da viewport.

Confira como fica no meu blog. Isso me permite manter o cabeçalho da seção atual na parte de cima da tela enquanto você lê meus artigos longos e trabalhosos:

Para implementar esse recurso, especifique que o atributo position precisa ter o valor de sticky no elemento que você quer fixar. Além disso, você também pode adicionar o deslocamento onde ele precisa ser fixado.

    h3 {
      /* Element will be 'fixed' when it ... */
      position: sticky;
      /* ... is 10px from the top of the viewport */
      top: 10px;
    }

O exemplo anterior fixa o elemento <h3> a 10 px da parte de cima do viewport. Para fixar diretamente na parte de cima da viewport, defina o atributo top como top: 0px.

O suporte a esse recurso é bastante forte. Ele está disponível no Chrome (ufa), Firefox e Safari. Confira mais detalhes sobre position:sticky: