简体   繁体   中英

How to create a Sass mixin for this CSS radial gradient?

I am using the Ultimate CSS Gradient Generator to create a radial gradient, and it provided the Sass includes, however having trouble completing the background-image mixin

The CSS

background: rgb(220,156,118);
background: -moz-radial-gradient(center, ellipse cover,  rgba(220,156,118,1) 0%, rgba(220,156,118,1) 49%, rgba(214,101,90,1) 92%, rgba(214,101,90,1) 100%);
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(220,156,118,1)), color-stop(49%,rgba(220,156,118,1)), color-stop(92%,rgba(214,101,90,1)), color-stop(100%,rgba(214,101,90,1)));
background: -webkit-radial-gradient(center, ellipse cover,  rgba(220,156,118,1) 0%,rgba(220,156,118,1) 49%,rgba(214,101,90,1) 92%,rgba(214,101,90,1) 100%);
background: -o-radial-gradient(center, ellipse cover,  rgba(220,156,118,1) 0%,rgba(220,156,118,1) 49%,rgba(214,101,90,1) 92%,rgba(214,101,90,1) 100%);
background: -ms-radial-gradient(center, ellipse cover,  rgba(220,156,118,1) 0%,rgba(220,156,118,1) 49%,rgba(214,101,90,1) 92%,rgba(214,101,90,1) 100%);
background: radial-gradient(ellipse at center,  rgba(220,156,118,1) 0%,rgba(220,156,118,1) 49%,rgba(214,101,90,1) 92%,rgba(214,101,90,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dc9c76', endColorstr='#d6655a',GradientType=1 );

Here is the Sass mixin @includes

background-color: rgb(220,156,118);
@include filter-gradient(#dc9c76, #d6655a, horizontal);
@include background-image(radial-gradient(center, ellipse cover,  rgba(220,156,118,1)     0%,rgba(220,156,118,1) 49%,rgba(214,101,90,1) 92%,rgba(214,101,90,1) 100%));

I was able to create the mixin for the filter-gradient

@mixin filter-gradient($color1, $color2, $direction){
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$color1', endColorstr='$color2',GradientType=$direction);}

However kinda stuck on creating the mixin for the Radial gradient because of the color-stops

@mixin background-image($gradient($position, $type,  $rgba1, $rgba2, $rgba3, $rgba4){
    background: rgb(220,156,118);
    background: -moz-$gradient(center, $type, $rgba1, $rgba2, $rgba3, $rgba4);
    background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(220,156,118,1)), color-stop(49%,rgba(220,156,118,1)), color-stop(92%,rgba(214,101,90,1)), color-stop(100%,rgba(214,101,90,1)));
    background: -webkit-$gradient(center, $type, $rgba1, $rgba2, $rgba3, $rgba4);
    background: -o-$gradient(center, $type, $rgba1, $rgba2, $rgba3, $rgba4);
    background: -ms-$gradient(center, $type, $rgba1, $rgba2, $rgba3, $rgba4);
    background: $gradient(ellipse at center, $rgba1, $rgba2, $rgba3, $rgba4);
};

How would you write those in?

you should give a try to Compass which is a great set of usefull mixins (like gradient) applying best practices for cross browser behavior.

radial-gradient($color-stops, $center-position, $image)

Because of webkit's limitations, the radial gradient mixin works best if you use pixel-based color stops.

Examples:

// Defaults to a centered, 100px radius gradient
+radial-gradient(color-stops(#c00, #00c))

// 100px radius gradient in the top left corner
+radial-gradient(color-stops(#c00, #00c), top left)

// Three colors, ending at 50px and passing thru #fff at 25px
+radial-gradient(color-stops(#c00, #fff, #00c 50px))

// A background image on top of a 100px radius gradient; requires an image
// with an alpha-layer.
+radial-gradient(color_stops(#c00, #fff), top left, image-url("noise.png")))

Browsers Supported:

  • Chrome
  • Safari
  • Firefox 3.6 Opera

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM