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

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になると完全にセピア色になります。


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

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


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

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


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

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



スクロール連動アニメーションの作り方:CSS vs JavaScript

概要動作環境: 主要なブラウザでサポートされています。利点: コード量が少なく、記述がシンプル スクロール量とアニメーションを直接結びつけ、直感的に操作可能 高度なアニメーションも容易に実現コード量が少なく、記述がシンプルスクロール量とアニメーションを直接結びつけ、直感的に操作可能


border-start-end-radius プロパティと writing-mode、direction、text-orientation

border-start-end-radius プロパティは、要素の境界線の論理的な角丸の半径を指定します。これは、要素の writing-mode、direction、text-orientation に基づいて、物理的な角丸半径にマッピングされます。


CSSの魔法:background-blend-modeでデザインをレベルアップ

background-blend-mode は、要素の背景画像と背景色、または複数の背景画像同士をどのように混合するかを制御する CSS プロパティです。 Photoshop などの画像編集ソフトでいう「描画モード」に相当します。使い方background-blend-mode は以下の要素に適用できます。


CSS nth-last-child の徹底解説!後ろから数えて要素を選択する魔法のセレクタ

:nth-last-child は、要素の子要素のうち、後ろから数えて特定の位置にある要素を選択するための CSS セレクタです。構文selector: 対象となる要素を指定するセレクタn: 子要素の後ろからの位置を表す数値使い方:nth-last-child は、以下の使い方があります。


CSSコンポジティングとブレンド:画像を重ねて表現を豊かに

コンポジティング:レイヤーの重ね合わせコンポジティングは、複数のレイヤーを重ねることで、奥行きや陰影などの効果を生み出す技術です。Photoshopなどの画像編集ソフトでいう「レイヤー」と似ていますが、CSSでは要素をレイヤーとして扱い、それぞれに位置や透明度などの設定を施せます。