Css

CSSで扇形を描く方法は?



How Draw Circle Sector Css



解決:

CSSと複数の背景グラデーション

緑の部分を描画しようとするのではなく、代わりに白の部分を描画することができます。

パイ{ボーダー半径:50%;背景色:緑; } .ten {background-image:/ * 10%= 126deg = 90 +(360 * .1)* / linear-gradient(126deg、transparent 50%、white 50%)、linear-gradient(90deg、white 50%、透明50%); }
パイ{幅:5em;高さ:5em;表示ブロック;境界半径:50%;背景色:緑;ボーダー:2px無地の緑;フロート:左;マージン:1em; } .ten {background-image:linear-gradient(126deg、transparent 50%、white 50%)、linear-gradient(90deg、white 50%、transparent 50%); } .twentyfive {background-image:linear-gradient(180deg、transparent 50%、white 50%)、linear-gradient(90deg、white 50%、transparent 50%); } .fifty {background-image:linear-gradient(90deg、white 50%、transparent 50%); } / *スライスが50%を超える場合は、最初のグラデーションを透明にする必要があります->緑* / .seventyfive {background-image:linear-gradient(180deg、transparent 50%、green 50%)、linear-gradient(90deg、white 50% 、透明50%); } .onehundred {background-image:none; }
  

デモ:http://jsfiddle.net/jonathansampson/7PtEm/



ここに画像の説明を入力してください

スケーラブルベクターグラフィックス

オプションの場合は、SVGを使用して同様の効果を達成できます要素。次のことを考慮してください。



  

上記はかなり簡単です。円とパスを含む要素があります。円の中心は115x115にあります(SVG要素を230x230にします)。円の半径は110で、幅は合計220になります(境界線は10のまま)。

次に、この例の最も複雑な部分である要素。この要素には、パスが描画される場所と方法を決定する1つの属性があります。次の値で始まります。

M115,115

これにより、パスは前述の円の中心から開始するように指示されます。次に、この場所から次の場所に線を引きます。



L115,5

これにより、円の中心から要素の上部まで垂直線が描画されます(まあ、上部から5ピクセル)。この時点で、物事はもう少し複雑になりますが、それでも非常に理解しやすくなります。

現在の場所(115,5)から円弧を描きます。

A110,110 1 0,1 190,35 z

これにより、円弧が作成され、円(110)の半径と一致する半径が与えられます。 2つの値はx半径とy半径を表し、円を扱っているため、どちらも同じです。重要な数字の次のセットは最後です、190,35。これは、アークにどこで完了するかを指示します。

残りの情報については(10,1およびz)これらは、アーク自体の曲率、方向、および終端を制御します。オンラインのSVGパスリファレンスを参照することで、それらについて詳しく知ることができます。

異なるサイズの「スライス」を実現するには、単に座標のより大きなまたはより小さなセットを反映するために190,35。 180度を超えてスパンする場合は、2番目の円弧を作成する必要がある場合があります。

ある角度からx座標とy座標を決定する場合は、次の方程式を使用できます。

x = cx + r * cos(a)y = cy + r * sin(a)

上記の例では、76の次数は次のようになります。

x = 115 + 110 * cos(76)y = 115 + 110 * sin(76)

それは私たちに205,676,177,272。

簡単に、次のものを作成できます。

