Transformacja CSS powoduje migotanie w Safari, ale tylko wtedy, gdy przeglądarka ma szerokość>= 2000px

Dobrze to przeczytałeś. Testowano na wielu komputerach w biurze i jedyną różnicą między scenariuszami był Rozmiar przeglądarki. Współpracownik zawęził to do 2000px sweet spot. Lo-and-behold gdy zmienimy Rozmiar naszych przeglądarek na > = 2000px wide i najedziemy myszką na element z animacją przekształcenia, różne elementy na stronie - w szczególności każdy element z gradientowym tłem CSS-będą migotać. Odwrotnie, jeśli zmienisz rozmiar przeglądarki na Ktoś jeszcze widział to dziwne zachowanie? Dlaczego 2000px jest magiczną liczbą i co dokładnie dzieje się w 2000px?

Uwaga - tak naprawdę nie mogę udostępniać zrzutów ekranu / wideo / linków, ponieważ ta strona nie jest jeszcze Publiczna, a kod jest stosunkowo niepotrzebny, ponieważ wydaje się to być bardziej problem z przeglądarką niż cokolwiek innego.

Uwaga 2 - moje pytanie dotyczy tego co dokładnie dzieje się w Safari na 2000px, niekoniecznie jak naprawić migotanie za pomocą backface-visibility lub translateZ lub tym podobne. Powodem jest to, że używamy -webkit-font-smoothing: subpixel-antialiased; obficie w całej witrynie i użycie któregokolwiek z tych sztuczek przebija tę właściwość dla całej strony, włączając antyaliasing / skalę szarości dla całego tekstu.

EDIT- ok, przepraszam, że nie zrobiłem tego wcześniej. Oto fragment kodu w jsFiddle, który powinien odtworzyć problem: http://jsfiddle.net/brandondurham/ujPMK/embedded/result/

Pamiętaj, Safari musi być ustawione na co najmniej 2000px wide, aby zdarza się.

Author: Brandon Durham, 2013-04-02

6 answers

Frustrujące, co?

Zobacz EDIT4 aby dowiedzieć się, dlaczego 2000px jest liczbą magiczną.

Jest kilka rzeczy, których możesz spróbować.
  • Dodaj -webkit-transform-style: preserve-3d; do elementów, które są migotanie.

  • Dodaj -webkit-backface-visibility: hidden; do elementów, które są
    migotanie.

  • Przesunięcie elementu animującego poza rodzica migotanie
    żywioły są wewnątrz.

EDIT - Wesley Hales, powiedział tutaj "Napotkałem usterki podczas stosowania akceleracji sprzętowej do części strony, które zostały już przyspieszone"

Its hard to help you debugg this without any code. Ale na początek proponuję włączyć tryb debugowania w safari. Write ' defaults write com.jabłko.Safari zawiera Internaldebugmenu-bool true ' w terminalu.

Po tym wyświetli się menu debugowania. Wybierz znaczniki rysowania/komponowania > Pokaż komponowanie obramowań.

To ci pomoże. zobacz, co jest renderowane i wybierz, co umieścić w akceleracji sprzętowej, a co pominąć.

EDIT2 - Warto również sprawdzić: szybka-animacja-z-iOS-webkit

Chodzi o iOs, ale doświadczyłem , że - w pewnych okolicznościach-rozwiązania działające na iOs działają również na osx.

EDIT3 - Jeśli tylko pytasz, co się dzieje, gdy jego większy niż 2000px mogę powiedzieć na pewno, że na iPhone ' ach WebKit tworzy tekstury które nie są większe niż 1024 na 1024, a jeśli twój element jest większy niż ten, musi utworzyć wiele tekstur.

Dokumentacja dotycząca ograniczeń tekstur

Teraz, gdy robią to na iPhonie, nie zdziwiłoby mnie, gdyby zrobili to samo na OsX, ale ma wyższy limit. Nie wiem, czy to twoja sprawa. Nie da się powiedzieć bez kodu.

EDIT4 - "Implementacja w TextureMapperTiledBackingStore jest dość prosta i jest używana tylko aby obejść ograniczenie rozmiaru tekstury 2000x2000 w OpenGL."

Tak więc, jeśli twój element jest większy niż 2000x2000, musi utworzyć wiele tekstur.

Http://trac.webkit.org/wiki/CoordinatedGraphicsSystem

 54
Author: Spoeken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-05 15:44:19

Odkryłem, że zastosowanie {[0] } do elementu translującego i -webkit-transform: translate3d(0, 0, 0); do wszystkich jego dzieci, migotanie znika.

Proszę odnieść się zapobiec migotanie na WebKit-Przejście WebKit-transform.

 29
Author: Rupam Datta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:48

Jeśli czcionki migoczą użyj następującego CSS:

html,body {
    -webkit-font-smoothing: antialiased;    
}
 8
Author: Eugenio Enko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 10:28:40

Zauważyłem, że po zastosowaniu CSS3 transformuje elementy w Chrome wygląda trochę "chrupiąco" i tekst nie jest wyrównany. Rozwiązania w Mathias answer nie mają na to wpływu. Ale tutaj jest coś dziwnego - po zastosowaniu filtrów webkit (tj. -webkit-filter: opacity(0.99999);), elementy renderowane prawidłowo i litery w tekście są wyrównane. Ale po tym elementy te wyglądają nieco rozmyte. Może to ma wpływ na twoje migotanie.

 1
Author: Miljan Puzović,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 02:00:08

Przede wszystkim dzięki wspaniałym rozwiązaniom, które tu oferujemy. Zawsze myślałem, że w przeszłości musi być coś nie tak z moim kodem. Nie było. uzasadniłem też obramowanie 2000px dla animacji, które nie działają już płynnie. Dzięki Wam dodaję

/*keep animation smooth in Safari above 2000px*/
@media ( min-width: 2000px ) {
    .boxContent {
        -webkit-backface-visibility: hidden;
    }
}  

Zrobiłem to warunkowo, ponieważ, w rzeczywistości, zdjęcia nie renderują antyaliased po dodaniu klasy. W innym miejscu zrobiłem

/*keep animation smooth in Safari above 2000px*/
.twothousand {
    -webkit-backface-visibility: hidden;
}  

I dodała i usunęła dodatkową klasę poprzez JQuery. Więc przejścia są gładkie i renderowane po zakończeniu (ponowne usunięcie klasy) Trochę skomplikowane, ale działało dobrze dla mnie i w końcu sprawia, że animacje w Safari powyżej 2000px gładkie. Świetna robota!!

 0
Author: Garavani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 11:28:41

Proste rozwiązanie, które rozwiązało wszystkie moje problemy było takie:

.app * {
  transform-style: preserve-3d;
}
 -2
Author: Chet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-26 22:50:13