単純な半透明の背景色の場合、上記のソリューション(CSS3またはbg画像)が最適なオプションです。ただし、もっと凝ったこと(アニメーション、複数の背景など)を実行したい場合、またはCSS3に依存したくない場合は、「ペインテクニック」を試すことができます。
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
}
.pane > .back {
position: absolute;
width: 100%; height: 100%;
top: auto; bottom: auto; left: auto; right: auto;
}
.pane > .cont {
position: relative;
z-index: 10;
}
<p class="pane">
<span class="back" style="background-color: green; opacity: 0.6;"></span>
<span class="cont" style="color: white;">Hello world</span>
</p>
この手法は、外側のペイン要素の内側にある2つの「レイヤー」を使用して機能します。
- コンテンツの流れに影響を与えることなく、ペイン要素のサイズに合う1つ(「背面」)、
- 1つ(「続き」)にはコンテンツが含まれており、ペインのサイズを決定するのに役立ちます。
オンペインposition: relative
は重要です。ペインのサイズに合うようにバックレイヤーに指示します。(タグを絶対位置にする必要がある場合は<p>
、ペインをaからaに変更し、<p>
すべてを絶対位置タグ<span>
でラップします。)<p>
この手法が上記の同様の手法に勝る主な利点は、ペインを指定されたサイズにする必要がないことです。上でコーディングしたように、全幅(通常のブロック要素レイアウト)に適合し、コンテンツと同じ高さになります。外側のペイン要素は、長方形である限り、任意のサイズにすることができます(つまり、インラインブロックは機能しますが、プレーンオールドインラインは機能しません)。
また、背景に多くの自由を与えます。本当に何でも後ろの要素に入れて、コンテンツの流れに影響を与えないようにすることができます(複数のフルサイズのサブレイヤーが必要な場合は、それらにも位置があることを確認してください:絶対、幅/高さ:100%、および上/下/左/右:自動)。
背景のはめ込み調整(上/下/左/右による)および/または背景の固定(左/右または上/下のペアの1つを削除することによる)を可能にする1つのバリエーションは、代わりに次のCSSを使用することです。
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
書かれているように、これはFirefox、Safari、Chrome、IE8 +、Operaで機能しますが、IE7とIE6には追加のCSSと式、IIRCが必要であり、前回チェックしたとき、2番目のCSSバリエーションはOperaでは機能しません。
注意事項:
- contレイヤー内のフローティング要素は含まれません。それらがクリアされているか、そうでなければ封じ込められていることを確認する必要があります。そうしないと、底から滑り落ちてしまいます。
- 余白はpane要素に配置され、パディングはcont要素に配置されます。反対の方法(続きの余白やペインのパディング)は使用しないでください。そうしないと、ページが常にブラウザウィンドウよりわずかに広いなどの奇妙なことがわかります。
- 前述のように、すべてがブロックまたはインラインブロックである必要があります。CSSを単純化するために、s
<div>
の代わりにsを自由に使用してください。<span>
display: inline-block
より完全なデモ。この手法を、、および両方のauto
特定width
のs / min-height
sと組み合わせて使用することにより、この手法の柔軟性を示します。
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
width: 175px; min-height: 100px;
margin: 8px;
}
.pane > .back {
position: absolute; z-index: 1;
width: auto; height: auto;
top: 8px; bottom: 8px; left: 8px; right: 8px;
}
.pane > .cont {
position: relative; z-index: 10;
}
.debug_red { background: rgba(255, 0, 0, 0.5); border: 1px solid rgba(255, 0, 0, 0.75); }
.debug_green { background: rgba(0, 255, 0, 0.5); border: 1px solid rgba(0, 255, 0, 0.75); }
.debug_blue { background: rgba(0, 0, 255, 0.5); border: 1px solid rgba(0, 0, 255, 0.75); }
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto; min-height: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
そして、これが広く使われているテクニックのライブデモです:
