Wie erzeugt dieses CSS einen Kreis?


206

Dies ist das CSS:

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

Wie entsteht der Kreis darunter?

Geben Sie hier die Bildbeschreibung ein

Angenommen, eine Rechteckbreite von 180 Pixel und eine Höhe von 180 Pixel sieht folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Nach dem Anwenden des Randradius von 30 Pixel sieht es folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Das Rechteck wird kleiner, das heißt, es verschwindet fast, wenn der Radius größer wird.

Wie wird aus einem Rand von 180 Pixel height/width-> 0pxein Kreis mit einem Radius von 180 Pixel?


14
Es ist ein 0x0-Objekt mit einem 180-Pixel-Rand und abgerundeten Ecken. Die abgerundeten Ecken sind also Quadranten eines Kreises.
Kaz

Ich habe eine dumme Frage im Kopf, warum du circlemit Grenze machen willst ??? können wir leicht machen circlemit widthund heightso , warum wir tun mitborder
The Mechanic

7
Zu Ihrer Information, verwenden Sie für die Kreiserstellung den <code> Rahmenradius: 50% </ code> - erleichtert das Anpassen nur der Breite / Höhe, wenn Sie Ihr Layout richtig gestalten.
David Gilbertson

Ja
meine

Antworten:


371

Wie wird aus einem Rand von 180 Pixel mit Höhe / Breite-> 0 Pixel ein Kreis mit einem Radius von 180 Pixel?

Lassen Sie uns das in zwei Fragen umformulieren:

Wo widthund heighttatsächlich bewerben?

Werfen wir einen Blick auf die Bereiche einer typischen Box ( Quelle ):

W3C: Bereiche einer typischen Box

Die heightund widthgelten nur für Inhalte, wenn das richtige Box-Modell verwendet wird (kein Mackenmodus, kein alter Internet Explorer).

Wo border-radiusgilt?

Das border-radiusgilt am Rand. Wenn weder Polster noch Rahmen vorhanden sind, wirkt sich dies direkt auf Ihre Inhaltskante aus, was zu Ihrem dritten Beispiel führt.

Was bedeutet das für unseren Randradius / Kreis?

Dies bedeutet, dass Ihre CSS-Regeln zu einem Feld führen, das nur aus einem Rahmen besteht. Ihre Regeln besagen, dass dieser Rand auf jeder Seite eine maximale Breite von 180 Pixel haben sollte, während er andererseits einen maximalen Radius derselben Größe haben sollte:

Beispielbild

Auf dem Bild ist der tatsächliche Inhalt Ihres Elements (der kleine schwarze Punkt) wirklich nicht vorhanden. Wenn Sie keine anwenden, erhalten border-radiusSie das grüne Kästchen. Das border-radiusgibt dir den blauen Kreis.

Es wird einfacher zu verstehen, wenn Sie border-radius nur zwei Ecken anwenden :

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

Rand nur an zwei Ecken angewendet

Da in Ihrem Beispiel Größe und Radius für alle Ecken / Ränder gleich sind, erhalten Sie einen Kreis.

Weitere Ressourcen

Verweise

Demonstrationen

  • Bitte öffnen Sie die Demo unten, die zeigt, wie sich dies border-radiusauf den Rand auswirkt (stellen Sie sich das innere blaue Feld als Inhaltsfeld, den inneren schwarzen Rand als Polsterrand, den leeren Raum als Polster und den riesigen roten Rand als, gut, vor. Rand). Schnittpunkte zwischen dem inneren Feld und dem roten Rand wirken sich normalerweise auf die Inhaltskante aus.


Ich glaube nicht, dass css3-background Verweise auf css3-box enthält (css3-box wartet auf eine Neufassung).
BoltClock

@ BoltClock: Ich dachte, dass CSS3-Box die Kanten definieren würde . In der Einleitung gibt es nur einen Verweis auf css2.1-box (nicht normativ), und das angegebene Bild ist auch vorhanden, sodass css3-box nicht wirklich benötigt wird, um zu verstehen border-radius(welche Änderungen beim Umschreiben von css3- zu erwarten sind). Box?).
Zeta

@ Zeta Ich habe eine dumme Frage im Kopf, warum du circlemit Grenze machen willst ??? können wir leicht machen circlemit widthund heightso , warum wir tun mitborder
The Mechanic

