Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um PWA (Aplicativo Web Progressivo) instalado na área de trabalho pode exibir conteúdo onde a barra de título normalmente está, para fazer o PWA parecer mais nativo, usando a API de Sobreposição de Controles de Janela.
A API de sobreposição de controles de janela faz o seguinte:
- Permite exibir conteúdo da Web em toda a área da superfície do aplicativo.
- Move os controles de janela críticos exigidos pelo sistema para uma sobreposição.
- Possibilita que seu conteúdo fique longe dessa sobreposição.
Um PWA (Aplicativo Web Progressivo) pode definir como ele deve ser exibido em plataformas móveis, usando o membro de exibição no arquivo de manifesto do aplicativo Web. No entanto, para criar uma experiência imersiva e nativa, os PWAs de desktop podem usar outra abordagem.
Por padrão, um PWA instalado na área de trabalho pode exibir conteúdo em uma área que começa imediatamente abaixo da área da barra de título reservada:
Exibir conteúdo onde a barra de título normalmente está pode ajudar os PWAs a se sentirem mais nativos. Muitos aplicativos da área de trabalho, como o Visual Studio Code, o Microsoft Teams e o Microsoft Edge, já fazem isso:
Habilitar a sobreposição de controles de janela em seu aplicativo
Primeiro, habilite o recurso Sobreposição de Controles de Janela no arquivo de manifesto do aplicativo Web do seu aplicativo. Para fazer isso, no arquivo de manifesto, defina a display_override propriedade:
{
"display_override": ["window-controls-overlay"]
}
Veja também:
- display_override no MDN > Referências > manifestos do aplicativo Web.
- Manifestos do aplicativo Web em Referências do MDN > .
- O manifesto do aplicativo Web em Tornando os PWAs instaláveis no MDN > Referências > Guias de aplicativos > Web progressivos.
Use variáveis de ambiente CSS para evitar a sobreposição
A env() função CSS pode ser usada para acessar variáveis de ambiente definidas pelo agente do usuário.
Quatro variáveis de ambiente são adicionadas pelo recurso Sobreposição de Controles de Janela:
| Variável | Descrição |
|---|---|
titlebar-area-x |
A distância, em px, da área normalmente ocupada pela barra de título do lado esquerdo da janela. |
titlebar-area-y |
A distância, em px, da área normalmente ocupada pela barra de título a partir do lado superior da janela. |
titlebar-area-width |
A largura da área da barra de título, em px. |
titlebar-area-height |
A altura da área da barra de título, em px. |
Você pode usar essas variáveis de ambiente para posicionar e dimensionar seu próprio conteúdo onde a barra de título normalmente apareceria, quando o recurso de sobreposição de controles de janela está desabilitado:
#title-bar {
position: fixed;
left: env(titlebar-area-x, 0);
top: env(titlebar-area-y, 0);
height: env(titlebar-area-height, 50px);
width: env(titlebar-area-width, 100%);
}
O uso position: fixed; garante que a barra de título não role com o restante do conteúdo e permaneça alinhada com a sobreposição dos controles da janela.
Saber onde está a sobreposição e quão grande ela é é importante. A sobreposição pode nem sempre estar do mesmo lado da janela; no macOS, a sobreposição fica no lado esquerdo, mas no Windows, a sobreposição fica no lado direito. Além disso, a sobreposição pode não ter sempre o mesmo tamanho.
A env() função CSS usa um segundo parâmetro que é útil para definir a posição do conteúdo do aplicativo quando o recurso de sobreposição de controles de janela está ausente ou desabilitado.
Fazer de uma região uma alça de arrastar para a janela
Quando a barra de título está oculta, somente os controles de janela críticos do sistema permanecem visíveis (os ícones Maximizar, Minimizar, Fechar e Informações do Aplicativo ). Isso significa que há muito pouco espaço disponível para os usuários moverem a janela do aplicativo.
Você pode usar a app-region propriedade CSS para oferecer mais maneiras para os usuários arrastarem o aplicativo. Por exemplo, se seu aplicativo tiver sua própria barra de título, você poderá transformar sua barra de título em uma alça de arrastar da janela:
#title-bar {
position: fixed;
left: env(titlebar-area-x, 0);
top: env(titlebar-area-y, 0);
height: env(titlebar-area-height, 50px);
width: env(titlebar-area-width, 100%);
app-region: drag;
}
React para sobrepor alterações
Um usuário pode alternar a barra de título ou alterar as dimensões da janela enquanto o aplicativo está em execução. Saber quando essas coisas acontecem pode ser importante para seu aplicativo. Seu aplicativo pode precisar reorganizar parte do conteúdo exibido na barra de título ou reorganizar o layout em outro lugar da página.
Para escutar as alterações, use o geometrychange evento no navigator.windowControlsOverlay objeto. Para detectar se a barra de título está visível, use a visiblenavigator.windowControlsOverlay propriedade no objeto.
O geometrychange evento é acionado com muita frequência quando o usuário redimensiona a janela. Para evitar a execução de código que altera o layout com muita frequência e causa problemas de desempenho no aplicativo, use uma debounce função para limitar quantas vezes o evento é manipulado. Veja a diferença entre limitação e debouncing.
const debounce = (func, wait) => {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
};
if ('windowControlsOverlay' in navigator) {
navigator.windowControlsOverlay.addEventListener('geometrychange', debounce(e => {
// Detect if the Window Controls Overlay is visible.
const isOverlayVisible = navigator.windowControlsOverlay.visible;
// Get the size and position of the title bar area.
const titleBarRect = e.titlebarAreaRect;
console.log(`The overlay is ${isOverlayVisible ? 'visible' : 'hidden'}, the title bar width is ${titleBarRect.width}px`);
}, 200));
}
Aplicativo de demonstração
1DIV é um aplicativo de demonstração do PWA que usa o recurso Sobreposição de Controles de Janela.
No Microsoft Edge, abra o aplicativo de demonstração 1DIV em uma nova janela ou guia.
Na barra de endereços, clique no aplicativo disponível. Instale o 1DIV (
). A caixa de diálogo Instalar aplicativo 1DIV é aberta.Clique no botão Instalar . O aplicativo 1DIV é aberto em sua própria janela, com a caixa de diálogo Aplicativo instalado aberta:
Clique no botão Fechar (X) da caixa de diálogo. (Ou marque ou desmarque as caixas de seleção e clique no botão Permitir .)
A barra de título do aplicativo contém pelo menos os seguintes controles de janela:
Ícone Dica de ferramenta
Configurações e mais
Minimize
Restaurar
Close O aplicativo agora exibe o conteúdo até a parte superior do quadro da janela, onde a barra de título costumava estar:
A área superior do aplicativo é uma alça de arrastar para permitir que os usuários movam a janela.
O código-fonte deste aplicativo de demonstração está no repositório 1DIV .
O arquivo de origem manifest.json declara o uso do recurso de Sobreposição de Controles de Janela pelo aplicativo.
O arquivo de origemapp.js usa o
navigator.windowControlsOverlayobjeto.O arquivo de origem app.css usa as
titlebar-area-*variáveis de ambiente CSS.
Visualizar a sobreposição personalizada sem instalar o PWA
No Microsoft Edge DevTools, na ferramenta Aplicativo , você pode simular o recurso Sobreposição de Controles de Janela (WCO), sem precisar instalar o PWA primeiro e habilitar o recurso WO. Simulando o recurso WCO no DevTools, você pode testar alterações de código CSS para a área da barra de título mais rapidamente do que reinstalando o PWA revisado.
A sobreposição simulada é uma imagem estática. Os valores das variáveis env(titlebar-area-left)CSS , env(titlebar-area-top), env(titlebar-area-width), e env(titlebar-area-height) são definidos para corresponder à plataforma selecionada.
Consulte Simular a API de sobreposição de controles de janela sem instalar o PWA.
Confira também
- Simule a API de Sobreposição de Controles de Janela sem instalar o PWA - recurso DevTools.
MDN:
- API de sobreposição de controles de janela
- O manifesto do aplicativo Web em Tornando os PWAs instaláveis no MDN > Referências > Guias de aplicativos > Web progressivos.
-
Manifestos do aplicativo Web em Referências do MDN > .
- display_override no manfest.
- Exibir no manifesto.
-
env()Função CSS.
Blog:
YouTube:
Demonstração:
- 1DIV ao vivo
-
/1DIV/ código-fonte
- manifest.json
-
app.js- usa o
navigator.windowControlsOverlayobjeto. -
app.css - usa as
titlebar-area-*variáveis de ambiente CSS.