clip-path
で複雑な形状を作成するのは簡単ですが、境界線を追加することは永続的な課題です。 CSSには堅牢なソリューションがなく、多くの場合、面倒な回避策が必要です。この記事では、CSSペイントAPIを使用したソリューションを示しています。
このCSSペイントAPI探索シリーズは続きます:
この記事では、ポリゴンの境界線の作成について詳しく説明しています。この手法は現在、Chromiumベースのブラウザ(Chrome、Edge、Opera)でのみサポートされていることを忘れないでください。最新の互換性情報については、Caniuseを確認してください。
コードは簡潔で順応性のあるままであり、形状を変更するためにマイナーな変数調整のみが必要です。
ポリゴンの境界線は、ペイントAPIと生成されたclip-path
とカスタムマスクを組み合わせることで達成されます。
clip-path
を適用して、それをポリゴンに形作ります。clip-path
ステップのCSSは次のとおりです。
。箱 { - パス:50%0,100%100%、0 100%; 幅:200px; 高さ:200px; 背景:赤; ディスプレイ:インラインブロック。 クリップパス:ポリゴン(var( - パス)); }
重要なのは、CSS変数--path
です。 clip-path
とマスクの両方が、一貫したパラメーターにこの変数を使用します。
完全なCSSコードは次のとおりです。
。箱 { - パス:50%0,100%100%、0 100%; - ボーダー:5px; 幅:200px; 高さ:200px; 背景:赤; ディスプレイ:インラインブロック。 クリップパス:ポリゴン(var( - パス)); -webkit-mask:ペイント(ポリゴンボーダー); }
clip-path
に加えて、カスタムマスクが適用され、 --border
境界の厚さを制御します。 CSSはシンプルで一般的なままであり、ペイントAPIの使いやすさを強調しています。
ペイントAPI構造をよりよく理解するために、このシリーズのパート1を参照してください。
paint()
関数のJavaScriptコード:
COSTS POINT = PROPERTIES.GET( ' - PATH')。toString()。split( '、'); const b = parsefloat(properties.get( ' - border')。値); const w = size.width; const h = size.height; const cc = function(x、y){ // ... } var p = points [0] .trim()。split( ""); p = cc(p [0]、p [1]); ctx.beginpath(); ctx.moveto(p [0]、p [1]); for(var i = 1; i <points.length i p="points" .trim ctx.lineto ctx.closepath ctx.linewidth="2" b ctx.strokestyle="'black';" ctx.stroke><p>コードは<code>--path</code>変数を読み取り、ポイント配列に変換し、 <code>moveTo</code>と<code>lineTo</code>を使用してポリゴンを描画します。このポリゴンは<code>clip-path</code>ポリゴンを反映しています。ストロークは境界線を作成します。形状の塗りつぶしは透明です。</p><p>経路と厚さを変更すると、多様なポリゴンの境界線が可能になります。勾配と画像は、CSS <code>background</code>プロパティの使用により、固体を置き換えることができます。</p><p>コンテンツを組み込むには、クリッピングを防ぐために擬似要素が必要です。マスクプロパティは擬似要素に移動しますが、 <code>clip-path</code>メイン要素に残ります。</p><h3>よくある質問</h3><p>提供されたスクリプトに関するいくつかの一般的な質問を以下に説明します。</p><h4> <code>cc()</code>関数とは何ですか?</h4><p>この関数は、キャンバス要素内で使用可能なポイント座標(パーセンテージ値またはピクセル値)をピクセル値に変換します。</p><pre class="brush:php;toolbar:false"> const cc = function(x、y){ var fx = 0、fy = 0; if(x.indexof( '%')> -1){ fx =(parsefloat(x)/100)*w; } else if(x.indexof( 'px')> -1){ fx = parsefloat(x); } if(y.indexof( '%')> -1){ fy =(parsefloat(y)/100)*h; } else if(y.indexof( 'px')> -1){ fy = parsefloat(y); } return [fx、fy]; }
clip-path
を使用するのですか?マスクのみを使用すると、ストロークアライメントとホバイル可能な領域の問題が発生します。 clip-path
これらの問題を解決します。
@property
を使用するのですか? @property
はカスタムプロパティを登録し、そのタイプを定義します(この場合、<length></length>
)、文字列だけでなく、有効なタイプとしてブラウザの認識と取り扱いを可能にします。これにより、さまざまな長さのユニットが可能になります。
--path
変数はどうですか? --path
変数は、 @property
に複雑なタイプを登録することの制限により、文字列として処理されます。 cc()
関数は、文字列間変換を処理します。
はい、 ctx.setLineDash()
を使用します。追加の変数がダッシュパターンを制御します。
@property
を使用してみませんか?技術的には可能ですが、 paint()
内の値を取得することは問題があることが判明しました。今のところ、 --dash
変数は文字列として扱われます。
いくつかのユースケースは、ポリゴンボーダーテクニックを紹介します。
setLineDash()
とlineDashOffset
を使用して、さまざまなダッシュアニメーションを作成します。この記事では、CSSペイントAPIを使用してポリゴン境界を作成するための包括的なガイドを提供し、柔軟性と形状スタイリングの効率を提供します。
以上がCSSペイントAPIの探索:ポリゴンボーダーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。