Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao desenvolver aplicações web otimizadas para dispositivos móveis, uma questão recorrente é como garantir que o conteúdo da página se ajuste adequadamente quando o teclado virtual é ativado. Recentemente, o suporte ao valor resizes-content na meta tag viewport foi ampliado em navegadores como Chrome e Firefox, permitindo que a janela do navegador ajuste seu tamanho ao abrir o teclado, empurrando o conteúdo para cima ao invés de sobrepor.
Porém, o Safari no iOS ainda não suporta nativamente este valor, o que leva a um problema prático: ao abrir o teclado, o conteúdo não se ajusta automaticamente, ficando escondido ou sobreposto, prejudicando a experiência do usuário.
O método tradicional de detectar mudanças na altura do viewport envolve o evento resize do visualViewport. Uma abordagem comum é ajustar a altura do documento ou de elementos específicos com base no valor de visualViewport.height. Contudo, o Safari, ao lidar com o teclado na tela, faz uma manipulação que estende o comprimento do documento para permitir que o usuário navegue por áreas que, por padrão, ficariam inacessíveis, criando um desafio para qualquer solução que dependa somente de eventos de resize.
Além disso, recursos como navigator.virtualKeyboard.overlaysContent não são suportados pelo Safari, eliminando uma possível estratégia de detecção de overlay do teclado, o que reforça a complexidade da tarefa. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Apesar das limitações, é possível monitorar o visualViewport para detectar mudanças de altura. Uma estratégia consiste em criar um listener de resize e ajustar a altura do conteúdo do body ou de um container específico, levando em consideração as peculiaridades do Safari. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Exemplo de pseudocódigo:
function ajustarAltura() {
const viewportHeight = window.visualViewport.height. document.body.style.minHeight = viewportHeight + 'px'. }
window.visualViewport.addEventListener('resize', ajustarAltura). // Executar ao carregar para inicializar
ajustarAltura(). A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Porém, essa abordagem pode não ser suficiente devido à manipulação que o Safari faz ao abrir o teclado. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Outra tática é aplicar margens ou padding que se ajustam dinamicamente com base na altura detectada, tentando criar uma área de visualização consistente. Essa técnica melhora a experiência, mas exige testes exaustivos para evitar efeitos colaterais, como rolagem inesperada ou conteúdo cortado. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Implementar um comportamento que, ao focar em inputs próximos ao final da página, rola a tela para uma posição segura pode ajudar. Por exemplo, após foco, usar scrollIntoView() no elemento com foco para garantir que ele esteja visível mesmo com o teclado aberto. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois.
inputElement.addEventListener('focus', () => {
inputElement.scrollIntoView({ behavior: 'smooth', block: 'center' }). }).
Para páginas que dependem de ajuste fino, dividir o conteúdo em componentes menores ou ter áreas específicas que se ajustam ao abrir o teclado pode facilitar a manutenção e reduzir o impacto de mudanças globais. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
1. Implementar monitoramento de visualViewport para detectar mudanças.
2. Ajustar dinamicamente o layout do conteúdo com base na altura detectada.
3. Incorporar rolagem automática ao focar em inputs próximos ao final da página.
4. Testar exaustivamente em dispositivos reais, considerando diferentes tamanhos de tela e versões do sistema.
5. Monitorar a experiência do usuário e ajustar conforme necessário, especialmente em cenários de uso intensivo de formulários.
A compatibilidade total ainda não está garantida, mas essas abordagens podem melhorar significativamente a experiência em iOS Safari, mesmo sem suporte nativo ao resizes-content. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Carregando comentários...