opacity
プロパティーで1
より下が指定された要素はその重なり順が変化するという仕様があるようだ。擬似要素を複数組み合わせて紙をずらして重ねたようにロゴをちょっと改悪した時に初めて知った。いつものChromeのバグかと思った……。
仕様ではposition
プロパティーがstatic
以外の要素でopacity
プロパティーを1
より下にするとz-index
プロパティーが0
であるとみなされるようになっている。そのためその要素でz-index
プロパティーを-1
にして背面に移動するようにしたり、100
等で意識的に手前に持ってきたりするようにしている場合、その重なり順が壊れてしまう。
と、こう書くと結構単純な感じなんだけど、実際には0
とみなされた上で新たな重なり順が作られるので、いくつかの要素をまとめて半透明にして重ねまくってたりすると、どういう重なり順になるかとてもイメージしにくい。ので余程の理由がない限りはopacity
とz-index
プロパティーの組み合わせには近寄らない方が良さそう。
例えば最初のスクリーンショットは件のopacity
とz-index
プロパティーを組み合わせて作ったもの。a
要素とa::before
、a::after
でそれぞれ正方形を作りTransformさせて重ねているだけ。
a
要素の文字(hail2u.net)z-index: -1
のa::before
z-index: -2
のa::after
a
要素の背景という重なり順になる。普通に-1
等を使うとa
要素の背景より後ろになるはずだがならない。かといって単純に上に重ねられるわけでもなく、背景と文字列の間に挟まっている。ややこしいですね!