Sass Snippets - the Each Loop
Reading the Sass reference (and working at Viget) has made me realize how freaking powerful/awesome this pre-processor is, so I'd like to share small discoveries with you guys (aka just some little snippets to make coding more enjoyable :D).
Introducing Sass Snippets -- a new weekly blog segment about how fucking cool Sass/Compass are.
The each loop is amazing. It's used for targeting items in a given list. Some great use cases could be for staff profiles, social media icons, special buttons or text spans; really any set of items with similar characteristics and slight, significant alterations would work great with this method. I'm going to show an example for changing just the background-image on a set of social media icons. First, define a list like so:
SCSS:
$social: twitter, facebook, instagram;
Here, we have a list called social with different networks as list items. We can now loop through each defined item by using the @each directive. What I did was name each of the icon images by the name of the network in the list (i.e. facebook.svg) as well as the specific class for that item (class = "social-icon facebook"). So what we're doing here is, inside of the "social-icon" class, we're looping through each item in the $social list, and for each class with the title of the list item (i.e. the social network), we're setting it's background-image to the name-of-the-network.svg.
SCSS:
.social-icon { // shared information here background: 50% no-repeat; background-size: 100%; float: left; height: 50px; width: 50px; // unique information loops here @each $network in $social { &.#{$network} { background-image: image-url("app_assets/social_icons/#{$network}.svg"); } } }
CSS produced by the each loop:
.social-icon.twitter { background-image: url("/images/app_assets/social_icons/twitter.svg"); } .social-icon.facebook { background-image: url("/images/app_assets/social_icons/facebook.svg"); } .social-icon.instagram { background-image: url("/images/app_assets/social_icons/instagram.svg"); }
TL;DR: define a sass list, then use @each to address each item in the list.
More Resources:
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#each-directive
http://portfolio.miphe.com/showcase/sass-dry-selectors/










