Position Fixed funktioniert nicht, wenn -webkit-transform verwendet wird

Lesezeit: 7 Minuten

Benutzeravatar von iSenne
iSenne

Ich verwende -webkit-transform (und -moz-transform / -o-transform), um ein div zu drehen. Haben Sie auch eine feste Position hinzugefügt, damit das div mit dem Benutzer nach unten scrollt.

In Firefox funktioniert es gut, aber in Webkit-basierten Browsern ist es kaputt. Nach Verwendung des -webkit-transform funktioniert die fixierte Position nicht mehr! Wie ist das möglich?

  • Eine Demo-Seite hilft den Leuten oft bei der Beantwortung von Fragen. Mit jsbin.com können Sie temporäre Seiten erstellen, um das Problem zu veranschaulichen, wenn Sie nicht auf Ihre Site verlinken möchten.

    – Rich Bradshaw

    14. April 2010 um 11:53 Uhr

  • jsfiddle.net ist ein weiteres gutes Beispiel für eine temporäre Bearbeitungsablage.

    – Kyle

    14. April 2010 um 12:04 Uhr

  • @Rich Bradshaw jsbin.com ist sehr nett. Wusste es bis jetzt nicht. Die meisten meiner Projekte führe ich lokal aus, also werde ich es das nächste Mal verwenden. Tnx

    – iSenne

    15. April 2010 um 8:57 Uhr

  • Es funktioniert nicht fein in Firefox überhaupt.

    – vsync

    12. August 2014 um 15:27 Uhr


  • Immer noch ein Problem im Jahr 2017. Scheint, dass sie immer noch an dem “It’s a feature not a bug!” festhalten. Streit…

    – max

    20. Dezember 2017 um 16:02 Uhr

Der CSS-Transformationsspezifikation erklärt dieses Verhalten. Elemente mit Transformationen fungieren als umschließender Block für Nachkommen mit fester Position, sodass position:fixed unter etwas mit einer Transformation kein festes Verhalten mehr hat.

Sie funktionieren, wenn sie auf dasselbe Element angewendet werden; Das Element wird als fixiert positioniert und dann transformiert.

  • Das ist die einzig hilfreiche und richtige Antwort. Stoppen Sie die Übersetzung des übergeordneten Elements und übersetzen Sie die untergeordneten Elemente, in denen das feste Element Teil davon ist. Hier ist meine Geige:JSFIDDLE

    – Falk

    18. Juli 2016 um 10:30 Uhr


  • und was ist, wenn ich auch ein festes Element transformieren möchte?

    – Markus

    7. September 2016 um 8:26 Uhr

Kyles Benutzeravatar
Kyle

Nach einiger Recherche gab es eine Fehlerbericht auf der Chrom Website zu diesem Problem, bisher können Webkit-Browser diese beiden Effekte nicht gleichzeitig darstellen.

Ich würde vorschlagen, Ihrem Stylesheet etwas nur Webkit-CSS hinzuzufügen und das transformierte div zu einem Bild zu machen und es als Hintergrund zu verwenden.

@media screen and (-webkit-min-device-pixel-ratio:0) {
  /* Webkit-specific CSS here (Chrome and Safari) */

  #transformed_div {
    /* styles here, background image etc */
  }
}

Im Moment müssen Sie es also auf die altmodische Weise tun, bis die Webkit-Browser zu FF aufschließen.

EDIT: Bis zum 24.10.2012 wurde der Fehler nicht behoben.


Dies scheint kein Fehler zu sein, sondern ein Aspekt der Spezifikation, da die beiden Effekte separate Koordinatensysteme und Stapelreihenfolgen erfordern. Wie in dieser Antwort erläutert.

  • Auch Jahre später immer noch nicht gelöst. Ziemlich traurig.

    – Alkanschel

    13. März 2015 um 22:46 Uhr

  • Laut dieser Antwort ist es kein Fehler, sondern Teil der Spezifikation.

    – Michael

    17. März 2015 um 15:49 Uhr

  • Lehnen Sie sich zurück und sehen Sie zu – ich wette, es wird sein 10-jähriges Jubiläum erleben

    – lzl124631x

    29. Oktober 2016 um 11:25 Uhr

  • 30. August 2017, Logbuch des Kapitäns. Wir sind auch auf die seltsame Anomalie gestoßen, die vor so langer Zeit von anderen Kapitänen beschrieben wurde. Eine Lösung muss noch implementiert werden.

    – Luorisieren

    30. August 2017 um 11:30 Uhr

  • Das ist der Fehler, vor dem mich der Vater meines Vaters gewarnt hat.

    – Daniel Aagentah

    10. Oktober 2018 um 15:22 Uhr

Etwas (ein bisschen hacky), das für mich funktioniert hat, ist zu position:sticky stattdessen:

.fixed {
     position: sticky;
}

  • updates.html5rocks.com/2012/08/… ah yeah.. aber anscheinend noch nicht gut unterstützt

    – coiso

    10. März 2014 um 17:54 Uhr

  • klebrig ist anders. Das Hauptproblem ist, dass wir mit Fixed die Position des Containers ignorieren wollen (sehr nützlich, z. B. für Deckkraftanimationen). Ich kann nicht glauben, dass dieser Fehler Jahre später immer noch da ist. Schrecklich.

    – FlorianB

    7. Juli 2016 um 0:09 Uhr

  • Das ist die richtige Lösung im Jahr 2022. position: sticky wird weitgehend unterstützt und behebt dieses Verhalten.

    – Kasim

    20. Juni 2022 um 9:10 Uhr

Für alle, die feststellen, dass ihre Hintergrundbilder in Chrome wegen des gleichen Problems mit dem Hintergrundanhang verschwinden: behoben; – das war meine Lösung:

