CSS

clip-path is a CSS property used to customize the shape of an element, allowing you to clip it using shapes such as polygons or circles.

clip-path

 clip-pathプロパティは、指定された形状で要素を切り抜くことができるプロパティです。これによって、四角形以外の形状を持った要素を作成することができます。

 clip-pathプロパティにはいくつかの値がありますが、最も一般的なものは polygon()です。polygon()関数は、角度を指定して複数の座標を指定することで、多角形の形状を作成することができます。たとえば、以下のようなコードを使用して、要素を三角形に切り抜くことができます。

HTML

<div class="smp1"></div>

CSS

.smp1 {
	margin: 1ex;
	width: 100px;
	height: 100px;
	background-color: khaki;
	clip-path: polygon(0 0, 100% 0, 50% 100%);
}

 このコードは、要素の左上隅から始まり、右上隅、下部中央、そして左上隅に戻る、三角形の形状を作成します。

 また、circle()関数を使用すると、円形のクリッピングを作成することもできます。以下は、要素を半径 50pxの円形に切り抜く方法です。

HTML

<div class="smp2"></div>

CSS

.smp2 {
	margin: 1ex;
	width: 100px;
	height: 100px;
	background-color: khaki;
	clip-path: circle(50px at center);
}

 atキーワードを使用すると、中心点を指定することができます。この場合、centerキーワードは、要素の中心を指定します。

 clip-pathプロパティは、動的なアニメーションにも使用することができます。たとえば、マウスオーバー時に要素を拡大することができます。

HTML

<div class="smp3"></div>

CSS

.smp3 {
	margin: 1ex;
	width: 100px;
	height: 100px;
	background-color: khaki;
	clip-path: polygon(0 20%, 100% 20%, 50% 100%);
	transition: clip-path 0.5s ease-in-out;
}

.smp3:hover {
	clip-path: polygon(0 0, 100% 0, 50% 100%);
}

 このコードでは、マウスオーバー時に三角形の上部を 20%拡大します。

 clip-pathプロパティは、要素の可視性を制御するためにも使用できます。たとえば、以下のように、要素の半分を切り抜くことができます。

HTML

<div class="smp4"></div>

CSS

.smp4 {
	margin: 1ex;
	width: 100px;
	height: 100px;
	background-color: khaki;
	clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%);
}

 このコードは、要素の左側半分を切り抜きます。

 clip-pathプロパティには、いくつかの値があります。ここでは、よく使われる値について紹介します。

基本的な値

none
clip-path: none; は、クリッピングを行わないことを示します。これが既定値です。
initial / unset
initial は、プロパティの初期値に設定することを示します。unset は、親の値に従って初期値が設定されることを示します。

シェイプの値

circle()

 circle() 関数は、円形のクリッピングを作成します。引数として、円の中心座標と半径を指定します。半径は、px、em、rem、% などの単位を指定できます。

CSS

.element {
	clip-path: circle(50% at center);
}

 上記の例では、要素の中心に半径 50%の円形のクリッピングが作成されます。

ellipse()

 ellipse() 関数は、楕円形のクリッピングを作成します。引数として、楕円の中心座標と水平半径、垂直半径を指定します。半径は、px、em、rem、% などの単位を指定できます。

CSS

.element {
	clip-path: ellipse(25% 50% at center);
}					  

 上記の例では、要素の中心に垂直半径が 50%、水平半径が 25%の楕円形のクリッピングが作成されます。

polygon()

 polygon() 関数は、多角形のクリッピングを作成します。引数として、各頂点の座標を指定します。

CSS

.element {
	clip-path: polygon(0 0, 100% 0, 100% 50%, 50% 100%, 0 50%);
}

 上記の例では、五角形のクリッピングが作成されます。

SVGの値

 clip-pathプロパティでは、SVGパスを使用して複雑なクリッピングを作成することもできます。SVGパスは、 path要素の d属性で指定される値です。

CSS

.element {
	clip-path: url(#my-clip-path);
}

 上記の例では、IDが my-clip-pathの SVG clipPath要素を参照する url() 関数が使用されています。

継承

 clip-pathプロパティは、継承されません。つまり、clip-pathプロパティが設定されている要素の子要素には、クリッピングされた領域は適用されません。ただし、子要素に個別に clip-pathを設定することはできます。

クリッピングのアニメーション

 clip-pathプロパティを使用することで、クリッピングにアニメーションを追加することもできます。以下の例は、hover状態で円形のクリッピングを拡大するアニメーションを作成する例です。

CSS

.element {
	margin: 1ex;
	width: 100px;
	height: 100px;
	background-color: khaki;
	clip-path: circle(25% at center);
	transition: clip-path 1s ease-in-out;
}

.element:hover {
	clip-path: circle(50% at center);
}

 この例では、要素を 100px x 100px の正方形として定義しています。clip-pathプロパティで、最初は円形の半径が 0%のクリッピングを作成しています。transitionプロパティで、clip-pathプロパティに 1秒間のアニメーションを追加しています。hover状態では、clip-pathプロパティを変更して、半径 50%の円形のクリッピングを作成しています。マウスを要素の上に移動すると、クリッピングが円形に拡大するアニメーションが発生します。

ベンダープレフィックス

 clip-pathプロパティは、最新の CSS仕様の一部であり、すべてのブラウザで完全にサポートされているわけではありません。一部のブラウザでは、ベンダープレフィックスを使用する必要があります。

 以下の例は、ベンダープレフィックスを使用して、clip-pathプロパティをサポートするブラウザに対応する方法を示しています。

CSS

.element {
	clip-path: circle(50% at center);
	-webkit-clip-path: circle(50% at center);
}

 この例では、-webkit-clip-pathプロパティを使用して、一部のブラウザに対応しています。clip-pathプロパティを使用して、他のブラウザでサポートされている最新の CSS仕様に準拠しています。

 clip-pathプロパティは、要素を複雑な形状にクリッピングするための便利なツールです。円形や多角形、SVGパスを使用してクリッピングを作成することができます。CSSレイアウトにおいて、デザインの多様性を追求するためには非常に役立つプロパティです。

 ただし、使用方法によっては、パフォーマンスの問題が発生する場合があるため、慎重に使用することが重要です。また、ブラウザの互換性の問題もあるため、注意が必要です。さらに、パスの作成や編集に熟練している必要があります。

 CSSアニメーションを使用することで、クリッピングに動きを追加することができ、創造的で興味深いデザインを作成することができます。このプロパティを使用することで、カスタムシェイプに要素をクリップすることができ、様々な形状を作成することができます。circle() や ellipse()、polygon() などの関数を使用することで、さらに多様な形状を作成することができます。

 CSSでのクリッピングは、一部のグラフィックエディターでのマスク(型抜き)のような機能と似ていますが、機能的には異なるため、使い分ける必要があります。

Browser support

 clip-pathプロパティは、ブラウザのサポートについて注意が必要です。モダンなブラウザーではほとんどの場合、サポートされていますが、古いバージョンのブラウザーではサポートされていない場合があります。IEはバージョン10以降でサポートされていますが、一部のモバイルブラウザではパフォーマンスの問題が発生する場合があります。そのため、使用する前にサポート状況を確認することが重要です。

Data on support for the css-clip-path feature across the major browsers from caniuse.com