例えば、以下のような図形があったとします。
See the Pen
Untitled by junpei (@junpei-sugiyama)
on CodePen.
三角形と星形は、clip-path
を使っています。
これに対して影を付けるbox-shadow
を書くと、このようになります。
See the Pen
Untitled by junpei (@junpei-sugiyama)
on CodePen.
clip-path
を使っている図形は、影が付いていません。
これを解決する方法を、解説していきます。
(有料になっていたらすいません🙇♂️)
clip-pathに影(shadow)を付ける方法
まず、先ほどのHTMLはこちらになります。
<div class="container">
<div class="box box-shadow"></div>
<div class="triangle box-shadow"></div>
<div class="star box-shadow"></div>
</div>
CSSはこちらです(要素同士の余白や、サイズは省略しています)
.box-shadow {
box-shadow: 5px 5px 5px rgba(0, 0, 0, .6);
}
.box {
background-color: #1cb4d3;
}
.triangle {
background-color: #1cb4d3;
clip-path: polygon(0 100%, 50% 0, 100% 100%);
}
.star {
background-color: #1cb4d3;
clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
}
全ての要素にbox-shadow
を書いていますが、影が付いているのはclip-path
を使っていないbox
だけです。
clip-pathを使った三角形の作り方は、以下の記事を参照下さい。
CSSで三角形を作る2つの方法(clip-path、border使用)
続きを見る
星形や五角形なども作れますが、それについては以下のサイトが便利です。
それでは、clip-path
を使った要素に影を付けていきますが、2つの方法があります。
drop-shadowを使う方法
drop-shadow
を使う場合は、HTMLを以下のようにします。
<div class="container">
<div class="clip-path-shadow">
<div class="triangle"></div>
</div>
<div class="clip-path-shadow">
<div class="star"></div>
</div>
</div>
先ほどと違うのは、clip-path
を使う要素をdivタグで囲っているところです。
<!-- 変更前 -->
<div class="triangle"></div>
<div class="star"></div>
<!-- 変更後 -->
<div class="clip-path-shadow">
<div class="triangle"></div>
</div>
<div class="clip-path-shadow">
<div class="star"></div>
</div>
そして、追記したCSSはこちらです。
.clip-path-shadow {
filter: drop-shadow(5px 5px 5px rgba(0, 0, 0, .6));
}
ここでは、box-shadow
ではなくfilter
のdrop-shadow
を使っています。
デモはこちらです。
See the Pen
Untitled by junpei (@junpei-sugiyama)
on CodePen.
四角形は、先ほどと同じくbox-shadow
を使っています。
擬似要素を使う方法
擬似要素を使う場合は、HTMLはそのままでOKです。
<div class="container">
<div class="triangle"></div>
<div class="star"></div>
</div>
そして、三角形と星形の両方のCSSを書くと見にくいので、三角形のCSSだけ書きます(要素同士の余白や、サイズは省略しています)
/* 変更前 */
.triangle {
background-color: #1cb4d3;
clip-path: polygon(0 100%, 50% 0, 100% 100%);
}
/* 変更後 */
.triangle {
filter: drop-shadow(5px 5px 5px rgba(0, 0, 0, .6));
position: relative;
}
.triangle::before {
background-color: #1cb4d3;
clip-path: polygon(0 100%, 50% 0, 100% 100%);
content: "";
display: block;
height: 100%;
position: absolute;
width: 100%;
}
つまり、背景色のbackground-color
とclip-path
は、要素ではなく擬似要素に書き換えます。
デモはこちらです。
See the Pen
clip-pathに影(shadow)を付ける方法④ by junpei (@junpei-sugiyama)
on CodePen.
見た目はdrop-shadow
を使う方法と同じです。
まとめ:clip-pathに影を付けるには、drop-shadowか擬似要素を使う
今回は、clip-path
に影を付ける方法を2つご紹介しました。
それぞれの特徴はこちらです。
drop-shadow
擬似要素
HTMLを変えても良いけどCSSは簡単にしたい場合はdrop-shadow
を使い、HTMLを変えたくない場合は擬似要素を使うのが良いかと思います。
以上になります。