// run js if Chrome is being used
if(navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
    // set background-attachment back to the default of 'scroll'
    $('.imagebg').css('background-attachment', 'scroll');

    // move the background-position according to the div's y position
    $(window).scroll(function(){

        scrollTop = $(window).scrollTop();
        photoTop = $('.imagebg').offset().top;
        distance = (photoTop - scrollTop);
        $('.imagebg').css('background-position', 'center ' + (distance*-1) + 'px');

    });
}  

Benutzeravatar von defligra
defligra

August 2016 und fixe Position & Animation/Transformation ist immer noch ein Problem. Die einzige Lösung, die für mich funktioniert hat, war das Erstellen einer Animation für das untergeordnete Element, die länger dauert.

  • Bitte antworten Sie auf neue Fragen. Diese Fragen brauchen Sie mehr als die Person, die diese Frage 2010 gestellt hat. Sie müssen das Problem inzwischen gelöst haben, finden Sie nicht? Auch diese Frage hat bereits eine akzeptierte Antwort.

    – Umair Farooq

    16. August 2016 um 19:51 Uhr

  • Nö! Es ist immer noch ein Problem … die Person, die die Frage gestellt hat, hat vielleicht eine andere Lösung gefunden – aber ich habe diesen Thread aus einem bestimmten Grund gefunden.

    – defligra

    16. August 2016 um 19:55 Uhr

  • Wie du möchtest. Ich habe diesen Kommentar hinterlassen, als ich die ersten Fragen von Leuten überprüft habe. Und da Sie erst heute beigetreten sind und es Ihre erste Antwort und auch eine späte Antwort war, habe ich diesen Kommentar hinterlassen. Ich habe nicht abgelehnt. Das ist eine gute Chance für Sie.

    – Umair Farooq

    16. August 2016 um 20:07 Uhr

  • @UmairFarooq Vielleicht wäre es nutzlos, eine weitere Frage zu stellen, da sie als Duplikat markiert werden könnte. Ich bin nur mit einer Google-Suche hierher gekommen und fand diese Frage nützlich. defligra auch antworten.

    – koMah

    13. Dezember 2016 um 12:25 Uhr

Benutzeravatar von lowselfconscioussucks
geringes Selbstwertgefühl ist scheiße

Eigentlich habe ich einen anderen Weg gefunden, diesen “Fehler” zu beheben:

Ich habe ein Containerelement, das eine Seite mit CSS3-Animationen enthält. Wenn die Seite die Animation abgeschlossen hat, hat die css3-Eigenschaft den Wert: transform: translate(0,0);. Also habe ich diese Zeile einfach entfernt und alles funktionierte wie es sollte – position: fixed wird richtig angezeigt. Wenn die CSS-Klasse angewendet wird, um die Seite zu übersetzen, wird die Translate-Eigenschaft hinzugefügt und die CSS3-Animation funktionierte ebenfalls.

Beispiel:

.page {
     top: 50px;
     position: absolute;
     transition: ease 0.6s all;
     /* -webkit-transform: translate(0, 0); */
     /* transform: translate(0,0); */
 }
 .page.hide {
     -webkit-transform: translate(100%, 0);
     transform: translate(-100%, 0);    
 }

Demo:
http://jsfiddle.net/ZWcD9/

  • Bitte antworten Sie auf neue Fragen. Diese Fragen brauchen Sie mehr als die Person, die diese Frage 2010 gestellt hat. Sie müssen das Problem inzwischen gelöst haben, finden Sie nicht? Auch diese Frage hat bereits eine akzeptierte Antwort.

    – Umair Farooq

    16. August 2016 um 19:51 Uhr

  • Nö! Es ist immer noch ein Problem … die Person, die die Frage gestellt hat, hat vielleicht eine andere Lösung gefunden – aber ich habe diesen Thread aus einem bestimmten Grund gefunden.

    – defligra

    16. August 2016 um 19:55 Uhr

  • Wie du möchtest. Ich habe diesen Kommentar hinterlassen, als ich die ersten Fragen von Leuten überprüft habe. Und da Sie erst heute beigetreten sind und es Ihre erste Antwort und auch eine späte Antwort war, habe ich diesen Kommentar hinterlassen. Ich habe nicht abgelehnt. Das ist eine gute Chance für Sie.

    – Umair Farooq

    16. August 2016 um 20:07 Uhr

  • @UmairFarooq Vielleicht wäre es nutzlos, eine weitere Frage zu stellen, da sie als Duplikat markiert werden könnte. Ich bin nur mit einer Google-Suche hierher gekommen und fand diese Frage nützlich. defligra auch beantworten.

    – koMah

    13. Dezember 2016 um 12:25 Uhr

Benutzeravatar von mrmadhat
mrmadhat

Ich hatte dieses Problem, als ich versuchte, React-Color mit React-Swipeable-Views (rsw) zu implementieren. Das Problem für mich war, dass rsw gilt translate(-100%, 0) zu einem Registerkartenfeld, das das standardmäßige div mit fester Position aufhebt, das über dem gesamten Bildschirm hinzugefügt wird und beim Klicken das Farbwählermodell schließt.

Für mich bestand die Lösung darin, die entgegengesetzte Transformation auf das feste Element anzuwenden (in diesem Fall translate(100%, 0) was mein Problem behoben hat. Ich bin mir nicht sicher, ob dies in anderen Fällen nützlich ist, aber ich dachte, ich würde es trotzdem teilen.

Hier ist ein Beispiel, das zeigt, was ich oben beschrieben habe:

https://codepen.io/relativemc/pen/VwweEez

1446160cookie-checkPosition Fixed funktioniert nicht, wenn -webkit-transform verwendet wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy