私は同じ問題を抱えていました.トランジションを使用して画像間をフェードしたかったのです。2-in-1 画像 (またはスプライト) を使用し、css を使用してホバー時の位置を変更しても、画像が左右または上下にスクロールしてしまうため、機能しません。
(参考までに、あなたは正しいです-画像の読み込みに少し時間がかかるため、まばたきが発生しますが、ホバーした瞬間から遷移がすでに開始されています。一度ホバーすると、画像が読み込まれるため、再度発生することはありませんページをリロードするまで。)
これは、純粋な HTML と CSS のソリューションです。
- 包含 div を作成する
- このコンテナ内にアンカー タグとイメージ タグを配置します
- アンカー タグに背景画像を設定します (これは、ページ読み込み時に表示する画像である必要があります)。
- 画像タグは、ホバー時に表示する画像である必要があり、アンカー タグの背後に表示するために z-index を適用する必要があります
多くの実験の後、私は次の解決策にたどり着きました: (デモはこちら: http://jsfiddle.net/jmtFK/ )
HTML:
<div class="button" id="specific">
<a href="" class="link" target=""></a>
<img>
</div>
CSS:
.button {
position: relative;
}
.button a {
display: block;
width: px;
height: px;
background: url() no-repeat;
-webkit-opacity: 1;
-moz-opacity: 1;
opacity: 1;
-webkit-transition: opacity 0.2s ease;
-moz-transition: opacity 0.2s ease;
-ms-transition: opacity 0.2s ease;
-o-transition: opacity 0.2s ease;
transition: opacity 0.2s ease;
}
.button a:hover {
-webkit-opacity: 0;
-moz-opacity: 0;
opacity: 0;
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
}
.button img {
position: absolute;
top: 0px;
left: 0px;
z-index: -1;
-webkit-opacity: 0;
-moz-opacity: 0;
opacity: 0;
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
}
.button a:hover + img {
-webkit-opacity: 1;
-moz-opacity: 1;
opacity: 1;
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
}
最初は z インデックス付きの画像を透明に設定していませんでしたが、そのエッジがリンク画像の外側に表示されることがわかりました。これは醜いので、不透明度: 0 を適用しました。
また、「ホバー イン」と「ホバー アウト」の CSS トランジションも追加しました。(基本的に、特定の CSS 状態に適用される遷移設定は、その状態への遷移方法を決定します。たとえば、.button aに適用される遷移設定は、ボタン a: hover が適用されなくなったときに有効になります。
それが役立つことを願っています。