J'utilise -webkit-transform (et -moz-transform / -o-transform) pour faire pivoter un div. Ajout de la position fixe pour que le div défile vers le bas avec l'utilisateur.
Dans Firefox, cela fonctionne bien, mais dans les navigateurs basés sur un kit Web, il est cassé. Après avoir utilisé la transformation -webkit, la position fixée ne fonctionne plus! Comment est-ce possible?
html
css
positioning
rotation
iSenne
la source
la source
Réponses:
Après quelques recherches, il y a eu un rapport de bogue sur le site Web de Chromium à propos de ce problème, jusqu'à présent, les navigateurs Webkit ne peuvent pas rendre ces deux effets ensemble en même temps.
Je suggérerais d'ajouter du Webkit uniquement CSS dans votre feuille de style et de faire de la div transformée une image et de l'utiliser comme arrière-plan.
Donc, pour l'instant, vous devrez le faire à l'ancienne, jusqu'à ce que les navigateurs Webkit rattrapent FF.
EDIT: Au 24/10/2012, le bogue n'a pas été résolu.
Cela ne semble pas être un bogue, mais un aspect de la spécification en raison des deux effets nécessitant des systèmes de coordonnées séparés et des ordres d'empilement. Comme expliqué dans cette réponse .
la source
La spécification CSS Transforms explique ce comportement. Les éléments avec des transformations agissent comme un bloc contenant pour les descendants à position fixe, donc position: fixed sous quelque chose avec une transformation n'a plus de comportement fixe.
Ils fonctionnent lorsqu'ils sont appliqués au même élément; l'élément sera positionné comme fixe, puis transformé.
la source
Pour tous ceux qui trouvent que leurs images d'arrière-plan disparaissent dans Chrome à cause du même problème avec background-attachment: corrigé; - c'était ma solution:
la source
Quelque chose (un peu hacky) qui a fonctionné pour moi est à la
position:sticky
place:la source
Août 2016 et la position fixe et l'animation / transformation sont toujours un problème. La seule solution qui a fonctionné pour moi - était de créer une animation pour l'élément enfant qui prend plus de temps.
la source
En fait, j'ai trouvé un autre moyen de corriger ce "bug":
J'ai un élément conteneur qui contient une page avec des animations css3. Lorsque la page a terminé l'animation, la propriété css3 a la valeur: transform: translate (0,0) ;. Donc, je viens de supprimer cette ligne, et tout a fonctionné comme il se doit - position: fixed s'affiche correctement. Lorsque la classe css est appliquée pour traduire la page, la propriété translate est ajoutée et l'animation css3 fonctionne également.
Exemple:
Démo: http://jsfiddle.net/ZWcD9/
la source
sur mon projet phonegap, le webkit transform -webkit-transform: translateZ (0); a fonctionné comme un charme. Il fonctionnait déjà dans Chrome et Safari, mais pas dans le navigateur mobile. il peut également y avoir un autre problème si les WRAPPER DIV ne sont pas terminés dans certains cas. nous appliquons une classe claire en cas de DIV flottants.
la source
Probablement en raison d'un bogue dans Chrome car je ne peux pas répliquer dans Safari ni Firefox, mais cela fonctionne dans Chrome 40.0.2214.111 http://jsbin.com/hacame/1/edit?html,css,output
C'est une structure très particulière, donc ce n'est en aucun cas un correctif css en une seule ligne applicable universellement, mais peut-être que quelqu'un peut le bricoler pour le faire fonctionner dans Safari et Firefox.
la source
J'ai eu ce problème en essayant d'implémenter react-color avec react-swipeable-views (rsw). Le problème pour moi était que rsw s'applique
translate(-100%, 0)
à un panneau d'onglets qui rompt la position fixe par défaut div ajoutée sur le plein écran qui, une fois cliqué, ferme le modèle de sélecteur de couleur.Pour moi, la solution était d'appliquer la transformation opposée à l'élément fixe (dans ce cas,
translate(100%, 0)
cela a résolu mon problème. Je ne suis pas sûr que cela soit utile dans d'autres cas, mais je pensais que je partagerais quand même.Voici un exemple montrant ce que j'ai décrit ci-dessus:
https://codepen.io/relativemc/pen/VwweEez
la source
L'ajout
-webkit-transform
de l'élément fixe a résolu le problème pour moi.la source
translateZ(0)
ne fonctionne PAS . C'est vrai que ça marche parfois, j'ai vu des occasions où ça marchait. Mais je ne peux toujours pas le réduire.Voici ce qui fonctionne pour moi sur tous les navigateurs et appareils mobiles testés (Chrome, IE, Firefox, Safari, iPad, iPhone 5 et 6, Android).
la source
la source
Si vous pouvez utiliser javascript comme option, cela peut être une solution de contournement pour positionner un élément fixe de position par rapport à la fenêtre lorsqu'il se trouve à l'intérieur d'un élément transformé:
Certes, vous devrez également ajuster vos hauteurs et votre largeur car
fixedEl
vous calculerez avec en fonction de son conteneur. Cela dépend de votre cas d'utilisation, mais cela vous permettra de définir de manière prévisible la position de quelque chose de fixe, quel que soit son conteneur.la source
Ajoutez une classe dynamique pendant que l'élément se transforme.
$('#elementId').addClass('transformed')
. Ensuite, déclarez en css,puis
puis
Maintenant, la position: fixe lorsqu'elle est fournie avec une valeur de propriété top et z-index sur un élément enfant fonctionne correctement et reste fixe jusqu'à ce que l'élément parent se transforme. Lorsque la transformation est annulée, l'élément enfant apparaît à nouveau comme fixe. Cela devrait faciliter la situation si vous utilisez réellement une barre latérale de navigation qui s'ouvre et se ferme en un clic, et que vous avez un ensemble d'onglets qui devrait rester collant lorsque vous faites défiler la page.
la source
dans mon cas, j'ai découvert que nous ne pouvons pas utiliser transform: translateX () avant transform: translateY (). Si nous voulons utiliser les deux, nous devrions utiliser transform: translate (,).
la source
S'il vous plaît, ne votez pas, car ce n'est pas une réponse exacte, mais cela pourrait aider quelqu'un car c'est un moyen rapide de désactiver la transformation. Si vous n'avez vraiment pas besoin de la transformation sur le parent et que vous voulez que votre position fixe fonctionne à nouveau:
la source