Estou lutando com o posicionamento fixo no iPad há um tempo. Eu conheço o iScroll e nem sempre parece funcionar (mesmo em sua demonstração). Sei também que o Sencha tem uma correção para isso, mas não consegui Ctrl+ Fo código fonte dessa correção.
Espero que alguém possa ter a solução. O problema é que os elementos de posição fixa não são atualizados quando o usuário faz um down / up em um Safari móvel com iOS.
Respostas:
Muitos navegadores móveis deliberadamente não suportam
position:fixed;
o argumento de que elementos fixos podem atrapalhar em uma tela pequena.O site Quirksmode.org tem uma publicação muito boa no blog que explica o problema: http://www.quirksmode.org/blog/archives/2010/12/the_fifth_posit.html
Consulte também esta página para obter um gráfico de compatibilidade mostrando quais navegadores móveis suportam
position:fixed;
: http://www.quirksmode.org/m/css.html(mas observe que o mundo dos navegadores móveis está se movendo muito rapidamente, portanto, tabelas como essa podem não ficar atualizadas por muito tempo!)
Atualização: iOS 5 e Android 4 são relatados como tendo posição: suporte fixo agora.
Hoje eu testei o iOS 5 em uma loja da Apple e posso confirmar que ele funciona com a posição fixa. Existem problemas com o zoom e o panorama em torno de um elemento fixo.
Achei essa tabela de compatibilidade muito mais atualizada e útil que a do quirksmode: http://caniuse.com/#search=fixed
Possui informações atualizadas no Android, Opera (mini e celular) e iOS.
fonte
position:device-fixed
seria meio redundante.position:fixed
deve funcionar apenas com as especificações do W3C.device-fixed
solução não fazia parte da minha resposta. Pode ou não ter mérito como sugestão, mas o motivo do link foi a explicação do problema, e não a solução sugerida. De qualquer forma, as coisas mudaram bastante desde que essa resposta foi postada (como eu disse) e muitos dispositivos mais novos são compatíveisfixed
. Você ainda precisa lidar com dispositivos mais antigos que não o fazem.O posicionamento fixo não funciona no iOS, como nos computadores.
Imagine que você tem uma folha de papel (a página da Web) sob uma lente de aumento (a janela de visualização); se você mover a lente de aumento e seus olhos, verá uma parte diferente da página. É assim que o iOS funciona.
Agora há uma folha de plástico transparente com uma palavra, esta folha de plástico permanece estacionária, não importa qual seja (a posição: elementos fixos). Então, quando você move a lupa, o elemento fixo parece se mover.
Como alternativa, em vez de mover a lupa, mova o papel (a página da web), mantendo a folha de plástico e a lupa imóvel. Nesse caso, a palavra na folha de plástico parecerá permanecer fixa e o restante do conteúdo parecerá mover-se (porque realmente é). Este é um navegador de desktop tradicional.
Assim, no iOS, a viewport se move; em um navegador tradicional, a página da web se move. Nos dois casos, os elementos fixos permanecem imóveis na realidade; embora no iOS os elementos fixos pareçam se mover.
A maneira de contornar isso é seguir os últimos parágrafos deste artigo
(basicamente desative a rolagem por completo, tenha o conteúdo em uma div rolável separada (veja a caixa azul na parte superior do artigo vinculado) e o elemento fixo posicionado absolutamente)
"position: fixed" agora funciona como seria de esperar no iOS5.
fonte
position: fixed funciona no android / iphone para rolagem vertical. Mas você precisa garantir que suas metatags estejam totalmente definidas. por exemplo
Além disso, se você planeja ter a mesma página funcionando no Android 4.0, você também precisa definir a posição superior, ou uma pequena margem será adicionada por algum motivo.
fonte
user-scalable=0, minimum-scale=1.0, maximum-scale=1.0
pode tornar a página menos acessível para muitos usuários. Seria útil para adicionar um aviso sobre isso em sua respostaagora suporte a apple que
fonte
background-size: cover
efixed
edição no iPadoverflow
tem de ser definido parascroll
Eu tive esse problema no Safari (iOS 10.3.3) - o navegador não foi redesenhado até que o evento do touchend fosse disparado. Os elementos fixos não apareceram ou foram cortados.
O truque para mim foi adicionar transform: translate3d (0,0,0); ao meu elemento de posição fixa.
EDIT - Agora eu sei por que a transformação corrige o problema: aceleração de hardware. A adição da transformação 3D aciona a aceleração da GPU, facilitando a transição. Para obter mais informações sobre a aceleração de hardware, consulte este artigo: http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-css .
fonte
fixed
, adicionou otransform
e isso foi corrigido.Rodapé fixo (aqui com jQuery):
Espero que ajude.
fonte
Evite na mesma caixa usando transform: --- e position: fixed. O elemento permanecerá na posição: estático se houver alguma transformação.
fonte
Acabei usando o novo jQuery Mobile v1.1: http://jquerymobile.com/blog/2012/04/13/announcing-jquery-mobile-1-1-0/
fonte
position:fixed
elemento "flutuante" apareça na frente da sua página de rolagem, basta atribuir umz-index
valor mais alto para que fique na frente.Usando jquery eu sou capaz de chegar a isso. ele não rola suavemente, mas faz o truque. você pode rolar para baixo e a div fixa aparece na parte superior.
O CSS
O HTML
THE JQUERY
Finalmente, queremos determinar se o ipod touch no modo paisagem ou retrato será exibido adequadamente
fonte
Embora o atributo CSS
{position:fixed;}
pareça (na maioria das vezes) funcionar em dispositivos iOS mais novos, é possível fazer com que o dispositivo funcione de vez{position:relative;}
em quando e sem motivo ou motivo. Normalmente, limpar o cache ajudará, até que algo aconteça e a peculiaridade aconteça novamente.Especificamente, da própria Apple Preparando o conteúdo da Web para iPad :
O que é irônico, os dispositivos Android não parecem ter esse problema. Além disso, é totalmente possível usá-lo
{position:absolute;}
quando em referência à etiqueta do corpo e não apresentar nenhum problema.Eu encontrei a causa raiz dessa peculiaridade; que o evento de rolagem não está funcionando bem quando usado em conjunto com a tag HTML ou BODY. Às vezes, ele não gosta de disparar o evento ou você terá que esperar até que o evento de balanço de rolagem termine para receber o evento. Especificamente, a viewport é redesenhada no final deste evento e elementos fixos podem ser reposicionados em outro lugar na viewport.
Então é isso que eu faço: ( evite usar a viewport e fique com o DOM! )
Em essência, isso fará com que o BODY seja do tamanho da viewport e não seja rolável. O DIV rolável aninhado no interior rolará como o BODY normalmente faria (menos o efeito de balanço, para que a rolagem pare no toque). O DIV fixo permanece fixo sem interferência.
Como observação lateral,
z-index
é importante um alto valor no DIV fixo para manter o DIV rolável atrás dele. Normalmente, eu adiciono o redimensionamento de janelas e os eventos de rolagem também para compatibilidade entre navegadores e resolução de tela alternativa.Se tudo mais falhar, o código acima também funcionará com os DIVs fixos e roláveis configurados como
{position:absolute;}
.fonte
A maneira simples de corrigir esse problema apenas digita a propriedade transform do seu elemento. e será corrigido. Happy Coding :-)
Além disso, você pode tentar o seu caminho, assim também é um bom trabalho.
fonte
Isso pode não ser aplicável a todos os cenários, mas eu descobri que a
position: sticky
mesma coisaposition: fixed
só funciona em iPhones antigos quando o contêiner de rolagem não é o corpo, mas dentro de outra coisa.Exemplo de pseudo html:
A div pegajosa será pegajosa nos navegadores da área de trabalho, mas em certos dispositivos testados com: Chromium: dev tools: emultação de dispositivo: iPhone 6/7/8 e no Android 4 Firefox, não.
O que vai funcionar, no entanto, é
fonte
No meu caso, foi porque o elemento fixo estava sendo mostrado usando uma animação. Conforme declarado neste link :
fonte
aqui está a minha solução para isso ...
CSS
HTML
A explicação é que a posição fixada para a div manterá a div em segundo plano o tempo todo; depois, esticamos a div para ir em todos os cantos do navegador (desde que a margem do corpo = 0) use o botão (esquerdo, direito, superior, inferior) ) simultaneamente.
Certifique-se de não usar a largura e a altura, pois isso substituirá as opções superior, esquerda, direita e inferior.
fonte