円{塗りつぶし:#f1f1f1;ストローク:緑;ストローク幅:5; }パス{塗りつぶし:緑; } svg.pie {幅:230px;高さ:230px; }
  

デモ:http://jsfiddle.net/jonathansampson/tYaVW/

ここに画像の説明を入力してください


それは非常によく使用して可能ですオーバーフローして複雑な計算を行うことなくプロパティを変換します。

>回転変換

180度未満の角度の場合

  1. で要素を追加します アスペクト比2:1オーバーフロー:非表示;

  2. 上部の境界線の半径が要素の高さと同じで、下部の半径が0の疑似要素を追加します。

  3. 置く変換元:50%100%;これにより、疑似要素が中央下から変換されます。

  4. 変換:rotate();必要な角度の補足による疑似要素、
    NS 。、変換:rotate(180-rqrd。angle);

それがどのように機能するかを見てください:

ここに画像の説明を入力してください

EG:
この方法を使用した40度の扇形: フィドル

div {...オーバーフロー:非表示; ...} div:before {... border-radius:100px 100px 0 0;変換元:50%100%;変換:rotate(140deg); ...}
div {高さ:100px;幅:200px;オーバーフロー:非表示;位置:相対; } div:before {height:inherit;幅:継承;位置:絶対;コンテンツ: ''; border-radius:100px 100px 0 0;背景色:深紅色; -webkit-transform-origin:50%100%; -moz-transform-origin:50%100%; -ms-transform-origin:50%100%;変換元:50%100%; -webkit-transform:rotate(140deg); -moz-transform:rotate(140deg); -ms-transform:rotate(140deg);変換:rotate(140deg); }
  

>スキュー変換

セクター内に画像を入れることもできます!

これは、親のスキュー変換と疑似要素の-veスキュー:
フィドル

div {...オーバーフロー:非表示;変換元:0%100%;変換:skew(-50deg); / * rqrd角度の補数* / ...} div:before {... transform-origin:0%100%;変換:skew(50deg); ...}

これがどのように機能するかをご覧ください:

ここに画像の説明を入力してください

div {高さ:200px;幅:200px;オーバーフロー:非表示; -webkit-transform-origin:0%100%; -moz-transform-origin:0%100%; -ms-transform-origin:0%100%;変換元:0%100%; -webkit-transform:skew(-50deg); -moz-transform:skew(-50deg); -ms-transform:skew(-50deg);変換:skew(-50deg); / * rqrd角度または(90-角度)の補数* /位置:相対; } div:before {height:inherit;幅:継承;位置:絶対;コンテンツ: ''; border-radius:0 200px 0 0;背景:url( 'http://www.placekitten.com/g/300/200/'); -webkit-transform-origin:0%100%; -moz-transform-origin:0%100%; -ms-transform-origin:0%100%;変換元:0%100%; -webkit-transform:skew(50deg); -moz-transform:skew(50deg); -ms-transform:skew(50deg);変換:skew(50deg); }
  

謝辞 :私はセルフスティーラーになりたくありません。以前こことここで使用したアイデアを使用しました。


これは役に立ちますか?

.circle {幅:16em;高さ:16em;境界半径:50%;背景:linear-gradient(36deg、#272b66 42.34%、transparent 42.34%)0 0; background-repeat:no-repeat;背景サイズ:50%50%; }
  

ワーキングフィドル

実際、ここではいくつかのジオメトリ計算が必要です。しかし、簡単に説明させてください。

円の4つの四分の一を考慮すると、線形勾配の角度は各四分の一で計算できます。そしてそのbackground-positionが四半期を決定します。

Q = 1> 0 Q 2 = 100%> 100%100%Q = 3> 0 100%Q 4 => 0 0

残っているのは使用済みの場所だけです カラーストップ から来ました:

考えてみてください 30角 の円の一部 第1四半期

才能として アナチューダー 彼女の中で説明しました 素晴らしい記事 、正方形の幅の長さをaの場合、対角線の半分の長さは次のようになります。a * sqrt(2)/ 2。

勾配度を次のようにするとg2つの勾配角と対角線の差がd次にの長さカラーストップは次の方法で計算できます。

a * sin(g)/(a * sqrt(2)/ 2 * cos(d))= sin(g)/(sqrt(2)/ 2 * cos(d))

したがって、この場合、sin(30deg)/(sqrt(2)* cos((45-30)deg))= 0.3660、カラーストップの%値は36.60%

私たちの形は第1四半期なので、背景位置は100%0。

線形勾配は次のようになります このような

線形グラデーション(-30度、オレンジ36.60%、透明36.60%)100%0;
.circle {幅:16em;高さ:16em;境界半径:50%;背景:線形勾配(-30度、オレンジ36.60%、透明36.60%)100%0; background-repeat:no-repeat;背景サイズ:50%50%; }
  

詳細については、Anaの記事を読むことをお勧めします。