Welsh Frontend Developer
based in Brighton
@darbybrown
Sass is a CSS pre-processor.
Compiled at build time
What advantages are there over using vanilla CSS
@import "base.scss";
@import "layout.scss";
@import "modules/media.scss";
@import "modules/buttons.scss";
Break down your stylesheets into maintainable partials
Outputs
style.min.css
$primary: #c0ff1e;
$primary--light: #e0ff8c;
$class-name: 'header';
$base-gutter: 24px;
$home-banner: '/img/home-banner.jpg';
$helvetica: "Helvetica Neue", Helvetica, sans-serif;
$nested-list: twitter #00acee, facebook #3b5998, pinterest #cb2027;
Usage
.header {
background: $primary;
}
.#{$class-name}--banner {
background: url($home-banner);
}
.sidebar {
width: (100% / 3);
}
.main {
width: (100% / $columns ) * 2;
}
.main2 {
width: 800px / 1200px * 100%;
}
.sidebar {
width: 33.33333%;
}
.main {
width: 66.66667%;
}
.main2 {
width: 66.66667%;
}
Outputs
.link {
color: rgba(#ff0, 0.8);
}
.link--dark {
color: darken(#ff0, 20%);
}
.link--complement {
color: complement(#f00);
}
.link {
color: rgba(255, 255, 0, 0.8);
}
.link--dark {
color: #999900;
}
.link--complement {
color: cyan;
}
Outputs
.nav {
border-bottom: 1px solid black;
a {
color: inherit;
transition: 0.3s;
}
}
Output
.nav {
border-bottom: 1px solid black;
}
.nav a {
color: inherit;
transition: 0.3s;
}
.header {
.nav {
background: red;
ul {
list-style: none;
li {
display: inline-block;
a {
color: red;
}
}
}
}
}
.header .nav {
background: red;
}
.header .nav ul {
list-style: none;
}
.header .nav ul li {
display: inline-block;
}
.header .nav ul li a {
color: red;
}
Outputs
.some-link {
color: red;
transition: 0.3s;
&:hover {
color: blue;
}
}
.some-link {
color: red;
transition: 0.3s;
}
.some-link:hover {
color: blue;
}
Outputs
.item {
width: 20em;
.full-width & {
width: 100%;
}
}
.btn {
...
& + & {
margin-left: 1em;
}
}
.item {
width: 20em;
}
.full-width .item {
width: 100%;
}
.btn {
...
}
.btn + .btn {
margin-left: 1em;
}
Outputs
.element {
height: 10em;
width: 100%;
@media screen and (min-width: 30em) {
width: 22em;
}
}
.element {
height: 10em;
width: 100%;
}
@media screen and (min-width: 30em) {
.element {
width: 22em;
}
}
Outputs
@function px-to-ems($pixels, $context: 16) {
@return ($pixels / $context) * 1em
}
h1 {
font-size: px-to-ems(72);
}
h1 {
font-size: 4.5em;
}
Outputs
@mixin center($width) {
left: 50%;
margin-left: -($width / 2);
position: absolute;
width: $width;
}
.logo {
@include center(300px);
}
.logo {
left: 50%;
margin-left: -150px;
position: absolute;
width: 300px;
}
Outputs
@mixin transform($value) {
-webkit-tranform: $value;
-moz-transform: $value;
-o-transform: $value;
tranform: $value;
}
.image {
@include transform(rotate(45deg));
}
.image {
-webkit-tranform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
tranform: rotate(45deg);
}
Outputs
.btn {
display: inline-block;
padding: 0.4em 0.8em;
}
.btn--large {
@extend .btn;
font-size: 1.5em;
}
.btn, .btn--large {
display: inline-block;
padding: 0.4em 0.8em;
}
.btn--large {
font-size: 1.5em;
}
Outputs
.modal .message--warning {
color: red;
}
.message--warning {
font-weight: bold;
}
.message-success {
@extend .message--warning;
border-color: dark-green;
color: green;
}
.modal .message--warning, .modal .message-success {
color: red;
}
.message--warning, .message-success {
font-weight: bold;
}
.message-success {
border-color: dark-green;
color: green;
}
Outputs
%btn {
display: inline-block;
padding: 0.4em 0.8em;
}
.btn--large {
@extend %btn;
font-size: 1.5em;
}
.btn--large {
display: inline-block;
font-size: 1.5em;
padding: 0.4em 0.8em;
}
Outputs
Live example time
http://sassmeister.com/
http://sass-lang.com
http://twitter.com/darbybrown
http://codepen.io/hugo
http://darbybrown.com