box-shadowを使うときの注意点
公開:
更新:
CSS3から消えたり復活したりのbox-shadow
ですが、使ってみると気になる点があったのでメモしておきます。
キャプチャ画像はIE以外のブラウザ(Windows版)です。
IE 9は入れてないのでどうなるか分かりません。
テスト表示に使ったのは以下。
box-shadowを使うときの注意点 DEMO タイトルだけでは上手く説明できないのですが、 重要でない部分は省いていますが、これを各ブラウザで表示すると以下のようになります。 スクロールバーが出るのがFirefoxとOperaで、 このコードでは これはタイトル通りですね。 ちなみに、これのコードはこんな感じです。 ちょっと調べてみたところ、これは結構前からある現象というかバグのようですね。 こちらを読む限りでは、このバグはWindowsとLinuxで発生するようです。 これはもう フォームとかに指定するのに便利なので早く直るといいですねえ。 Windows版Chrome 10.0.648.127で修正されているのを確認しました。親要素に
overflow: auto
が指定されている場合のスクロールバーの扱いoverflow:auto
が指定された要素の子孫要素にbox-shadow
が指定されている場合、親要素からはみ出るドロップシャドウ部分をどのように表示するか、ということです。
……コードとキャプチャ画像を見てもらったほうが早いですね。<div id="outer">
<div id="shadow1">box-shadow</div>
</div>
#outer {
padding: 10px 0;
border: 1px solid #666;
overflow: auto;
}
#shadow1 {
box-shadow: 0 0 10px rgba(0, 0, 0, .6);
-moz-box-shadow: 0 0 10px rgba(0, 0, 0, .6);
-webkit-box-shadow: 0 0 10px rgba(0, 0, 0, .6);
}
overflow: hidden
同様になるのがChromeとSafariです。div
の子要素ですが、body
の子要素などで発生すると余計なスクロールバーが表示されてしまうので見た目があまりよくないです。
対策としてはbox-shadow
した要素の親要素にoverflow: hidden
するとかですね。body
の場合はどうしたもんですかね。一番簡単なのはdiv
とかでラッピングすることですが、特に必要ない要素を増やすことになっちゃいますしね……。box-shadow: inset
とborder-radius
を指定しているときのGoogle Chromeの表示box-shadow: inset
とborder-radius
の両方が指定されている場合、Chromeで影の部分がはみでてしまいます。
各ブラウザの比較は次の通り。
境目が分かりやすいように赤いボーダーを指定していますが、なくても同じです。<div id="shadow2">box-shadow inset &amp; border-radius</div>
#shadow2 {
box-shadow: inset 0 0 10px rgba(0, 0, 0, .6);
-moz-box-shadow: inset 0 0 10px rgba(0, 0, 0, .6);
-webkit-box-shadow: inset 0 0 10px rgba(0, 0, 0, .6);
border: 1px solid #f00;
border-radius: 20px;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
}
以下のリンク先に色々書いていました。
Macでは問題なく表示される模様。box-shadow
にinset
を指定しないようにするしか対策はないですね。
これで一安心ですね。