原森情報技術研究所 WEBコンテンツ企画・制作・運営・サポート / 兵庫県 神戸市 明石市 /

要素の裏面の表示非表示指定

backface-visibility / 要素の裏面の表示非表示指定

translateのサンプル

例1

テスト1
テスト2

白枠ホバーで黄色BOXが180degY軸回転

説明

例2

テスト1 青
黄色
テスト2 青
黄色

白枠ホバーで黄色BOXが180degY軸回転

説明

例3

テスト1 青
黄色
テスト2 青
黄色

白枠ホバーで黄色BOXが180degY軸回転

説明

例4

テスト1 青
黄色
テスト2 青
黄色

白枠ホバーで黄色BOXが180degY軸回転

説明

サンプル例1の内容

【例1】backface-visibility の [visible] と [hidden] を普通に比較してみました。
白枠ホバーで黄色BOXが180degY軸回転します。

テスト1は「backface-visibility : visible;」、
テスト2は「backface-visibility : hidden;」を指定しています。
テスト2の方は、90度回転後からの裏面が非表示となります。
※IE10 の場合、テスト2が回転が終わるまでは裏面が表示され、最後に裏面が非表示になっていました。

例1へ

サンプル例2の内容

【例2】親子でbackface-visibilityの値が違う場合の実験です。
白枠ホバーで黄色BOXが180degY軸回転します。

テスト1 黄色BOXに「backface-visibility : visible;」青色BOXに「backface-visibility : hidden;」を指定しています。
テスト2 黄色BOXに「backface-visibility : hidden;」青色BOXに「backface-visibility : visible;」を指定しています。

結果、テスト1の青色BOXは表示されました。テスト2は黄色BOXごと非表示になっています。

親BOXが visible で、親が回転して裏面が表示されると、子の hidden は無視されていました。
※IE10 の場合では、テスト2の回転が終わるまでは裏面が表示され、最後に裏面が非表示になっていました。

例2へ

サンプル例3の内容

【例3】例2に、[transform-style : preserve-3d;] を指定してみた実験です。
白枠ホバーで黄色BOXが180degY軸回転

テスト1 黄色BOX(オレンジ色)に「backface-visibility:visible;」と「transform-style:preserve-3d;」を指定しています。
子要素の青色BOXに「backface-visibility:hidden;」を指定。
テスト2 黄色BOXに「backface-visibility:hidden;」と「transform-style:preserve-3d;」を指定しています。
子要素の青色BOXに「backface-visibility:visible;」を指定。

結果、GC(とOpera)では、子要素のみ非表示となりました。(想定した結果)
FFでは、テスト1の青色BOXは背景色のみ非表示となり、文字は表示されています。(バグなのかは不明です)
IE10は、transform-style:preserve-3d 未対応なので 例2 と同じです。

テスト2は黄色BOXごと非表示になっています。(例2と同じで親要素が非表示なので、子要素は非表示)

※IE10 の場合、テスト2の回転が終わるまでは裏面が表示され、最後に裏面が非表示になっていました。

例3へ

例4 親(オレンジ)と子(青)の両方にpreserve-3dを指定してみた

例3の「preserve-3d」を親ボックスと子ボックスの両方に指定してみました。

GC(とOpera)は例3と同じです。
IE10は、transform-style:preserve-3d 未対応なので、設定してない例2と同じ動作になりました。
FFのテスト1 は、GCの例3と同じで 黄色裏面表示 & 青ボックスとそのテキストが非表示、になりましたが、テスト2の方はGCなどのwebkit系では親要素に従って子要素の指定を無視していたのと違い、素直に親の裏面を非表示、子の裏面を表示、になっています。

※IE10は、transform-style : preserve-3d 未対応なので 例2 と同じです。
※IE10 の場合、テスト2の回転が終わるまでは裏面が表示され、最後に裏面が非表示になっていました。

例4へ

考察

IE10がtransitionアニメ動作中は裏面非表示にならない結果となりましたので、IE10対応を考えると、transitionのアニメ動作での裏面非表示は現状あきらめるしかないと思います。
また、なんとなく親子両方に transform-style : preserve-3d を指定したFFの方が想定通りになっているような気もしますが、ブラウザごとに違いがあるので、子要素の裏面の処理については別の対策をする必要があるかもしれません。
※例えば、回転する要素の裏に180度回転させた別の要素を配置する、など

要素の裏面の表示非表示指定プロパティ

backface-visibility:visible
裏面を表示し、鏡像が表示される。
backface-visibility:hidden
裏面を非表示。

ページトップへ

top > css3研究 > 
要素の裏面の表示非表示指定

表示位置移動

translate(x) / x…[length]
translate(x,y) / x,y…[length]
translate(x) = translate(x,x)

translate3d(x,y,z) / x,y,z…[length]

translateX(x) / x…[length]
translateX(x) = translate(x,0)

translateY(y) / y…[length]
translateY(y) = translate(0,y)

translateZ(z) / z…[length]
translateZ(z) = translate3d(0,0,z)

拡大・縮小

scale(x) / x…[数量]
scale(x,y) / x,y…[数量]
scale(x) = scale(x,x)

scale3d(x,y,z) / x,y,z…[数量]

scaleX(x) / x…[数量]
scaleX(x) = scale(x,1) = scale3d(x,1,1)

scaleX(x) / x…[数量]
scaleX(x) = scale(x,1) = scale3d(x,1,1)

scaleY(y) / y…[数量]
scaleY(y) = scale(1,y) = scale3d(1,y,1)

scaleZ(z) / z…[数量]
scaleZ(z) = scale3d(1,1,z)

回転

rotate(a) / a…[角度]
aが正の値なら時計回り

rotate3d(x,y,z,a) / x,y,z…[数量] a…[角度]

rotateX(a) / a…[角度]
rotateX(a) = rotate3d(1,0,0,a)

rotateY(a) / a…[角度]
rotateY(a) = rotate3d(0,1,0,a)

rotateZ(a) / a…[角度]
rotateZ(a) = rotate3d(0,0,1,a)

傾斜変形

skew(ax [,ay]) / ax,ay…[角度]
ay省略時はaxのみの変形。※skewは非標準となった

skewX(a) / a…[角度]

skewY(a) / a…[角度]

行列指定

matrix(a , c , b , d , tx , ty)
線形 transform a , b , c , d …[数量](Gecko系のみlength可) 移動量 tx , ty …[length]

matrix3d(a1 , b1 , c1 , d1 , a2 , b2 , c2 , d2 , a3 , b3 , c3 , d3 , a4 , b4 , c4 , d4)
線形 transform a1 , b1 , c1 , d1 , a2 , b2 , c2 , d2 , a3 , b3 , c3 , d3 , d4 …[数量] 移動量 a4 , b4 , c4 …[length]

カテゴリMENU
お問い合せ