時給単価UP【3大特典付き】
コーディングテクニック集100選⋙

【解説】CSSでclip-pathに影(shadow)をつける【サンプルあり】

記事内に広告を含みます

パソ君
パソ君

・clip-pathに影をつける方法は?

こんな疑問にお答えします。

デザインによっては、clip-pathを使って多角形や斜めの四角形を作る場面ありますよね。

で、その要素に影がつくこともあるかと。

ただclip-pathを使った場合、普通に指定しても影をつけることができません。。

ジト
ジト

ちょっと違うやり方をする必要あり!

ということで、この記事では「CSSでclip-pathに影(shadow)をつける」について解説していきます!

この記事でわかること

・CSSでclip-pathに影(shadow)をつける
・CSSでclip-pathにborderを実装しつつ影(shadow)をつける

【解説】CSSでclip-pathに影(shadow)をつける【そのままやると・・】

clip-pathを使った要素に対して、box-shadowを指定しても影がつきません。。

そのサンプルがこちら↓

See the Pen clip-pathに影➀ by jito-coder (@jito-coder) on CodePen.

影がついていませんよね。

ですが下記コードのように、実際box-shadowを指定しています。

<div class="square01">
    四角形
</div>
<div class="polygon01">
    多角形
</div>
.square01 {
  /* 省略 */
  clip-path: polygon(0 0, 100% 20%, 100% 100%, 0 80%);
  box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
}

.polygon01 {
/* 省略 */
  clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%);
  box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
}

このように普通に指定しても影がつきません。

【解説】CSSでclip-pathに影(shadow)をつける【サンプルあり】

一工夫すればclip-pathに対して影をつけることができます。

それが「疑似要素」+「filtter(drop-shadow)」を用いることです。

サンプルがこちら↓

See the Pen clip-pathに影➁ by jito-coder (@jito-coder) on CodePen.

<div class="square02">
    四角形
</div>
<div class="polygon02">
    多角形
</div>
.square02 {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 150px;
  width: min(100%, 150px);
  padding: 20px;
  margin-inline: auto;
  color: #fff;
  filter: drop-shadow(4px 4px 4px rgba(0, 0, 0, 0.5));
  position: relative;
}
.square02::before {
  content: "";
  display: block;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: -1;
  background-color: orange;
  clip-path: polygon(0 0, 100% 20%, 100% 100%, 0 80%);
}

コードの中で重要な点がこちら↓

  1. 要素の背景色を指定しない
  2. 要素に対して「filter: drop-shadow」を使う
  3. 同じ大きさの疑似要素を作成して背景色をつける
  4. 疑似要素に対して「clip-path」を使う
  5. 疑似要素を要素より下の重なり順にする

順に解説してきます。

➀:要素の背景色を指定しない

まず影をつけたい要素に対して、背景色をなくしておきます。

.square02 {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 150px;
  width: min(100%, 150px);
  padding: 20px;
  margin-inline: auto;
  color: #fff;
}

➁:要素に対して「filter: drop-shadow」を使う

続いてその要素に対して、box-shadowではなく「filter: drop-shadow」を指定します。

.square02 {
~~~~
  filter: drop-shadow(4px 4px 4px rgba(0, 0, 0, 0.5));
}

➂:同じ大きさの疑似要素を作成して背景色をつける

そしたら疑似要素を作成しましょう。

大きさは要素と同じになるように指定。さらに要素につけるはずだった背景色を、この疑似要素につけます。

.square02 {
  ~~~~
  /* 疑似要素の位置関係のためposition: relativeをつける */
    position: relative;
}

.square02::before {
  content: "";
  display: block;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  background-color: orange;
}

(要素の上に疑似要素があるため、文字は現状隠れております)

ジト
ジト

要素に対して「position: relative;」を忘れずにつけよう!

➃:疑似要素に対して「clip-path」を使う

ここで疑似要素に対して「clip-path」を使います。

するとクリッピングしながらの、その部分に影をつけることができました。

.square02::before {
~~~~
  clip-path: polygon(0 0, 100% 20%, 100% 100%, 0 80%);
}

➄:疑似要素を要素より下の重なり順にする

あとは重なり順を指定するだけ。

今、疑似要素の方が要素より上にあるため、テキストが隠れています。
そのため「z-index」を用いて下にしましょう。

.square02::before {
~~~~
  z-index: -1;
}

これで「clip-path」を使いつつ、その部分に影をつける実装ができました!

clip-pathでborderに影をつけてみた!

最後に自分用のメモとして、borderつきのclip-pathに対して影をつけてみました。

サンプルがこちら↓

See the Pen clip-pathに影➂ by jito-coder (@jito-coder) on CodePen.

とはいっても疑似要素をもう一つ作成して、無理やりborderっぽくさせてるだけです。

.square03::after {
  content: "";
  display: block;
  width: calc(100% + 10px);
  height: calc(100% + 10px);
  position: absolute;
  top: -5px;
  left: -5px;
  z-index: -2;
  background-color: orange;
  clip-path: polygon(0 0, 100% 20%, 100% 100%, 0 80%);
}

widthとheightを少し大きめ(+10px)に指定して、はみ出した部分をborderっぽくしております。

均一にはみ出すために、topとleftには10pxの半分の5pxを指定。

そして一番下の重なり順にするために、z-indexは-2を指定しました。

良ければ参考にどうぞ!

【解決】png透過画像に影(box-shadow)をつける方法【CSS】

【解説】CSSでclip-pathに影(shadow)をつける【サンプルあり】:まとめ

  • 要素の背景色を指定しない
  • 要素に対して「filter: drop-shadow」を使う
  • 同じ大きさの疑似要素を作成して背景色をつける
  • 疑似要素に対して「clip-path」を使う
  • 疑似要素を要素より下の重なり順にする
ジト
ジト

clip-pathに影(shadow)をつけたい時はためしてみてね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA