制作者の活動(PR)。

堀北真希ちゃんをうさぎ化した女子大生キャラクタ
主な作品

制作者に依るイラストと動画のサンプル

ブロックの枠線より下にブロックの内容の一部を配置する方法。

CSSの小技として、同じブロックレヴェル要素の中にある一部要素を、その要素の下枠線より下に配置する方法をご紹介します。

要素には、CSSのborderプロパティなどを用いる事で枠線を引く事が出来ます。

この要素の内容の一部を、下枠線の下に表示させたいとします。

分かり易く言えば、要素の一部を、当該ブロック要素の次のブロックレヴェル要素であるかのように配置したいとします。

このような事をCSSで行うくらいなら、外に出したい要素を別のブロックレヴェル要素としてマークアップすれば良いのですが、構造上の理由からマークアップ上は同じブロックに入れたいと考える事もあるかも知れません。

そのような場合には、CSSで目的を果たすという選択肢もあります。

その方法を考えて見ましょう。

ブロックの枠線より下にブロックの内容の一部を配置する方法・目次。

一番簡単な方法はポジショニング?

一番簡単と思われる方法は、ポジショニングを利用する方法かも知れません。

例えば、上記の例を考えて見ましょう。

この場合、外側の<h1>要素に対してpositionプロパティを与える事で、実現させる事が可能です。

h1 {
    font-size: 200%;
    line-height: 1em;
    color: #090;
    padding: 6px;
    margin: 0 0 1em;
    border: #fd0 2px solid;
    position: relative;
    top: 0;
    left: 0;
    }

h1 .subTitle {
    font-size: 50%;
    line-height: 1.5em;
    display: block;
    background: #fff;
    margin: 1em 0 0;
    padding: 2px 6px;
    position: absolute;
    top: 2em;
    left: 0;
    }

このスタイル定義の原理は、以下の二つです。

要素の枠線は、下位要素でpositionプロパティabsolute値を与えられた要素を無視して引かれる

単純にdisplayプロパティblock値を与えてブロックレヴェルボックス化しただけでは、この要素を含んで枠線が描かれます。

positionプロパティabsolute値を与える事で、初めてこの要素の存在を無視した枠線が実現します。

positionプロパティabsolute値を与える要素を配置する適切な位置を決めるために、元の要素のpositionプロパティrelative値を与える

positionプロパティabsolute値を与える場合、ポジショニングの基準となる点は、上位要素でpositionプロパティstatic値以外の値が与えられたものが無い限り、スクリーン基準となります。

ここでは、subTitleクラス名を与えられた<h1>要素の下位要素(HTMLでは<small>要素)は、<h1>要素の一文字分下に配置されるようにしております。

すなわち、<h1>要素の一行下に配置されるようにしております。

ポジショニングの問題点。

ポジショニングは最も簡単で確実な方法です。

しかしながら、下位要素の配置条件が固定されてしまいます。

ポジショニングの記述例では、親要素となる<h1>要素の一行下に配置されますが、<h1>要素が二行以上に跨った場合には、確実に<h1>要素の二行目に重なってしまいます。

もう一つの方法 - 枠線を引き直す。

そこで、もう一つの方法として、親要素の外に配置したい下位要素で枠線を引き直すと言う方法があります。

具体的には以下のようになります。

h1 {
    font-size: 200%;
    line-height: 1em;
    color: #090;
    padding: 6px;
    margin: 0 0 1em;
    border: #fd0 2px solid;
    }

h1 .subTitle {
    font-size: 50%;
    line-height: 1.5em;
    display: block;
    background: #fff;
    margin: 6px -8px -8px;
    padding: 2px 6px;
    border-top: #fd0 2px solid;
    z-index: 1;
    }

このスタイル定義の原理は、単純に<h1>要素の下に下位要素を配置すると言うものですが、更にその下位要素で上枠線を引く事で、それを親要素の下枠線のように見せると言うものです。

問題は、このままでは下位要素を含めて<h1>要素の枠線が引かれてしまう事です。

そこで、下位要素の表示領域を拡げて元の枠線の上に被せる事で、元の枠線を消してしまいます。

これには、marginプロパティで、左右及び下の余白幅を負にする事で解決します。

このときの幅は、親要素のパディング幅(paddingプロパティなどで指定)と枠線の幅(border-widthプロパティなどで指定)を合わせた値に負号を付けた値となります。

実際に対応しているユーザエージェントで表示させると、以下のようになります。

枠線を引き直す方法の問題点。

この方法は、CSSの実装が正しくないと、巧く行かない恐れがあります。

特にインターネットエクスプローラのウィンドウズ版 5.0xでは巧く行かない場合もあります。

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com