ホームページ > ウェブフロントエンド > CSSチュートリアル > 完全な CSS 円セクターを作成する方法

完全な CSS 円セクターを作成する方法

Barbara Streisand
リリース: 2025-01-11 14:04:46
オリジナル
646 人が閲覧しました

最近、私は CSS ジャックポット ルーレットを構築しました。これは、針が指すセクターを動的に強調表示するという、ユニークな課題を提示したプロジェクトです。 ルーレットには応答性と可変セクター数が必要で、単純な画像や SVG ソリューションは除外されました。 幾何学的な計算は不可欠でした。

私のアプローチでは、円の中心を中心にスパンを回転し、半径に沿ってクリップする必要がありました。 以下に詳しく説明されている初期設定 (さらに下のリンクから完全に入手できます) には、基本的なスタイル設定とスパンの増分回転 (360/sectors.length 度) が含まれていました。 この段階ではまだ視覚的に洗練されていませんでした。

セクターを強調表示するには、半径と角度を指定した円上の 2 点間の距離が必要でした。 式は次のとおりです:

<code>2 * radius * Math.sin(θ / 2)</code>
ログイン後にコピー

ここで、θ はラジアン単位の角度です。 使用するために変換されました:

<code>2 * radius * Math.sin(Math.PI / sectors.length)</code>
ログイン後にコピー

次に、重複を防ぐためにセクターのクリッピングに取り組みました。私の最初の試みは、斜めのクリップパスを使用しました:

<code>clip-path: polygon(100% 0, 0 50%, 100% 100%);</code>
ログイン後にコピー

これは多くのセクターで適切に機能しましたが、以下に示すように、セクターが少なく、特に 3 つだけのセクターでは欠陥が明らかになりました。

How to create perfect CSS circle sectors

解決策には、スパンと円の間の交点を計算し、その点から中心までクリッピングすることが含まれていました。これによりクリッピングが修正されました:

How to create perfect CSS circle sectors

研究により、交点を結ぶ線によって水平線上に作成されるセグメントの式が得られました。

中央セグメント:

<code>radius * (1 - Math.cos(θ / 2))</code>
ログイン後にコピー

外側セグメント:

<code>radius * Math.cos(θ / 2)</code>
ログイン後にコピー

(θはラジアン単位)

これらのセグメント間の比率によってクリッピング ポイントが決まり、次のことが起こります。

<code>const clipPosition = Math.cos(Math.PI / sectors.length) * 100</code>
ログイン後にコピー

修正された clip-path:

<code>{
  'clip-path': `polygon(100% 0, ${clipPosition}% 0, 0 50%, ${
    clipPosition
  }% 100%, 100% 100%)`
}</code>
ログイン後にコピー

最終的な Vue ベースの結果では、センター クリックによるランダム スピンとセクター クリックによるターゲット スピンが可能になります。 (原文どおり、完全なコードへのリンクは省略されています)。 このプロジェクトは、実践的な三角法の貴重なレッスンを提供しました。

以上が完全な CSS 円セクターを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート