Follow along athttp://taupecat.github.io/sass-102
…which makes it not a programming language. Programming languages require logic, which CSS lacks, with few exceptions.
Calc is an exception; CSS is exactly what its name says it is. A set of rules that define the style of a document, and that's it.Like any data type, these can be acted on.
Let's calculate some colors
This is what makes Sass color functions like mix() and adjust-hue() possible$states: ( "AL", "DC", "DE", "FL", "GA", "IA", "IL", "IN", "KY", "LA", "MD", "MI", "MO", "MS", "NC", "NJ", "NY", "OH", "PA", "SC", "TN", "VA", "WV" );
$regions: ( ( "DC", "DE", "MD", "NJ", "NY", "PA" ), ( "AL", "FL", "GA", "KY", "LA", "MS", "NC", "SC", "TN", "VA", "WV" ), ( "IA", "IL", "IN", "MI", "MO", "OH" ) );
List indexes start at 1, not 0!
$social: ( "facebook": '\f204', "twitter": '\f202', "linkedin": '\f207', "pinterest": '\f209', "github": '\f200', "dribbble": '\f201', "instagram": '\f215', "email": '\f410' );
$mega-social: ( "facebook": ( content: "\f204", coords: 0 0 ), "twitter": ( content: "\f202", coords: 0 -64px ), "linkedin": ( content: "\f207", coords: 0 -128px ) );
li.facebook:before { content: map-get($social, "facebook"); }
li.facebook:before { content: '\f204'; }
$types: 4 $type-width: 20px @while $types > 0 { .while-#{$types} { width: $type-width + $types; } $types: $types - 1 }
.while-4 { width: 24px; } .while-3 { width: 23px; } .while-2 { width: 22px; } .while-1 { width: 21px; }
@mixin griddr($cols) { // do a math here } @for $i from 1 through $columns { .col-#{$i} { @include griddr($i); } }
@for $i from 1 through 9 { .space-#{$i} { background-image: url("../images/space/space-#{$i}.jpg"); } }
.space-1 { background-image: url("../images/space/space-1.jpg"); } .space-2 { background-image: url("../images/space/space-2.jpg"); } .space-3 { background-image: url("../images/space/space-3.jpg"); } etc.
@for $var from 1 through 10 { // Sass stuff goes here // Operation includes the number 10 } @for $var from 1 to 10 { // Other Sass stuff goes here // Operation stops after number 9 }
@mixin breakpoint($breakpoint) { @if $breakpoint == medium { @media only all and (min-width: 640px) { @content; } } @else if $breakpoint == large { @media only all and (min-width: 1024px) { @content; } } }
p { background-color: rgba(255, 0, 255, 0.2); @include breakpoint(medium) { background-color: rgba(255, 255, 0, 0.2); } }
p { background-color: rgba(255, 0, 255, 0.2); } @media only all and (min-width: 640px) { p { background-color: rgba(255, 255, 0, 0.2); } }
Let's use this in the real world.
@each $state in $states { .#{$state} { background-image: url("../images/state_infographics/#{$state}.png"); } }
.AL { background-image: url("../images/state_infographics/AL.png"); } .DC { background-image: url("../images/state_infographics/DC.png"); } .DE { background-image: url("../images/state_infographics/DE.png"); } ...
@each $network, $content in $social { .#{$network} a:before { content: $content; } }
.facebook a:before { content: '\f204'; } .twitter a:before { content: '\f202'; } .linkedin a:before { content: '\f207'; } ...
Let's loop through some stuff.