円形、楕円形、波形... で表現できる形状のすべて

2024-04-02

CSS Miscellaneous の <basic-shape> は、円形や楕円形などの基本的な形状を生成するプロパティです。従来の画像や SVG を用いる方法と比べて軽量で柔軟なデザインを実現できます。この解説では、<basic-shape> の基本的な使い方から、応用的な表現まで、分かりやすくご紹介します。

<basic-shape> は、以下の 2 つのプロパティで構成されています。

  • shape-outside: 要素の外側の形状を指定します。
  • shape-image-threshold: 画像を形状に切り抜く際の閾値を指定します。

基本的な形状の生成

shape-outside プロパティを用いることで、以下の基本的な形状を生成できます。

  • circle: 円形
  • ellipse: 楕円形
  • inset: 内側の余白を指定
  • polygon: 点の座標を指定して多角形

例:円形

.circle {
  shape-outside: circle(50%);
  width: 100px;
  height: 100px;
  background-color: red;
}

上記コードは、100px 四方の要素を、半径 50px の円形に切り抜きます。

画像の切り抜き

shape-image-threshold プロパティを用いることで、画像を形状に切り抜くことができます。

例:画像を円形に切り抜く

.image-circle {
  shape-outside: circle(50%);
  width: 100px;
  height: 100px;
  background-image: url(image.jpg);
  shape-image-threshold: 0.5;
}

上記コードは、image.jpg を半径 50px の円形に切り抜き、shape-image-threshold プロパティで閾値を 0.5 に設定することで、半透明な効果を適用します。

応用的な表現

shape-outsideshape-image-threshold プロパティを組み合わせることで、様々な形状を生成できます。

例:波形

.wave {
  shape-outside: repeating-linear-gradient(
    to right,
    transparent 0%,
    transparent 10%,
    #000 10%,
    #000 20%,
    transparent 20%,
    transparent 30%
  );
  width: 100px;
  height: 100px;
  background-color: blue;
}

上記コードは、repeating-linear-gradient を用いて波形を生成し、shape-outside プロパティで要素に適用します。

ブラウザ対応状況

<basic-shape> は比較的新しいプロパティであり、すべてのブラウザで対応しているわけではありません。最新の情報は、Can I Use: https://caniuse.com/ などのサイトで確認できます。

まとめ

CSS Miscellaneous の <basic-shape> は、軽量で柔軟なデザインを実現できる強力なツールです。基本的な使い方から応用的な表現まで、理解を深めることで、Web デザインの可能性を広げることができます。



<basic-shape> サンプルコード

  • 円形
.circle {
  shape-outside: circle(50%);
  width: 100px;
  height: 100px;
  background-color: red;
}
  • 楕円形
.ellipse {
  shape-outside: ellipse(50% 25%);
  width: 100px;
  height: 100px;
  background-color: blue;
}
  • 多角形
.polygon {
  shape-outside: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
  width: 100px;
  height: 100px;
  background-color: green;
}

画像の切り抜き

  • 画像を円形に切り抜く
.image-circle {
  shape-outside: circle(50%);
  width: 100px;
  height: 100px;
  background-image: url(image.jpg);
  shape-image-threshold: 0.5;
}
.image-star {
  shape-outside: polygon(50% 0%, 62.5% 35.4%, 79.3% 35.4%, 68.8% 57.7%, 80% 100%, 50% 70.7%, 20% 100%, 31.2% 57.7%, 10.7% 35.4%, 37.5% 35.4%);
  width: 100px;
  height: 100px;
  background-image: url(image.jpg);
  shape-image-threshold: 0.5;
}

応用的な表現

  • 波形
.wave {
  shape-outside: repeating-linear-gradient(
    to right,
    transparent 0%,
    transparent 10%,
    #000 10%,
    #000 20%,
    transparent 20%,
    transparent 30%
  );
  width: 100px;
  height: 100px;
  background-color: blue;
}
  • 三角形のマスク
.triangle-mask {
  shape-outside: polygon(0% 0%, 100% 0%, 50% 100%);
  width: 100px;
  height: 100px;
  background-color: red;
  overflow: hidden;
}

.triangle-mask img {
  width: 200px;
  height: 200px;
}
  • グラデーションと組み合わせた円形
.gradient-circle {
  shape-outside: circle(50%);
  width: 100px;
  height: 100px;
  background: radial-gradient(circle at center, red 0%, blue 100%);
}

これらのサンプルコードはあくまでも参考例です。<basic-shape> の可能性は無限大です。ぜひ、様々なアイデアを試して、Web デザインの可能性を広げてください。



<basic-shape> 以外の方法

border-radius プロパティは、要素の角丸半径を指定します。円形や楕円形に近い形状を生成できます。

例:円形

.circle {
  border-radius: 50%;
  width: 100px;
  height: 100px;
  background-color: red;
}

clip-path プロパティは、要素の表示領域を指定します。SVG パスを用いて、様々な形状を生成できます。

例:三角形

.triangle {
  clip-path: polygon(0% 0%, 100% 0%, 50% 100%);
  width: 100px;
  height: 100px;
  background-color: red;
}

