2017-04-04 54 views
5

Stworzyłem gradient, który ma 11 twardych przystanków, tworząc iluzję 11 oddzielnych pól.Jak utworzyć twarde tło w SASS/SCSS?

enter image description here

Jak to stoi teraz, istnieje% szerokości zakodowane w gradientu liniowego. Nie mogę pomóc, ale myślę, że jest o wiele bardziej wydajny sposób niż kodowanie to jako takie (poprzez SCSS):

.color-bar { 
 
     background: linear-gradient(to left, 
 
     rgba(0, 0, 0, 0) 0%, 
 
     rgba(0, 0, 0, 0) 9.09%, 
 
     rgba(0, 0, 0, .1) 9.09%, 
 
     rgba(0, 0, 0, .1) 18.18%, 
 
     rgba(0, 0, 0, .2) 18.18%, 
 
     rgba(0, 0, 0, .2) 27.27%, 
 
     rgba(0, 0, 0, .3) 27.27%, 
 
     rgba(0, 0, 0, .3) 36.36%, 
 
     rgba(0, 0, 0, .4) 36.36%, 
 
     rgba(0, 0, 0, .4) 45.45%, 
 
     rgba(0, 0, 0, .5) 45.45%, 
 
     rgba(0, 0, 0, .5) 54.54%, 
 
     rgba(0, 0, 0, .6) 54.54%, 
 
     rgba(0, 0, 0, .6) 63.63%, 
 
     rgba(0, 0, 0, .7) 63.63%, 
 
     rgba(0, 0, 0, .7) 72.72%, 
 
     rgba(0, 0, 0, .8) 72.72%, 
 
     rgba(0, 0, 0, .8) 81.81%, 
 
     rgba(0, 0, 0, .9) 81.81%, 
 
     rgba(0, 0, 0, 1) 90.09%, 
 
     rgba(0, 0, 0, 1) 100%); 
 
     height: 50px; 
 
     width: 550px; 
 
}
<div class="color-bar"></div>

Here's a rough Codepen in action.

Dzięki za wejście możesz zapewniać.

+0

To znaczy, jeśli uzyskałeś pożądany rezultat, nie widzę, o co chodzi. To nie jest piękne - jasne, ale kogo to obchodzi? To jest całkowicie poprawny kod. – Chris

+0

@Chris Przypuszczam, że jeśli OP poprosi o metodę SCSS, należy utworzyć funkcję, którą można ponownie wykorzystać, być może tam, gdzie można po prostu zmienić liczbę, aby ustawić liczbę kroków na gradiencie zamiast wykonywać własne obliczenia za każdym razem, – DaniP

+0

@ DaniP, tak, miałoby to sens z punktu widzenia przydatności do ponownego użycia, jeśli to jest pytanie. Jeśli jednak nie, osobiście nie widzę sensu zmiany niczego, ponieważ i tak otrzymujesz css w końcu. – Chris

Odpowiedz

3

Zajęło mi trochę fiddling, ale tutaj jest:

@function hard-stops($direction, $from, $to, $steps) { 
    $output: unquote("linear-gradient(") + $direction; 
    @for $i from 0 through $steps { 
    $output: $output + ', ' 
        + mix($from, $to, $i/$steps) + ' ' 
        + percentage($i/($steps+1)) + ', ' 
        + mix($from, $to, $i/$steps) + ' ' 
        + percentage(($i+1)/($steps+1)); 
    } 
    $output: $output + ')'; 

    @return $output; 
} 
.color-bar { 
    height: 50px; 
    width: 550px; 
    background: hard-stops(to left, rgba(0,0,0,1), rgba(0,0,0,0), 10); 
} 

jsFiddle.

Ograniczeniem jest: trzeba przejść mieszalne kolory (black, na przykład, nie jest, nie mam pojęcia dlaczego - nie jestem ekspertem w sass).

+0

Wow, bardzo fajny sposób podejścia do niego. Nie zastanawiałem się nad mieszaniem kolorów. [Oto moja trudna próba] (http://codepen.io/jwindeknecht/pen/XMGwNb), która używa innych kolorów. –

+1

@JoeW, Cóż, nie miało sensu, nawet jeśli twój przykład używa tylko jednego koloru. W końcu mieszanie kolorów jest jednym z głównych powodów, dla których ludzie używają 'sass'. To i może zagnieżdżanie selektorów i zapytań 'media '. Gratulacje z pierwszego pytania, Btw, rzadko ludzie zaczynają od tak dobrego/dobrze przyjętego pytania. Witaj w [so] & happy coding! ::} <(((*>: :) –