1
@Sarfaraz: Sehen Sie sich die Frage des OP an: "Wie wird aus einem Rand von 180px height/width-> 0pxein Kreis mit einem Radius von 180px?" . Ich habe die Frage einfach beantwortet. Es gibt andere Möglichkeiten, einen Kreis zu erstellen, aber OP war nur daran interessiert, wie diese spezielle Methode funktioniert.
Zeta

@Zeta: Ich bin nicht sicher, was genau geändert wird, aber da WD seit 6 Jahren nicht mehr aktualisiert wurde, vermute ich, dass es eine Menge sein wird. Ich weiß, dass Abschnitt 11 ( overflowFamilie von Eigenschaften) jetzt in einem eigenen Modul, css-overflow-3, lebt, aber das hat sich noch nicht in der ED niedergeschlagen. Sie werden viele Probleme in der ED sehen, aber ich kann mir vorstellen, dass es keine vollständige Liste ist: dev.w3.org/csswg/css3-box
BoltClock

94

Demo

Lassen Sie uns die Frage mit dieser Bilddemonstration auf andere Weise untersuchen:

Mal sehen, wie der Randradius erzeugt wird.

Um einen Radius zu erzeugen, werden zwei Seiten des Randes benötigt. Wenn Sie den Rahmenradius auf 50 Pixel einstellen, werden 25 Pixel von einer Seite und 25 Pixel von einer anderen Seite benötigt.

Geben Sie hier die Bildbeschreibung ein

Und wenn man 25 Pixel von jeder Seite nimmt, würde das so aussehen:

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

Geben Sie hier die Bildbeschreibung ein

Nun sehen Sie, wie viel Quadrat maximal für die Anwendung an einer Ecke erforderlich ist.

Es kann bis zu 180 Pixel von oben und 180 Pixel von rechts dauern. Dann würde es so produzieren:

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

Geben Sie hier die Bildbeschreibung ein

Und sehen Sie, wie es erzeugt, wenn wir den ungleichen Wert des Radius einstellen?

Angenommen, Sie wenden den Randradius nur ungleichmäßig auf zwei Ecken an:

  • obere rechte Ecke auf 180 Pixel

  • rechts unten auf 100 Pixel

Dann würde es dauern

  • oben rechts: 90 Pixel von oben und 90 Pixel von rechts

  • unten rechts: 50 Pixel von rechts und 50 Pixel von unten

Dann würde es so produzieren

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

Geben Sie hier die Bildbeschreibung ein

Wie viel Maximum seiner Grenze kann es von Quadrat nehmen, um auf allen Seiten aufzutragen? Und sehen Sie, wie es einen Kreis erzeugt?

Es kann bis zur Hälfte der Randgröße dauern, dh 180 Pixel / 2 = 90 Pixel. Dann würde es einen Kreis wie diesen erzeugen

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

Geben Sie hier die Bildbeschreibung ein

Warum dauert es nur die Hälfte des Quadrats, um auf allen Seiten aufzutragen?

Weil alle Ecken ihren Radiuswert gleich einstellen müssen.

Er nimmt gleiche Teile seines Randes und erzeugt einen Kreis.


7
Tatsächlich geht die aktuelle Version dieser Antwort etwas zu weit. Die Frage ist einfach "Wie erstellt dieses CSS einen Kreis?" Und nicht "Wie funktioniert der Randradius im Allgemeinen?". Technisch gesehen ist es also ein bisschen zu viel. Sie können die Frage auch neu formatieren und den tatsächlichen Code in Codeumgebungen einfügen.
Zeta

3

Rahmen sind das äußere Feld eines Inhalts. Wenn Sie einen Radius darauf anwenden, wird einfach die kreisförmige Kante erzeugt.


3

Ich denke, dass es zunächst ein Rechteck mit height and width = 180pxund dann eine Kurve mit einem bestimmten Radius wie 30pxbei jeder Ecke erstellt. Also setzt es bordermit gegeben radius.


1

Beide .aund .bgeben die identische Ausgabe.

Q. Warum habe ich verwendet width: 360px; height: 360px;?

A. border: 180px solid red;in .aArbeiten wie border-width: 180px 180px 180px 180px; /* Top Right Bottom Left */.

Ich hoffe, diese Geige hilft Ihnen, das Konzept zu verstehen.

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

9
Huh? "Wie funktioniert .a?" "Hier ist ein Vergleich zwischen .a und .b" Ich bin mir nicht sicher, was Sie hier sagen wollen.
BoltClock
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.