マウスホバーでサムネイル画像の端がIEだけ1pxズレる時の解決策・css参考
ブログ系のサイト制作では必ずつきものなのが、マウスホバー時のサムネイル画像のcss3アニメーションです。エイヤで作成すると、ブラウザチェックした時、なぜかIEだけ端っこが1pxずれたりする時があります。
自分の場合、マウスホバーした時、opacity透過の暗いエフェクトと、scaleによる画像拡大の動作をやろうとした際、この1pxずれのエラーになったことがあるので、参考までに、その時の状況と解決策を紹介します。
目次
IEでマウスホバーした画像の端が1pxズレる時の対処法
誤りのソースコード
まず、自分が失敗したパターンのソースを書きます。
HTMLのソースコードが「aタグ>divタグ class="waku">imgタグ」という構造で作った時に、
a .waku{
position: relative;
width: 100%;
padding-top: 66.67%;
overflow: hidden;
background: #000;
}
a .waku img{
position: absolute;
top: 0;
left: 0;
width: 100%;
min-height: 100%;
}
a:hover .waku img{
opacity: 0.8;
-moz-transform: scale(1.1,1.1);
-webkit-transform: scale(1.1,1.1);
-o-transform: scale(1.1,1.1);
-ms-transform: scale(1.1,1.1);
}
こんな書き方だとボツでした。
divに背景色を与えて、その上にあるimgを透過して、シャドウ感を与える感じの案だと、IEはどうもダメなようです。
そこで対処法を検討してみたところ、どうやら疑似要素に頼るほうが良いそうです。
疑似要素を使ったソースコード
こちらだと、IEでもシャドウ感がうまく出ました。
a .waku{
position: relative;
width: 100%;
padding-top: 66.67%;
overflow: hidden;
}
a .waku::after{
content: "";
position: absolute;
top: 0;
width: 100%;
height: 100%;
background: #000;
opacity: 0;
transition: 0.3s;
}
a:hover .waku::after{
opacity: 0.25;
}
a .waku img{
position: absolute;
top: 0;
left: 0;
width: 100%;
min-height: 100%;
}
a:hover .waku img{
-moz-transform: scale(1.1,1.1);
-webkit-transform: scale(1.1,1.1);
-o-transform: scale(1.1,1.1);
-ms-transform: scale(1.1,1.1);
}
divをrelativeにして、疑似要素afterをabsoluteで全面に覆って、そこに全透過にした背景色を設定しておいて、ホバーした時に、div::after側で透過具合を薄めてあげて、シャドウ感を出す、という流れです。
ただし、シャドウの1pxずれは消えるんですが、css設計次第だと、今度はscale側で1pxずれのエラーが起きます。
IEではflex使用時のmax-widthに気をつける
先ほど、aタグで囲っていた要素が複数あったとして、それをflexでwidth:●●%;と指定していた場合、transitionとscaleでアニメーション効果を与えると、再計算などの関係で、画像の拡縮時に1px程度のガタツキやずれが生じる時があります。
この時のヒントとして、width:33%;と指定していて、それをmax-width:●●px;と、%よりも低い数字を用いて抑制するような書き方をすると、どうもIEの計算方法と相性が悪いみたいで、ガタツキが起きます。
なので、IEだけCSSハックなどかけてあげて、%を調整するか、max-widthに余裕を持たせてあげると解決の参考になるかもしれません。(自分の場合はこれで解決でした。)
まとめ
マウスホバーで1pxずれで困った時、まだ疑似要素のposition:absolute;で覆う方針を試していなければ、ぜひ試してみてください。
とりあえず困った時は、対象のソースだけ抜き出してみて、じっくり検討してみることが大事です!
あと、申し訳ないです。本記事、自分の備忘録用の書き方なので、わかりづらいかもです・・・。