web-dev-qa-db-ja.com

擬似要素を使用して背景オーバーレイを作成する

私の目標は、任意の背景を持つdivを作成することです。次に、疑似要素を使用して透明な白いオーバーレイを作成し、divの背景を「明るく」します。ただし、「オーバーレイ」はdivのコンテンツの下になければなりません。したがって、次の例では:

<div class="container">
    <div class="content">
        <h1>Hello, World</h1>
    </div>
</div>

.container {
    background-color: red;
    width: 500px;
    height: 500px;
    position: relative;
}
.content {
    background-color: blue;
    width: 250px;
}
.container::before {
    content:"";
    display: block;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 1;
    background-color: rgba(255, 255, 255, .8);
}

.contentdivは、白いオーバーレイ(別名.container::before)の「下」にあってはなりません。

z-index.contentを使用する必要はありませんが、それが唯一の解決策であれば可能です。

最終目標:テキストと青が覆われていない間、赤は覆われるべきです。

JSフィドル: http://jsfiddle.net/1c5j9n4x/

27
fildred13

擬似要素にz-indexがある場合は、.content要素を配置し、z-index値を スタッキングコンテキストの確立 に追加する必要があります。

更新された例

.content {
    background-color: blue;
    width: 250px;
    position: relative;
    z-index: 1;
}

..youcouldz-indexを擬似要素から削除し、.content要素を配置するだけです。その際、z-indexを必要とする要素はありません。これが機能する理由は、:before疑似要素が本質的に以前の兄弟要素であるためです。したがって、後続の.content要素は一番上に配置されます。

代替例

.content {
    background-color: blue;
    width: 250px;
    position: relative;
}
.container::before {
    content:"";
    display: block;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    background-color: rgba(255, 255, 255, .8);
}
28
Josh Crozier