Comment ce CSS produit-il un cercle?


206

Voici le CSS:

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

Comment produit-il le cercle ci-dessous?

Entrez la description de l'image ici

Supposons que si une largeur de rectangle est de 180 pixels et une hauteur de 180 pixels, elle apparaîtra ainsi:

Entrez la description de l'image ici

Après avoir appliqué un rayon de bordure de 30 pixels, cela ressemblerait à ceci:

Entrez la description de l'image ici

Le rectangle devient plus petit, c'est-à-dire qu'il va presque disparaître si la taille du rayon augmente.

Alors, comment une bordure de 180 pixels height/width-> 0pxdevient-elle un cercle avec un rayon de 180 pixels?


14
C'est un objet 0x0 avec une bordure de 180 pixels autour qui a des coins arrondis. Les coins arrondis sont donc des quadrants d'un cercle.
Kaz

j'ai une question idiote dans mon esprit pourquoi tu veux faire circleavec la frontière ??? nous pouvons facilement faire circleavec widthet heightpourquoi nous le faisonsborder
The Mechanic

7
Pour info, pour la création de cercles, utilisez <code> border-radius: 50% </code> - il est plus facile d'ajuster uniquement la largeur / hauteur lors de la bonne mise en page.
David Gilbertson

Oui mesdames, c'est un calcul
Medet Tleukabiluly

Réponses:


372

Comment une bordure de 180 pixels avec une hauteur / largeur-> 0px devient-elle un cercle avec un rayon de 180 pixels?

Reformulons cela en deux questions:

widthpuis- je heightpostuler?

Jetons un coup d'œil aux zones d'une boîte typique ( source ):

W3C: zones d'une boîte type

Le heightet widths'appliquent uniquement au contenu, si le modèle de boîte correct est utilisé (pas de mode excentrique, pas d'ancien Internet Explorer).

border-radiuss'applique?

Le border-radiuss'applique sur la bordure. S'il n'y a ni remplissage ni bordure, cela affectera directement votre bord de contenu, ce qui donne votre troisième exemple.

Qu'est-ce que cela signifie pour notre rayon / cercle frontière?

Cela signifie que vos règles CSS aboutissent à une boîte qui se compose uniquement d'une bordure. Vos règles stipulent que cette bordure doit avoir une largeur maximale de 180 pixels de chaque côté, tandis que d'un autre côté, elle doit avoir un rayon maximum de la même taille:

Exemple d'image

Dans l'image, le contenu réel de votre élément (le petit point noir) est vraiment inexistant. Si vous n'en appliquiez pas, border-radiusvous vous retrouveriez avec la boîte verte. Le border-radiusvous donne le cercle bleu.

Il est plus facile à comprendre si vous appliquez le border-radius seul aux deux coins :

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

Bordure appliquée uniquement aux deux coins

Étant donné que dans votre exemple, la taille et le rayon de tous les coins / bordures sont égaux, vous obtenez un cercle.

Autres ressources

Références