::before / ::after 疑似要素を用いて、コンテンツの後に別の要素を挿入できます。この要素に border-radiusclip-path を適用することで、形状を生成できます。

例:星形

.star::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100px;
  height: 100px;
  border-radius: 50%;
  clip-path: polygon(50% 0%, 62.5% 35.4%, 79.3% 35.4%, 68.8% 57.7%, 80% 100%, 50% 70.7%, 20% 100%, 31.2% 57.7%, 10.7% 35.4%, 37.5% 35.4%);
  background-color: red;
}

画像

円形や四角形などの単純な形状であれば、画像を用いることもできます。

例:四角形

<img src="square.png" width="100" height="100">

比較

それぞれの方法にはメリットとデメリットがあります。

方法メリットデメリット
<basic-shape>軽量で柔軟ブラウザ対応状況が限定的
border-radius簡単で軽量複雑な形状には不向き
clip-path複雑な形状に対応コード量が多くなる
::before / ::after疑似要素の機能を活用コード量が多くなる
画像簡単で汎用性が高いファイルサイズが大きくなる

どの方法を選択するかは、形状の複雑さやブラウザ対応状況、ファイルサイズなどを考慮して決定する必要があります。




ゲーム理論:ビジネス、政治、日常生活に潜む戦略的思考

ゲーム理論の基本的な要素は以下の3つです。プレイヤー: 意思決定を行う主体戦略: プレイヤーが選択できる行動の選択肢利得: プレイヤーが各戦略を選択したときの得られる利益ゲーム理論は、これらの要素を数学的なモデルを用いて分析することで、プレイヤーがどのような戦略を選択するのか、どのような結果になるのかを予測することができます。



CSSでセピア色の世界へようこそ!画像や要素をレトロに変身させる魔法の方法

CSSの「Filter Effects」機能の一つである「sepia()」は、画像や要素をモノクロ化し、茶褐色(セピア色)のトーンを適用する関数です。古い写真のようなレトロな雰囲気を演出したい場合などに効果的に使用できます。構文n は、セピア色の強さを表す数値です。0.0の場合は元の画像の色合いが維持され、1.0になると完全にセピア色になります。


デバイスに合わせた最適な表示: CSS Media Queriesと@media.monochrome

@media. monochromeは、モノクロディスプレイ向けのスタイルシートを指定するメディアクエリです。カラーディスプレイではないデバイスで、どのようにコンテンツを表示するかを制御できます。利用例:上記の例では、モノクロディスプレイでは背景色を白、テキスト色を黒に設定しています。


初心者向け!CSSのMedia Queriesと@media.device-widthでレスポンシブデザインを作ろう

@media. device-widthは、デバイスの幅に基づいてスタイルシートを切り替えるためのメディアクエリです。例えば、以下のように記述することで、スマートフォンとタブレット、デスクトップそれぞれに異なるスタイルを適用できます。@media


@media.any-pointer 完全ガイド: タッチスクリーンデバイスとペン入力デバイス向けスタイルシート

@media. any-pointer は、ユーザーが タッチスクリーン や ペン などのポインティングデバイスを使用しているかどうかを検知する CSS メディアクエリです。デバイスの種類に関わらず、これらのデバイスで操作しやすいようにスタイルを調整できます。



Webデザイナー必見!inset-block-end プロパティで実現する高度なレイアウト

inset-block-end は、以下の要素に適用できます。絶対配置された要素グリッドレイアウトのアイテムフレックスボックスのアイテムinset-block-end の値は、以下のいずれかになります。長さ (px、em、remなど)パーセンテージ


【上級者向け】FlexboxレイアウトとJavaScriptで子要素を動的に縮小する方法

flex-shrinkは、以下の状況で機能します。親要素の幅が、flex-basisで設定された子要素の合計幅よりも小さい場合flex-wrapプロパティがno-wrapに設定されている場合これらの条件を満たす場合、flex-shrinkの値に応じて、子要素が縮小されます。


CSS セレクターマスターへの道 :first-of-type と first-child の違い

例:この例では、container 要素内の最初の p 要素のみが赤色で表示されます。:first-of-type は、以下の要素に適用できます。HTML要素擬似要素コンテンツ要素例:この例では、ul 要素内の最初の li 要素のみが太字で表示されます。


labを使いこなして、表現力豊かなデザインを!

labは、3つの値で構成されます。L: 明度 (Lightness) - 0 (暗) から 100 (明) までの値a: 赤緑 (Red-Green) - -128 (緑) から 127 (赤) までの値b: 黄青 (Yellow-Blue) - -128 (青) から 127 (黄) までの値


CSSフレックスボックスレイアウト:アイテムを自在に配置!サンプルコード集

CSSフレックスボックスレイアウトは、Webデザインにおける要素の配置を柔軟に制御するための強力なツールです。従来のレイアウト方法と異なり、フレックスボックスは、行と列を簡単に作成し、要素を自動的に整列して間隔を調整することができます。この機能は、レスポンシブデザインや複雑なレイアウトの作成を容易にするため、非常に役立ちます。