HTML構造を変更せずに疑似要素「::before」で背景マスクを追加する
この記事は以前にご紹介した「背景画像を透過風にする」と同じ効果を得るものです。
課題
下のようなケースでは、背景画像を薄くしてコンテンツを通常通りに表示させたいことがあります。
コンテンツ コンテンツ コンテンツ
透過による対策
単純に背景画像要素を透過すると子要素まで透過が継承されてしまうので、コンテンツも薄くなってしまいます。
コンテンツ コンテンツ コンテンツ
1 2 3 4 5 |
<div class="backImage"> <div class="frontContents"> コンテンツ コンテンツ コンテンツ </div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
.backImage{ width: 50%; height: 200px; background-image: url(../../HPImage/yuu0054-009_640x427.JPG); background-repeat: no-repeat; background-position: top center; background-size: cover; opacity: 0.5; /* 子要素 .frontContents に継承される */ } .frontContents{ padding: 20px; color: #000; } |
疑似要素「::before」による透過マスクでの対策
これらを改善する一方法として、背景画像の疑似要素「::before」を利用してコンテンツとの間に透過マスクを挟む方法があります。利点としてhtml構造はそのままで対応できます。
コンテンツ コンテンツ コンテンツ
1 2 3 4 5 |
<div class="layerImage"> <div class="frontContents"> コンテンツ コンテンツ コンテンツ </div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
.layerImage{ width: 50%; height: 200px; background-image: url(../../HPImage/yuu0054-009_640x427.JPG); background-repeat: no-repeat; background-position: top center; background-size: cover; position: relative; /* ::before の position:absolute; を有効にするため */ } /* ▼ マスク用に追加 */ .layerImage::before{ content: ""; position: absolute; width: 100%; height: 100%; background-color: #fff; opacity: 0.5; } .frontContents{ padding: 20px; color: #000; position: relative; /* z-index 有効にするため */ z-index: 1; /* ※1 */ } |
(※ 当ページは社内技術資料としての位置付けですので読みにくいこともあるかもしれませんが、一般の方の課題解決に役立てれば幸いです。)
弊社サイトご案内
弊社ではデザイン会社様やウェブサイト制作会社様との提携・協業を随時お願いしております。