Démonstrations

  • Veuillez ouvrir la démo ci-dessous, qui montre comment la border-radiusaffecte la bordure (pensez à la boîte bleue intérieure comme boîte de contenu, la bordure noire intérieure comme bordure de rembourrage, l'espace vide comme rembourrage et la bordure rouge géante comme, eh bien, frontière). Les intersections entre la boîte intérieure et la bordure rouge affectent généralement le bord du contenu.


Je ne pense pas que css3-background fasse référence à css3-box (css3-box est en attente de réécriture).
BoltClock

@BoltClock: Je pensais que css3-box définirait les bords . Il n'y a qu'une référence à css2.1-box dans l'introduction (non normative), et l'image donnée est également là, donc css3-box n'est pas vraiment nécessaire de comprendre border-radius(quels changements sont à prévoir dans la réécriture de css3- boîte?).
Zeta

@Zeta j'ai une question stupide dans mon esprit pourquoi vous voulez faire circleavec la frontière ??? nous pouvons facilement faire circleavec widthet heightpourquoi nous le faisonsborder
The Mechanic

1
@Sarfaraz: Jetez un œil à la question du PO: "Alors, comment une bordure de 180px height/width-> 0pxdevient-elle un cercle avec un rayon de 180px?" . J'ai simplement répondu à la question. Il existe d'autres façons de créer un cercle, mais OP ne s'intéressait qu'au fonctionnement de cette méthode spécifique.
Zeta

@Zeta: Je ne sais pas exactement ce qui sera changé, mais étant donné que WD n'a pas été mis à jour depuis 6 ans, je pense que beaucoup le seront. Je sais que la section 11 ( overflowfamille de propriétés) vit maintenant dans son propre module, css-overflow-3, mais cela n'a pas encore été reflété dans l'ED. Vous verrez beaucoup de problèmes dans l'ED, mais j'imagine que ce n'est pas une liste exhaustive: dev.w3.org/csswg/css3-box
BoltClock

94

Démo

Examinons la question d'une autre manière avec cette démonstration d'image:

Voyons d'abord comment le rayon de bordure est produit?

Pour produire un rayon, il prend deux côtés de sa bordure. Si vous définissez border-radius à 50 pixels, cela prendrait 25 pixels d'un côté et 25 pixels d'un autre côté.

Entrez la description de l'image ici

Et en prenant 25 pixels de chaque côté, cela produirait comme ceci:

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

Entrez la description de l'image ici

Maintenant, voyez combien cela peut prendre un maximum de carré pour appliquer sur un coin?

Il peut prendre jusqu'à 180 pixels du haut et 180 pixels de la droite. Ensuite, cela produirait comme ceci:

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

Entrez la description de l'image ici

Et voyez comment cela produit-il si nous définissons une valeur de rayon non égale?

Supposons que si vous appliquez le rayon de bordure uniquement aux deux coins de manière inégale:

  • coin supérieur droit à 180 pixels

  • coin inférieur droit à 100 pixels

Ensuite, il faudrait

  • en haut à droite: 90 pixels en haut et 90 pixels en partant de la droite

  • en bas à droite: 50 pixels à partir de la droite et 50 pixels à partir du bas

Ensuite, cela produirait comme ça

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

Entrez la description de l'image ici

Combien maximum de sa bordure peut-il prendre de carré à appliquer sur tous les côtés? Et voyez comment cela produit un cercle?

Cela peut prendre jusqu'à la moitié de la taille de la bordure, c'est-à-dire 180 pixels / 2 = 90 pixels. Ensuite, cela produirait un cercle comme celui-ci

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

Entrez la description de l'image ici

Pourquoi faut-il seulement la moitié du carré pour appliquer sur tous les côtés?

Parce que tous les coins doivent définir leur valeur de rayon également.

Prenant des parties égales de sa bordure, il produit un cercle.


7
En fait, la version actuelle de cette réponse va un peu loin. La question est simplement "comment ce CSS crée-t-il un cercle", pas "comment fonctionne border-radius en général", donc bien que techniquement correct c'est un peu trop. Vous pouvez également reformater la question et mettre du code réel dans des environnements de code.
Zeta

3

Les bordures sont la boîte extérieure de tout contenu et si vous lui appliquez un rayon, cela produira simplement le bord circulaire.


3

Je pense qu'il crée initialement un rectangle avec height and width = 180pxpuis fait une courbe avec un rayon donné comme 30pxavec chaque coin. Donc, ça part borderavec donné radius.


1

Les deux .aet .bdonneront la sortie identique.

Q. Pourquoi ai-je utilisé width: 360px; height: 360px;?

A. border: 180px solid red;dans des .aœuvres comme border-width: 180px 180px 180px 180px; /* Top Right Bottom Left */.

J'espère que ce violon vous aidera à comprendre le concept.

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

9
Hein? "Comment fonctionne .a?" "Voici une comparaison entre .a et .b" Je ne sais pas trop ce que vous essayez de dire ici.
BoltClock
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.