J'ai des difficultés avec le positionnement fixe sur iPad depuis un certain temps. Je connais iScroll et cela ne semble pas toujours fonctionner (même dans leur démo). Je sais aussi que Sencha a un correctif pour cela, mais je ne pourrais pas Ctrl+ Fle code source pour ce correctif.
J'espère que quelqu'un aura la solution. Le problème est que les éléments positionnés fixes ne sont pas mis à jour lorsque l'utilisateur effectue un panoramique vers le bas / le haut sur un Safari mobile alimenté par iOS.
Réponses:
De nombreux navigateurs mobiles ne prennent pas en charge délibérément
position:fixed;
au motif que des éléments fixes pourraient gêner sur un petit écran.Le site Quirksmode.org a un très bon article de blog qui explique le problème: http://www.quirksmode.org/blog/archives/2010/12/the_fifth_posit.html
Consultez également cette page pour un tableau de compatibilité indiquant les navigateurs mobiles pris en charge
position:fixed;
: http://www.quirksmode.org/m/css.html(mais notez que le monde des navigateurs mobiles évolue très rapidement, donc des tableaux comme celui-ci peuvent ne pas rester à jour très longtemps!)
Mise à jour: iOS 5 et Android 4 auraient tous deux une position: support fixe maintenant.
J'ai testé moi-même iOS 5 dans un Apple Store aujourd'hui et je peux confirmer qu'il fonctionne avec une position fixe. Il y a cependant des problèmes avec le zoom avant et le panoramique autour d'un élément fixe.
J'ai trouvé ce tableau de compatibilité beaucoup plus à jour et utile que celui de quirksmode: http://caniuse.com/#search=fixed
Il a des informations à jour sur Android, Opera (mini et mobile) et iOS.
la source
position:device-fixed
serait un peu redondant.position:fixed
devrait juste fonctionner selon les spécifications du W3C.device-fixed
solution ne faisait pas partie de ma réponse. Il peut ou non avoir du mérite en tant que suggestion, mais la raison du lien était l'explication du problème plutôt que sa solution suggérée. Dans tous les cas, les choses ont beaucoup évolué depuis que cette réponse a été publiée (comme je l'ai dit), et de nombreux appareils plus récents prennent en chargefixed
. Cependant, vous devez toujours gérer des appareils plus anciens qui ne le font pas.Le positionnement fixe ne fonctionne pas sur iOS comme il le fait sur les ordinateurs.
Imaginez que vous ayez une feuille de papier (la page Web) sous une loupe (la fenêtre), si vous déplacez la loupe et votre œil, vous voyez une partie différente de la page. C'est ainsi que fonctionne iOS.
Maintenant, il y a une feuille de plastique transparent avec un mot dessus, cette feuille de plastique reste immobile quoi qu'il arrive (la position: éléments fixes). Ainsi, lorsque vous déplacez la loupe, l'élément fixe semble bouger.
Alternativement, au lieu de déplacer la loupe, vous déplacez le papier (la page Web), en gardant la feuille de plastique et la loupe immobiles. Dans ce cas, le mot sur la feuille de plastique semblera rester fixe, et le reste du contenu semblera bouger (car il l'est en fait) Il s'agit d'un navigateur de bureau traditionnel.
Ainsi, dans iOS, la fenêtre se déplace, dans un navigateur traditionnel, la page Web se déplace. Dans les deux cas, les éléments fixes restent toujours en réalité; bien que sur iOS, les éléments fixes semblent bouger.
Le moyen de contourner ce problème est de suivre les derniers paragraphes de cet article
(fondamentalement, désactivez complètement le défilement, placez le contenu dans un div de défilement séparé (voir la boîte bleue en haut de l'article lié) et l'élément fixe positionné de manière absolue)
"position: fixed" fonctionne désormais comme prévu dans iOS5.
la source
position: fixe fonctionne sur Android / iPhone pour le défilement vertical. Mais vous devez vous assurer que vos balises meta sont entièrement définies. par exemple
De plus, si vous prévoyez d'avoir la même page de travail sur Android pré 4.0, vous devez également définir la position supérieure, sinon une petite marge sera ajoutée pour une raison quelconque.
la source
user-scalable=0, minimum-scale=1.0, maximum-scale=1.0
peut rendre la page moins accessible pour de nombreux utilisateurs. Il serait utile d'ajouter un avertissement à ce sujet dans votre réponsemaintenant Apple prend en charge cela
la source
background-size: cover
etfixed
question sur l'iPadoverflow
doit être défini surscroll
J'ai eu ce problème sur Safari (iOS 10.3.3) - le navigateur n'était pas en train de redessiner jusqu'à ce que l'événement touchend soit déclenché. Les éléments fixes ne sont pas apparus ou ont été coupés.
L'astuce pour moi était d'ajouter transform: translate3d (0,0,0); à mon élément de position fixe.
EDIT - Je sais maintenant pourquoi la transformation résout le problème: l'accélération matérielle. L'ajout de la transformation 3D déclenche l'accélération GPU pour une transition en douceur. Pour plus d'informations sur l'accélération matérielle, consultez cet article: http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-css .
la source
fixed
, a ajouté letransform
et cela a été corrigé.Pied de page fixe (ici avec jQuery):
J'espère que ça aide.
la source
Évitez sur la même boîte d'utiliser transform: --- et position: fixed. L'élément restera en position: statique s'il y a une transformation.
la source
J'ai fini par utiliser le nouveau jQuery Mobile v1.1: http://jquerymobile.com/blog/2012/04/13/announcing-jquery-mobile-1-1-0/
la source
position:fixed
élément "flottant" apparaisse devant votre page défilante, il vous suffit de lui donner unez-index
valeur plus élevée pour qu'il reste devant.en utilisant jquery, je suis capable de trouver ceci. il ne défile pas facilement, mais il fait l'affaire. vous pouvez faire défiler vers le bas et le div fixe apparaît en haut.
LE CSS
LE HTML
LE JQUERY
Enfin, nous voulons déterminer si l'iPod touch en mode paysage ou portrait doit s'afficher en conséquence
la source
Même si l'attribut CSS
{position:fixed;}
semble (principalement) fonctionner sur les appareils iOS plus récents, il est possible que l'appareil soit bizarre et se replie à l'{position:relative;}
occasion et sans cause ni raison. Habituellement, vider le cache aidera jusqu'à ce que quelque chose se produise et que la bizarrerie se reproduise.Plus précisément, depuis Apple lui-même Préparation de votre contenu Web pour iPad :
Ce qui est ironique, les appareils Android ne semblent pas avoir ce problème. En outre, il est tout à fait possible de l'utiliser
{position:absolute;}
en référence à la balise body et sans aucun problème.J'ai trouvé la cause profonde de cette bizarrerie; que c'est l'événement de défilement qui ne joue pas bien lorsqu'il est utilisé en conjonction avec la balise HTML ou BODY. Parfois, il n'aime pas déclencher l'événement, ou vous devrez attendre la fin de l'événement de swing de défilement pour recevoir l'événement. Plus précisément, la fenêtre est redessinée à la fin de cet événement et les éléments fixes peuvent être repositionnés ailleurs dans la fenêtre.
Voici donc ce que je fais: ( évitez d'utiliser la fenêtre, et restez avec le DOM! )
En substance, cela fera que le BODY aura la taille de la fenêtre et ne pourra pas faire défiler. Le DIV déroulant imbriqué à l'intérieur défilera comme le ferait normalement le CORPS (moins l'effet de swing, donc le défilement s'arrête au toucher.) Le DIV fixe reste fixe sans interférence.
En remarque, une
z-index
valeur élevée sur le DIV fixe est important pour que le DIV défilable semble être derrière. J'ajoute normalement des événements de redimensionnement et de défilement de la fenêtre également pour la compatibilité entre les navigateurs et la résolution alternative de l'écran.Si tout le reste échoue, le code ci-dessus fonctionnera également avec les DIV fixe et défilable définis sur
{position:absolute;}
.la source
La manière simple de résoudre ce problème tape simplement la propriété de transformation pour votre élément. et ce sera réparé. Codage heureux :-)
Vous pouvez également essayer son chemin, cela fonctionne également très bien.
la source
Cela ne s'applique peut-être pas à tous les scénarios, mais j'ai trouvé que la
position: sticky
(même chose avecposition: fixed
) ne fonctionne que sur les anciens iPhones lorsque le conteneur de défilement n'est pas le corps, mais à l'intérieur d'autre chose.Exemple de pseudo html:
Le div sticky sera collant sur les navigateurs de bureau, mais avec certains appareils, testés avec: Chromium: outils de développement: émultation d'appareil: iPhone 6/7/8, et avec Android 4 Firefox, ce ne sera pas le cas.
Ce qui fonctionnera, cependant, est
la source
Dans mon cas, c'était parce que l'élément fixe était affiché à l'aide d'une animation. Comme indiqué dans ce lien :
la source
voici ma solution à cela ...
CSS
HTML
L'explication est que la position fixée pour le div gardera le div en arrière-plan à tout moment, puis nous étirons le div pour aller sur tous les coins du navigateur (à condition que la marge du corps = 0) en utilisant le (gauche, droite, haut, bas ) simultanément.
Veuillez vous assurer de ne pas utiliser la largeur et la hauteur car cela remplacera les options en haut, à gauche, à droite et en bas.
la source