DEV Community

Leonardo Muniz
Leonardo Muniz

Posted on • Edited on

3 2 3 2 2

[PT-BR] Unidades de Viewport no CSS: Além do VH

Bom, este texto parte de um deslumbrado que acabou de descobrir uma coisa e quer contar pra todo mundo, ate algumas horas atras eu nao sabia que existiam outras unidades de viewport alem de vh/vw, e como eu percebi isso? Tendo problemas de responsividade pra resolver e indo atras de soluções, acontece que eu implementei um modal que deve ocupar 100% da altura da pagina, então '100vh' funcionou muito bem…no desktop, o problema apareceu de verdade quando eu testei usando um dispositivo mobile, aqui abaixo eu explico o problema e como eu resolvi.

Neste artigo vou tentar falar um pouco das novas unidades de viewports CSS: svh, svh, dvh. Mas antes, vamos tentar entender algumas coisas antes de nos aprofundarmos.

O que é Viewport ?

Resumidamente, viewport é a area visível de uma pagina web em um dispositivo, obviamente o tamanho do viewport varia de acordo com o dispositivo, com o browser e pode ate ser alterado pelo usuario se ele redimensionar a janela do navegador.
browsers examples

VH — Viewport Height

O “VH” foi introduzido no modulo 3 do CSS e é uma unidade relativa do CSS, ele permite que os elementos da pagina sejam dimensionados de acordo com o tamanho da tela, criando um layout responsivo, sendo assim, o ‘vh’ representa uma porcentagem da altura do viewport.

1vh = 1% da altura do viewport.

.foo {
height: 50vh;  /* O elemento terá 50% da altura do viewport */
}
Enter fullscreen mode Exit fullscreen mode

Problemas do VH

Bom, o ‘vh’ trouxe muitas melhorias, mas para desktops, ja nos dispositivos mobile, tivemos alguns problemas, pois alguns navegadores tinham a barra de navegação que ocupa um espaço da tela, e geralmente essa barra fica por cima do conteúdo da pagina, podendo dinamicamente expandir ou retrair de acordo com a direção que o usuário “scrolla” a página, por isso, o ‘vh’ pode ter comportamento inesperado em alguns dispositivos.

Safari navigation bar

viewport examples

Por causa desses problemas, a comunidade discutiu e chegou em algumas soluções:

SVH — Small Viewport Height

O ‘svh’ é definido considerando o tamanho do viewport quando a barra de navegação (ou outros itens do navegador) esta expandida, ou seja, quando o navegador ocupa o máximo de espaço possível o conteúdo da pagina sera o menor possível.

Como no exemplo abaixo, ‘100svh’ irá ocupar o espaço da tela considerando a barra de navegação expandida, sem “sobrar” conteúdo por baixo da barra.

viewport examples

.container {
    height: 100svh; /* O elemento terá a altura do viewport considerando a UI expandida */
}
Enter fullscreen mode Exit fullscreen mode

Quando usar:
Quando desejar garantir que o conteúdo não será coberto pela UI do navegador.

Quando evitar:
Se a UI do navegador estiver retraída, pois pode haver espaço em branco extra.

LVH — Large Viewport Units

Ja o ‘lvh’ podemos dizer que é o contrario do ‘svh’, ele é definido considerando o tamanho do viewport quando a barra de navegação ou outros itens do navegador estão retraídos, sendo assim, quando o navegador ocupa o minimo de espaço possível, o conteúdo da página será o maior possível, praticamente o ‘lvh’ age de forma semelhante ao ‘vh’.

.container {
    height: 100lvh; /* O elemento terá a altura do viewport considerando a UI retraída */
}
Enter fullscreen mode Exit fullscreen mode

Quando usar:
Para maximizar o espaço de conteúdo quando a UI do navegador estiver retraída.

Quando evitar:
Se a UI do navegador estiver expandida, pois o conteúdo pode ser coberto.

DVH — Dynamic Viewport Units

O Dinamyc Viewport, como o nome ja diz, é dinâmico, ele adapta/ajusta automaticamente o tamanho do conteúdo de acordo com a UI do navegador, seja expandida ou retraída, apesar disso parecer perfeito, é necessário estar atento, pois usar ‘dvh’ pode causar redimensionamento de conteúdo quando o usuario scrolla a pagina, oque pode causar incomodo e uma UX ruim, além de poder ser custoso em termos de performance.

.container {
    height: 100dvh; /* A altura do elemento se ajustará dinamicamente com a UI do navegador */
}
Enter fullscreen mode Exit fullscreen mode

Quando usar:
Quando desejar um ajuste dinâmico da altura conforme a UI do navegador muda.

Quando evitar:
Se o redimensionamento dinâmico puder distrair o usuário ou afetar negativamente a experiência do usuário.

Veja este exemplo no CodePen ViewPorts examples

Top comments (2)

Collapse
 
lixeletto profile image
Camilo Micheletto

Amassou no artigo ein? O quando usar/quando evitar foram a cereja do bolo!

Collapse
 
leomunizq profile image
Leonardo Muniz

Po Camilo, obrigadao mano, isso vindo de voce vale muito pra mim <3

Sentry mobile image

Mobile Vitals: A first step to Faster Apps

Slow startup times, UI hangs, and frozen frames frustrate users—but they’re also fixable. Mobile Vitals help you measure and understand these performance issues so you can optimize your app’s speed and responsiveness. Learn how to use them to reduce friction and improve user experience.

Read the guide →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay