この記事の前提条件
対象: CSS(全モダンブラウザ対応)
難易度: ★☆☆
所要時間: 約5分
記事の途中で「続きは会員登録で」と隠したい時や、長いコードブロックの下端をふわっとぼかして「まだ続きがある」と示したい時に使うのが、下にいくほどぼんやり(または、はっきり)変化するグラデーション表現です。画像を使わずCSSだけで再現できます。
白いグラデーションを重ねて「ぼかし」を表現する
実際にぼかしフィルターをかけているわけではなく、背景色と同じ色を透明から不透明へ変化させたグラデーションを、コンテンツの上に重ねることで「だんだん見えなくなる」演出を作ります。
.fade-overlay {
position: relative;
}
.fade-overlay::after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 150px;
background: linear-gradient(to bottom, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%);
pointer-events: none; /* 下のテキストを選択・クリックできるようにする */
}rgba(255,255,255,0)(透明な白)からrgba(255,255,255,1)(不透明な白)へ変化させることで、下にいくほど背景色に溶け込んで消えていくように見えます。背景色がグレーや画像の場合は、その色に合わせてrgba()の値を変更してください。
⚠️ pointer-events: none; を忘れると下の要素を操作できなくなる
グラデーション部分は::afterで要素の上に重ねているため、pointer-events: none;を指定し忘れると、グラデーション部分がクリックやテキスト選択を邪魔してしまいます。透明に見えていても要素としては存在している、という点を忘れないようにしてください。
逆に「ぼかしから濃くなる」演出にしたい場合
画像自体をぼかしたい場合は、CSSのfilter: blur();を使い、mask-imageで徐々にぼかしを解除していく、というテクニックもあります。ただしこちらは表現がやや高度になる上、Safariでの対応にベンダープレフィックス(-webkit-mask-image)が必要になるなど、ブラウザ間の差異が出やすい実装です。単純な「コンテンツをふわっと隠す」演出であれば、本記事で紹介したグラデーション重ねの方法で十分なケースがほとんどです。
まとめ
- 透明→不透明のグラデーションを
::afterで重ねることで、コンテンツがふわっと消える演出を作れる - 色は背景色に合わせて
rgba()の値を調整する pointer-events: none;を忘れると下の要素の操作を邪魔してしまうので注意- 画像自体をぼかしたい場合は
filter: blur()+mask-imageだが、実装難易度は上がる