CSS : z-indexとposition

ホームページ作成者仲間からのヘルプで、CSSの調整をしましたのでその内容をまとめてみようと思います。調整内容としては、パーツの重なり順が思いどおりにならない、といったことでした。(ここでいうパーツは、専門的に言うところのブロックレベル要素)

パーツの重なり順の原則

まず、HTMLにおける重なり順を確認します。ホームページでは基本的な重なり順は「HTMLの記述の順に下から上に重なる」です。先に登場したパーツほど下に、後から登場したものほど上に重なります。

さて、HTMLでパーツが重なる状態が起こるのかといえば、原則は重なることはないです。HTML単体ではないのですが、見た目をコントロールするCSSを使うことで可能になります。ですので、重なり順のコントロールはCSSを上手く使うということでもあります。

完成図と実際の工程


CSS未設定の初期状態

左図がHTMLのみを記述した状態(サンプルファイル : sample.html)、右が完成図です。HTMLの記述順は黄色のエリア → ピンクのエリアとなっています。これを黄色のエリアとピンクのエリアを重ねあわせ、さらに黄色をピンクの上にもってきます。


Step 1)ピンクのエリアを移動する


ピンクのエリアを移動

ピンクのエリアを黄色のエリアと重なり合うように移動させます。ここでは上部余白をコントロールするCSSであるmargin-topプロパティを利用します。余白というと正の数(プラス)と思いますが、実は負の数(マイナス)を指定することもできます。マイナスの余白とは余白がなくなり詰まっていく状態となります。

サンプルファイル : sample_step1.html


Step 2)黄色のエリアの重なり順を調整する


黄色の重なり順を上に

ピンクのエリアを移動しただけでは、重なり順でピンクが黄色の上にきてしまいます。そこで黄色の重なり順を変更するためにCSSのz-indexプロパティを指定します。z-indexプロパティは値が大きいほど上になります。

しかしz-indexを指定しただけでは重なり順が変更されません。重なり順を指定するためには、エリア(ボックス要素)の配置方法を指定するpositionプロパティとセットで指定する必要があります。ここでは、position:relative(相対配置)を指定します。

サンプルファイル : sample_step2.html

OS/ブラウザのバージョンと互換性の問題

これで調整できたのできたのですが、さらに新たな問題が発生しました。私のところではOKなのですが、知人の環境ではNGだというのです。画面コピーで確認したところ、私はWindows VistaのInternet Explorer 7で、友人はWindows XPのInternet Explorer 7で見ていました。むむむ、想定外です。

問題はpositionとz-indexを指定した黄色のエリアが、画面の左端まで移動しているというものでした。これは、黄色いエリアを囲んでいる一つ上の入れ物(親要素)にもposition:relativeを指定すると解決します。CSSのpositionプロパティには特定のブラウザでは挙動が怪しいものがあり、それに該当したのかもしれません。

CSSという難解なパズル

現在のところCSSを利用することでホームページをレイアウトし装飾することができます。このCSSは難解なパズルのようなところがあります。組み合わせによって効果が変りますし、時に予期しない挙動をすることもあります。これには前述のような、OSとブラウザの組み合わせによっても出現したりしなかったりです。

同業者の方も含めまして、CSSでお悩みのことがありましたらご一報ください。可能な限り、パズルの解決をお手伝いいたします。


プロフィール

矢部 靖人(hamnaly)

いくつかの制作会社でWeb制作やDTPから営業まで経験し、2010年に独立。現在はhamnaly(ハンナリィ)という屋号で、Web制作を中心に地元企業のWeb活用を応援する事業を模索中。理想は高く現実は厳しく、下請け制作を中心に生きています。Knock! Knock! 主催。

エントリーリスト

カテゴリーリスト

タグ