Skip to content

Instantly share code, notes, and snippets.

@KittyGiraudel
Created May 23, 2014 13:00
Show Gist options
  • Save KittyGiraudel/30e6b914c715cb4f6127 to your computer and use it in GitHub Desktop.
Save KittyGiraudel/30e6b914c715cb4f6127 to your computer and use it in GitHub Desktop.
Generated by SassMeister.com.
<div class="rating rating-1">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-1">
<i class="star-1">★</i>
<i class="star-2 is-half">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-2">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-2">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3 is-half">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-3">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-3">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4 is-half">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-4">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-4">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5 is-half">★</i>
</div>
<div class="rating rating-5">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
// ----
// Sass (v3.3.7)
// Compass (v1.0.0.alpha.18)
// ----
// Coming back at:
// http://hugogiraudel.com/2014/05/05/bringing-configuration-objects-to-sass/
// With as example:
// http://hugogiraudel.com/2014/02/24/star-rating-system-with-sass/
// Especially this version by Mehdi Kabab:
// http://codepen.io/piouPiouM/pen/beBcJ
// ---
// The main idea is to have a mixin that dumps the content of the module
// This module is configurable through the `$options` map passed to the mixin
// ---
// Module declaration
// ---
// @param [map] $options (()): map of options for the module
// ---
@mixin rating-system(
$module: "rating",
$max-stars: 5,
$star-size: 1.5em,
$default-color: #eee,
$colors: #cc8b1f #dcb228 #f0991e #f26a2c #dd050b
) {
// ---
// {CONFIGURATION}
// ---
// Defining a couple of variables
// to avoid having to fetch same values
// multiple times.
$base-selector: #{'.' + $module};
$base-placeholder: #{'%' + $module};
// ---
// {END CONFIGURATION}
// ---
// ---
// {ERROR HANDLING}
// ---
// Checking for parameter validity
$everything-okay: true;
@if length($colors) != $max-stars {
@warn "`colors` should be as long as `max-stars`.";
$everything-okay: false;
}
// ... other parameter validations
// ---
// {END ERROR HANDLING}
// ---
// ---
// {STYLE DUMPING}
// ---
// If parameters are okay to proceed
@if $everything-okay == true {
// Dumping CSS
#{$base-selector} {
margin-bottom: .5em;
i {
// Structure
display: inline-block;
width: 0;
height: $star-size;
// Colors & styles
border-width: 0 ($star-size / 2);
border-style: solid;
border-color: $default-color;
background: $default-color;
border-radius: .25em;
// Text related properties
color: white;
font-style: normal;
line-height: $star-size + 0.1em;
text-indent: -0.5em;
text-shadow: 1px 0 1px hsl(0, 0%, 70%);
}
@media print {
-webkit-print-color-adjust: exact;
}
}
@for $i from 1 through $max-stars {
// Placeholder
#{$base-placeholder + "-" + $i} {
$color: nth($colors, $i);
border-color : $color;
background : $color;
}
@for $j from 1 through $i {
#{$base-selector + "-" + $i} .star-#{$j} {
@extend #{$base-placeholder + "-" + $i};
}
}
@if 5 > $i {
#{$base-selector + "-" + $i} .is-half {
@extend #{$base-placeholder + "-" + $i};
@extend #{$base-placeholder + "-half"};
}
}
}
// Placeholder
#{$base-placeholder + "-half"} {
border-right-color: $default-color;
}
}
// ---
// {END STYLE DUMPING}
// ---
}
// ---
// {MODULE INSTANCIATION}
// ---
// _rating.scss
@include rating-system((
star-size: 2em
)...);
// ---
// {END MODULE INSTANCIATION}
// ---
.rating {
margin-bottom: .5em;
}
.rating i {
display: inline-block;
width: 0;
height: 2em;
border-width: 0 1em;
border-style: solid;
border-color: #eeeeee;
background: #eeeeee;
border-radius: .25em;
color: white;
font-style: normal;
line-height: 2.1em;
text-indent: -0.5em;
text-shadow: 1px 0 1px #b3b3b3;
}
@media print {
.rating {
-webkit-print-color-adjust: exact;
}
}
.rating-1 .star-1, .rating-1 .is-half {
border-color: #cc8b1f;
background: #cc8b1f;
}
.rating-2 .star-1, .rating-2 .star-2, .rating-2 .is-half {
border-color: #dcb228;
background: #dcb228;
}
.rating-3 .star-1, .rating-3 .star-2, .rating-3 .star-3, .rating-3 .is-half {
border-color: #f0991e;
background: #f0991e;
}
.rating-4 .star-1, .rating-4 .star-2, .rating-4 .star-3, .rating-4 .star-4, .rating-4 .is-half {
border-color: #f26a2c;
background: #f26a2c;
}
.rating-5 .star-1, .rating-5 .star-2, .rating-5 .star-3, .rating-5 .star-4, .rating-5 .star-5 {
border-color: #dd050b;
background: #dd050b;
}
.rating-1 .is-half, .rating-2 .is-half, .rating-3 .is-half, .rating-4 .is-half {
border-right-color: #eeeeee;
}
<div class="rating rating-1">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-1">
<i class="star-1">★</i>
<i class="star-2 is-half">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-2">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-2">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3 is-half">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-3">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-3">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4 is-half">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-4">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
<div class="rating rating-4">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5 is-half">★</i>
</div>
<div class="rating rating-5">
<i class="star-1">★</i>
<i class="star-2">★</i>
<i class="star-3">★</i>
<i class="star-4">★</i>
<i class="star-5">★</i>
</div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment