Heim > Web-Frontend > CSS-Tutorial > ## Können Sie einen Kreis nur mit CSS in Segmente zerlegen?

## Können Sie einen Kreis nur mit CSS in Segmente zerlegen?

Barbara Streisand
Freigeben: 2024-10-25 02:25:02
Original
738 Leute haben es durchsucht

## Can You Slice a Circle into Segments Using Only CSS?

Segmente in einem Kreis mit CSS: Eine Erkundung der Techniken

Das Erstellen eines Kreises in CSS mithilfe der Eigenschaft „Randradius“ ist eine bekannte Methode Technik. Ist es jedoch möglich, den Kreis wie im bereitgestellten Bild dargestellt zu segmentieren? Es stellt sich die Frage, ob dies ohne den Einsatz von JavaScript und ausschließlich durch HTML und CSS erreicht werden kann.

Lösung für 2024

Um in dieses Problem einzutauchen, werden wir es kategorisieren verschiedene Szenarien:

  • Gleiche Slices, ohne Elemente zu sein
  • Ungleiche Slices, ohne Elemente zu sein
  • Gleiche Slices, die Inhalt oder Animation erfordern
  • Ungleiche Slices, die erfordern Inhalt oder Animation

Gleiche Scheiben, ohne Elemente zu sein

Mithilfe einer Farbpalette kann SCSS eine Stoppliste für die Erstellung eines conic-gradient() erstellen gleichmäßige Scheiben. Betrachten Sie zum Beispiel die folgende Palette:

$c: #f94144, #f3722c, #f8961e, #f9c74f, #90be6d, #43aa8b, #577590;
Nach dem Login kopieren

Wir definieren eine SCSS-Funktion, um gleichmäßig beabstandete Slices zu generieren:

@function stops($c) {
    $n: length($c); // number of slices
    $p: 100%/$n; // slice angle as a % of circle
    $l: (); // list of stops, initially empty
    
    @for $i from 1 through $n {
        $l: $l, nth($c, $i) 0% $i*$p
    }
    
    @return $l
}
Nach dem Login kopieren

Dieser Ansatz generiert die folgende Liste von Stopps:

#f94144 0% 14.2857142857%, #f3722c 0% 28.5714285714%,
#f8961e 0% 42.8571428571%, #f9c74f 0% 57.1428571429%,
#90be6d 0% 71.4285714286%, #43aa8b 0% 85.7142857143%,
#577590 0% 100%
Nach dem Login kopieren

Diese Ausgabe enthält jedoch unnötige Dezimalstellen und explizite Standardstopps. Daher ist eine verbesserte Funktion:

@function stops($c) {
    $n: length($c); // number of slices
    $p: 100%/$n; // slice angle as a % of circle
    $l: (); // list of stops, initially empty
    
    @for $i from 1 through $n {
        $l: $l, nth($c, $i)
            if($i > 1, 0%, unquote(''))
            if($i < $n, round($i*$p), unquote(''))
    }
    
    @return $l
}
Nach dem Login kopieren

Das Ergebnis ist wie folgt:

#f94144 14%, #f3722c 0% 29%, #f8961e 0% 43%, #f9c74f 0% 57%,
#90be6d 0% 71%, #43aa8b 0% 86%, #577590 0%
Nach dem Login kopieren

Diese Funktion generiert intuitivere Stopps.

Um dies in einem Kegelschnitt zu nutzen -gradient() definieren wir die folgende Klasse:

.pie {
    width: 20em; /* set width to desired pie diameter */
    aspect-ratio: 1; /* make the element square */
    border-radius: 50%; /* turn square into disc */
    /* equally-sized slices */
    background: conic-gradient(stops($c))
}
Nach dem Login kopieren

Mit nur vier CSS-Deklarationen können wir einen Kreis erstellen, der in gleiche Scheiben segmentiert ist. Um die Slices zu drehen, geben wir einfach einen anderen Startwinkel für den conic-gradient() an.

background: conic-gradient(from 17deg, stops($c))
Nach dem Login kopieren

Live-Demo:

<code class="html"><div class="pie"></div>
Nach dem Login kopieren
<code class="css">.pie {
  width: 16em; /* set width to desired pie diameter */
  aspect-ratio: 1; /* make pie element square */
  border-radius: 50%; /* turn square into disc */
  /* equally sized slices */
  background: 
    conic-gradient(from 17deg, #f94144 14%, #f3722c 0% 29%, #f8961e 0% 43%, 
        #f9c74f 0% 57%, #90be6d 0% 71%, #43aa8b 0% 86%, #577590 0%)
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt von## Können Sie einen Kreis nur mit CSS in Segmente zerlegen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage