このCSSはどのようにして円を生成しますか?


206

これはCSSです:

div {
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}

下の円はどのように生成されますか?

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

長方形の幅が180ピクセルで高さが180ピクセルの場合、次のように表示されます。

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

ボーダー半径30ピクセルを適用すると、次のようになります。

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

長方形は小さくなり、半径のサイズが大きくなるとほとんど見えなくなります。

では、180ピクセルの境界線はどのようにしheight/width-> 0pxて半径180ピクセルの円になるのでしょうか。


14
これは、180ピクセルの境界線を持つ0x0オブジェクトです その周囲の丸い角を有しています。したがって、丸みを帯びた角は円の四分円です。
Kaz

私はなぜあなたcircleが国境で作りたいのかと私の頭の中で愚かな質問をしていますか??? 我々は簡単に作ることができるcirclewidthし、height私たちはしてない理由border
メカニック

7
参考までに、円を作成するには、<code> border-radius:50%</ code>を使用します-レイアウトを正しくするときに、幅/高さだけを調整するのが簡単になります。
David Gilbertson 2013

はい、女性、それは数学です
Medet Tleukabiluly

回答:


372

高さ/幅-> 0pxの180ピクセルの境界線は、どのようにして半径180ピクセルの円になりますか?

それを2つの質問に再構成しましょう:

どこwidthheight実際に適用されますか?

典型的なボックス(ソース)の領域を見てみましょう:

W3C:典型的なボックスの領域

heightそしてwidth正しいボックスモデルは(何のQuirksモード、無古いInternet Explorerなど)で使用されていない場合は、コンテンツのみに適用されます。

どこにborder-radius適用されますか?

border-radiusボーダーエッジに適用されます。パディングもボーダーもない場合、コンテンツエッジに直接影響し、3番目の例になります。

これは、境界半径/円に対して何を意味しますか?

これは、CSSルールの結果、境界線のみで構成されるボックスになることを意味します。ルールでは、このボーダーの各辺の最大幅は180ピクセルである必要がありますが、一方で、同じサイズの最大半径が必要です。

画像の例

画像では、要素の実際のコンテンツ(小さな黒い点)は実際には存在しません。適用しなかった場合border-radius場合は、緑色のボックスになります。border-radiusあなたに青い円を与えます。

border-radius 2つのコーナーのみに適用すると、理解が容易になります。

#silly-circle{
    width:0; height:0;
    border: 180px solid red;
    border-top-left-radius: 180px;
    border-top-right-radius: 180px;
}

ボーダーは2つのコーナーにのみ適用されます

あなたの例ではすべてのコーナー/ボーダーのサイズと半径が等しいので、あなたは円を取得します。

その他のリソース

参考文献

デモ

  • 下のデモを開いてください。これはborder-radius境界がどのように影響するかを示しています(内側の青いボックスをコンテンツボックス、内側の黒い境界をパディング境界、空のスペースをパディング、巨大な赤い境界を境界)。内側のボックスと赤い境界線の交差部分は、通常、コンテンツの端に影響します。


css3-backgroundがcss3-boxへの参照を作成するとは思いません(css3-boxは書き換えが保留中です)。
BoltClock

@BoltClock:css3-boxがエッジを定義すると思いました。はじめに(非規範的)css2.1-boxへの参照のみがあり、指定された画像もそこにあるので、css3-boxは実際に理解する必要はありませんborder-radius(css3-の書き換えでどのような変更が期待できるか)ボックス?)。
ゼータ

@ゼータ私はなぜあなたcircleが国境で作りたいのか私の頭の中で愚かな質問をしていますか??? 我々は簡単に作ることができるcirclewidthし、height私たちはしてない理由border
メカニック

1
@Sarfaraz:OPの質問を見てください。「では、180pxのボーダーはどうやってheight/width-> 0px半径180pxの円になりますか?」。私は単に質問に答えました。サークルを作成する方法は他にもありますが、OPはこの特定の方法がどのように機能するかについてのみ興味を持っていました。
ゼータ

@ゼータ:正確には何が変更されるのかはわかりませんが、そのWDが6年間更新されていないことを考えると、その多くは変更されると思います。セクション11(overflowプロパティのファミリー)が独自のモジュールcss-overflow-3 に含まれていることは知っていますが、まだEDには反映されていません。EDには多くの問題が表示されますが、完全なリストではないようです。dev.w3.org
csswg

94

デモ

この画像デモで別の方法で質問を調べてみましょう:

最初に境界線の半径がどのように生成されるかを見てみましょう。

半径を生成するには、境界の両側を使用します。border-radiusを50ピクセルに設定すると、片側から25ピクセル、反対側から25ピクセルを使用します。

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

そして、両側から25ピクセルを取得すると、次のようになります。

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 50px 0 0;
}

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

今度は、1つのコーナーに適用するのに最大の正方形がどれだけかかるかを見てください。

上から180ピクセル、右から180ピクセルまで使用できます。その後、次のように生成されます。

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 0 0;
}

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

そして、半径の等しくない値を設定した場合、これがどのように生成されるかを参照してください。

境界線の半径を2つのコーナーのみに不均等に適用するとします。

  • 右上隅から180ピクセル

  • 右下隅から100ピクセル

その後、それはかかります

  • 右上:上から90ピクセル、右から90ピクセル

  • 右下:右から50ピクセル、下から50ピクセル

次に、このように生成されます

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 100px 0;
}

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

すべての辺に適用するために、その境界の最大値はどれくらいの正方形を取ることができますか?そして、それがどのようにして円を生成するのかを見てください。

境界線サイズの最大半分、つまり180ピクセル/ 2 = 90ピクセルを使用できます。次に、このような円が生成されます

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 180px;
}

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

四角形の半分だけを四方に適用するのはなぜですか?

すべてのコーナーが半径値を等しく設定する必要があるためです。

ボーダーの同じ部分を取り、それは円を生成します。


7
実際、この回答の現在のバージョンでは少し遠くまで進んでいます。問題は単に「このCSSが円を作成する方法」であり、「一般に境界線の半径がどのように機能するか」ではないため、技術的には正確ですが、少しだけ多くのことです。また、質問を再フォーマットして、実際のコードをコード環境に配置することもできます。
ゼータ

3

ボーダーはコンテンツの外箱であり、それに半径を適用すると、単に円形のエッジが生成されます。


3

私はそれが最初に長方形を作成し、各コーナーのheight and width = 180pxように特定の半径で曲線を作成すると思います30px。したがってborder、指定されたで設定されradiusます。


1

両方.a.b同一の出力が得られます。

Q.なぜ使用したのですか width: 360px; height: 360px;ですか?

A. border: 180px solid red;.aのような作品border-width: 180px 180px 180px 180px; /* Top Right Bottom Left */

このフィドルが概念の理解に役立つことを願っています。

.a{
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}
.b{
    background:red;
    width: 360px;
    height: 360px;
    border-radius: 180px;
}

9
え?「.aはどのように機能しますか?」「.aと.bの比較を示します」ここで何を言っているのかわかりません。
BoltClock
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.