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

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 02:25:02667Durchsuche

## 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;

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
}

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%

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
}

Das Ergebnis ist wie folgt:

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

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))
}

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))

Live-Demo:

<code class="html"><div class="pie"></div>
<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>

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!

Stellungnahme:
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