Gist
状態:未解決
閲覧数:5,774
投稿日:2015-01-02
更新日:2015-01-02
画像マウスオーバーした際、transformの「rotate × scale」後に「z-index」が適用されず悩む
・「並べて表示している画像」の内、最後の画像だけ、マウスオーバーした際、最前面に表示される
・それ以外は、全て他の画像の後ろで拡大されてしまう
・全然意味が分からない!
・元旦なのに!(関係ないけど…)
HTML要素の配置順を変更したら、意図した通り動作するようになった
・どうしてこうなるか、全く理解できないけれども…
修正前
修正後
・「並べて表示している画像」の内、最後の画像だけ、マウスオーバーした際、最前面に表示される
・それ以外は、全て他の画像の後ろで拡大されてしまう
・全然意味が分からない!
・元旦なのに!(関係ないけど…)
最終的に
HTML要素の配置順を変更したら、意図した通り動作するようになった
・どうしてこうなるか、全く理解できないけれども…
修正前
<span class="targetClass"><a href="">
<img src="" width="160" height="108">
</a></span>
修正後
<a href=""><span class="targetClas">
<img src="" width="160" height="108"></span>
</a>
調査履歴 / 試してみたけどうまくいかなかった、もしくは理解できなかった内容
z軸
z-indexで重なりが直らない場合はtransformのz軸を疑ってみる
・translate3dのz軸ってz-indexよりも強く(?)効果が発揮される
・translate3d未使用のため、遭遇ケースとは異なる(と思う)・translate3dのz軸ってz-indexよりも強く(?)効果が発揮される
jQuery
CSSではなくjQueryで指定
・試してみたが、遭遇したケースでは効果がなかった
$('#content img').mouseover(function () {
$(this).css("z-index", "9")
});
$('#content img').mouseout(function () {
$(this).css("z-index", "0")
});
再レンダリング
表示に関する何かの属性を明示的に変更しなければ、z-indexを反映させた再レンダリングを行ってくれない
・IE7に限定した話?・今回遭遇したケースの環境は、Chromeなので関係ないかも…
drawback
css "drawback" - not webflow.
・関係ありそうな気がする
・英語を理解できない
stacking contexts
z-index is canceled by setting transform(rotate)
・transformを疑った理由は、「transform(rotate)を設定すると、z-indexがキャンセルされる」との質問をstackoverflowで見つけたため
スタック文脈
・HTML 要素を位置指定し、z-index 値を与えるとスタック文脈が作成される(完全な不透明でないとき)
・子要素の z-index 値は、その親要素に対してのみ意味を持つ
※スタック文脈は HTML 要素の階層構造の部分集合
つまり?
・z-indexが効かない、ということは、z-index 値を与えたスタック文脈の、HTML 要素の階層構造がおかしい、ということ
後で気が付いたので、未検証
relative
画像要素に「position:relative」付与
・CSS3 Rotation and Scaling on same elements messes up "z-index"?
仮結論
今後について
ポイント
・下記3つを押えておけば、z-indexは理解できたも同然だ
A.新しいスタッキングコンテキストが何れかの要素上に形成することができる3つの方法
B.スタッキングされる要素の順序の決定
C.同じスタッキングコンテキスト内での重なり順
・What No One Told You About Z-Index
いつか
私はまだ理解していない
・いつか取り組む予定
・先延ばしにする理由は、ブラウザ実装により、細かい挙動とか随時変わりそうな気がするから
感想
・z-indexは奥が深い
・そして………………
・\ z-index 超分からない /