私の環境(どこで遅れるのか):
Mac OSX El Capitan 10.11.2 on Chromeバージョン50.0.2661.102(64ビット)
CODEPEN:
http://codepen.io/vieron/pen/hnEev
アニメーション:
状況:
私は、自分に合ったものを見つけることなく、これを何度もグーグルで検索しました。私はこの質問が以前に聞かれたことを知っています。
SafariとFirefoxでWebサイトを開くと、ChromeではなくMacでCSS3アニメーションがスムーズになります。
奇妙なことに、元のCodePenはChromeでスムーズです。
問題:
コード内の何かが原因で、Chromeでのみアニメーションが途切れます。それは何ですか、どうすれば修正できますか?
私が見たもの:
さまざまな画面サイズに適応するために相対的な位置が必要です。
http://blog.teamtreehouse.com/create-smoother-animations-transitions-browser
https://www.binarymoon.co.uk/2014/02/fixing-css-transitions-in-google-chrome/
http://blog.teamtreehouse.com/create-smoother-animations-transitions-browser
CODE:
HTML
<div class="Marquee">
<ul>
<li>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
</li>
<li>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
</li>
<li>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
<a href="https://developer.Apple.com/Swift/"><img class="Marquee-itm" src="Vendors/Images/Apple_Swift_Logo.png" /></a>
<a href="https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html"><img class="Marquee-itm" src="Vendors/Images/Objective-c-logo.png" /></a>
</li>
</ul>
</div>
CSS
* {
margin: 0;
padding: 0;
}
@-webkit-keyframes loop {
0% {
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-webkit-transform: translateX(0);
transform: translateX(0);
}
100% {
-moz-transform: translateX(-66.6%);
-ms-transform: translateX(-66.6%);
-webkit-transform: translateX(-66.6%);
transform: translateX(-66.6%);
}
}
@-moz-keyframes loop {
0% {
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-webkit-transform: translateX(0);
transform: translateX(0);
}
100% {
-moz-transform: translateX(-66.6%);
-ms-transform: translateX(-66.6%);
-webkit-transform: translateX(-66.6%);
transform: translateX(-66.6%);
}
}
@-ms-keyframes loop {
0% {
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-webkit-transform: translateX(0);
transform: translateX(0);
}
100% {
-moz-transform: translateX(-66.6%);
-ms-transform: translateX(-66.6%);
-webkit-transform: translateX(-66.6%);
transform: translateX(-66.6%);
}
}
@keyframes loop {
0% {
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-webkit-transform: translateX(0);
transform: translateX(0);
}
100% {
-moz-transform: translateX(-66.6%);
-ms-transform: translateX(-66.6%);
-webkit-transform: translateX(-66.6%);
transform: translateX(-66.6%);
}
}
.cssanimations .Marquee {
position: relative;
width: 90%;
margin: auto;
overflow: hidden;
}
.cssanimations .Marquee > ul {
list-style: none;
position: relative;
z-index: 1;
top: 0;
left: 0;
width: 300% !important;
height: 80px;
-webkit-animation-play-state: running;
-moz-animation-play-state: running;
-o-animation-play-state: running;
animation-play-state: running;
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-animation: loop 20s linear infinite;
-moz-animation: loop 20s linear infinite;
-o-animation: loop 20s linear infinite;
animation: loop 20s linear infinite;
}
.cssanimations .Marquee > ul > li {
white-space: normal;
position: relative;
text-align: justify;
text-justify: distribute-all-lines;
line-height: 0;
letter-spacing: -0.31em;
float: left;
width: 33.333333%;
overflow: hidden;
height: 80px;
}
.cssanimations .Marquee > ul > li:before {
content: '';
position: relative;
height: 100%;
width: 0;
}
.cssanimations .Marquee > ul > li:before,
.cssanimations .Marquee > ul > li > * {
vertical-align: middle;
display: inline-block;
}
.cssanimations .Marquee > ul > li:after {
content: '.';
display: inline-block;
height: 0 !important;
width: 100%;
overflow: hidden !important;
visibility: hidden;
font-size: 0;
Word-spacing: 100%;
}
.cssanimations .Marquee > ul > li > * {
display: inline-block;
vertical-align: middle;
text-align: left;
line-height: 1;
letter-spacing: 0;
}
.cssanimations .Marquee > ul > li img {
margin: 0 1.6%;
}
.Marquee ul li a{
display: inline-block;
height: 80%;
}
.Marquee ul li a img {
max-height: 100%;
}
HTMLのJSリンク
<script src="Vendors/js/modernizr.js" type="text/javascript"></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
重要なN.B.:
CodePenに追加したもののみ:
.Marquee ul li a{
display: inline-block;
height: 80%;
}
.Marquee ul li a img {
max-height: 100%;
}
これを削除しても問題は解決しません。
編集1:
Google Chromeプロファイラー(オプション1):
Google Chrome Profiler(オプション2(スナップショット)):
編集2:
アニメーションで奇妙な動作を見つけたようです。見えなくなってスクロールするたびに「成長」(拡大)します。
この動作は、上記の質問への回答で説明されているようです。しかし、提案されたように固定幅を指定しても、ラグは修正されませんでした。
編集3:
Google Timeline(gravity.jsを削除した後):
編集4:
これは変です。いくつかの行にコメントを付けてコメントを外した後(基本的には遅延があったときのコードに戻ります)、アニメーションのパフォーマンスが向上しました。 SafariやFirefoxほどスムーズではありませんが、それでもスムーズです。
EDIT 5:
「犯人」を見つけました。
私は私のウェブサイトのヘッダーで別のコードペンを使用しています:
https://codepen.io/saransh/pen/BKJun
<link href='http://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
#stars
#stars2
#stars3
#title
%span
PURE CSS
%br
%span
PARALLAX PIXEL STARS
削除すると、他のアニメーションがスムーズになります。
NONETHELESS:
これは、ChromeではなくFirefoxとSafariですべてがスムーズである理由を説明していません。
Chromeより強力ではありませんか?
レポートをChromeに提出し、ここで回答することを希望していますが、保証はありません。
誰かがGoogleから回答を得ることができる場合/ Chromeこれについて、私は彼/彼女に報奨金を与えます。
UPDATE 6:
Operaブラウザで試してみました。まったく同じラグです!これで、BLINKレンダリングエンジンに問題があることがわかりました。
「犯人」を見つけました。
私のウェブサイトのヘッダーで別のコードペンを使用しています:
https://codepen.io/saransh/pen/BKJun
<link href='http://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
#stars
#stars2
#stars3
#title
%span
PURE CSS
%br
%span
PARALLAX PIXEL STARS
削除すると、他のアニメーションがスムーズになります。
NONETHELESS:
これは、FirefoxとSafariですべてがスムーズで、Chromeではうまくいかない理由を説明しません。
Chrome=より強力ではない?
レポートをChromeに提出し、ここで回答することを希望していますが、保証はありません。
誰かがGoogleから回答を得ることができる場合/ Chromeこれについて、私は彼/彼女に報奨金を授与します。
UPDATE 6:
Operaブラウザで試してみました。まったく同じラグです!これで、BLINKレンダリングエンジンに問題があることがわかりました。
Chromeはレンダリング時にハードウェアアクセラレーションをサポートし、css3アニメーションのパフォーマンスを向上させます。 トリガーハードウェアアクセラレーション は、translateZ(0)
、rotateZ(360deg)
などを適用して、Chromeをトリックします。
上記のトリックを適用してハードウェアアクセラレーションを使用している場合 you)、必要に応じてプレフィックスを付けて適用することにより、パフォーマンスをさらに向上させることができます:
backface-visibility: hidden;
perspective: 1000;
これは、GPUが統合されている場合やスロットルされている場合(省電力モードを考えてください)、パフォーマンスが低下する場合のいくつかの問題への対処にも役立ちます。これは、Macbookでの視差パフォーマンスの問題を説明します! ¯\ _(ツ)_ /¯
解決策:
さまざまな画面サイズに対して@mediaで絶対配置を使用します。
説明:
他のすべてのブラウザで機能し、Chromeではないため、Chrome専用になります。
これにより、3つのオプションが提供されます。
(1)GoogleにChromeまたは
(2)Chromeまたは
(3)Chromeではスムーズではないことを受け入れます。
TL; DR:
絶対配置が機能することはご存知でしょう。
アニメーションを改善するには、CSSのwill-change
プロパティを使用できます。このプロパティは、要素が変更されることをブラウザに示唆します。
https://developer.mozilla.org/en/docs/Web/CSS/will-change
will-change
について詳しくはこちらをご覧ください。