Sass vs Less
What is a preprocessor ?

A Few Reasons Why
- It saves time
- Easier to maintain
- Easier to read
- Make your websites looks better
- Frameworks
How Does it Work?

Sass & Less
Introduction
Sass - syntactically awesome stylesheets.
| Designed by: | Hampton Catlin |
| First appeared: | November 28, 2006 |
| Stable release: | 3.5.1 / July 13, 2017 |
| Filename extensions: | .sass, .scss |
| Implem. language: | Ruby |
| Website: |
Less - Language for End System Services
| Designed by: | Alexis Sellier |
| First appeared: | 2009 |
| Stable release: | 2.7.2 / January 4, 2017 |
| Filename extensions: | .less |
| Implem. language: | JavaScript |
| Website: |
Variables


@font-size: 16px;
div {
font-size: @font-size;
}$font-size: 16px;
div {
font-size: $font-size;
}
div {
font-size: 16px;
}Nested Selectors


$link-color: #999;
$link-hover: #229ed3;
ul {
margin: 0;
li {
float: left;
}
a {
color: $link-color;
&:hover {
color: $link-hover;
}
}
}@link-color: #999;
@link-hover: #229ed3;
ul {
margin: 0;
li {
float: left;
}
a {
color: @link-color;
&:hover {
color: @link-hover;
}
}
}ul { margin: 0; }
ul li { float: left; }
ul a { color: #999; }
ul a:hover { color: #229ed3; }
Mixins


@mixin bordered($width) {
border: $width solid #ddd;
&:hover {
border-color: #999;
}
}
h1 {
@include bordered(5px);
}.bordered (@width) {
border: @width solid #ddd;
&:hover {
border-color: #999;
}
}
h1 {
.bordered(5px);
}h1 { border: 5px solid #ddd; }
h1:hover { border-color: #999; }
Mixins with arguments


@mixin bordered($width:2px){
border:$width 2px black;
}
#menu a{
@include bordered(4px);
background: green;
}.bordered(@width:2px){
border:@width solid black;
}
#menu a{
.bordered(4px);
background: green;
}#menu a {
border: 4px 2px black;
background: green;
}
Selector Inheritance


.block { margin: 10px 5px; }
p {
@extend .block;
border: 1px solid #eee;
}
ul, ol {
@extend .block;
color: #333;
text-transform: uppercase;
}.block { margin: 10px 5px; }
p {
&:extend(.block);
border: 1px solid #eee;
}
ul, ol {
&:extend(.block);
color: #333;
text-transform: uppercase;
}
.block, p, ul, ol {
margin: 10px 5px;
}
p {
border: 1px solid #eee;
}
ul, ol {
color: #333;
text-transform: uppercase;
}Conditionals & control Structures


@if lightness($color) > 30% {
background-color: black;
}
@else {
background-color: white;
}
@for $i from 1px to 3px {
.border-#{i} {
border: $i solid blue;
}
}.mixin (@color) when (lightness(@color) > 30%) {
background-color: black;
}
.mixin (@color) when (lightness(@color) =<; 30%) {
background-color: white;
}
.loop(@counter) when (@counter > 0){
.loop((@counter - 1));
.border-@{counter} {
border: 1px * @counter solid blue;
}
}Main question
Why Sass Better than Less
- @ definition of variables
- constructs & when, & when not ...
- less structured
Example
.keyframes(...) {
@process: ~`(function(e){function r(r,t,c)
{var i="}\n",u=n.split(/(^[a-zA-Z0-9-]+),/g),
s=t+" "+u[1]+"{",o=["-webkit-","-moz-","-ms-",""];
c?a.forEach(function(r){-1!==e.indexOf(r)
&&(u[2]=u[2].replace(new RegExp(r,"g"),function(e)
{return c+e}))}):u[2]=u[2].replace(/{([^}]+)}/g,
function(e,r){var t=r.split(";");t.forEach(function(e,r)
{a.forEach(function(n){-1!==e.indexOf(n)&&(t[r]="",
o.forEach(function(a){t[r]+=e.trim()
.replace(new RegExp(n,"g"),function(e){return a+e})+
";"}))})});var n=t.join(";").replace(/;;/g,";");
return e.replace(r,n)}),s+=u[2]+i,"start"==r?e="0; }
\n"+s:"startend"==r?e="0; } \n"+s.replace(i,""):e+="end"
==r?s.replace(i,""):s}e=e||8121991;var t="@{state}",n=e;
if(8121991==e)return e;var a=["animation","transform",
"filter"];switch(t){case"1":r("start",
"@-webkit-keyframes","-webkit-"),r(null,"@-moz-keyframes"
,"-moz-"),r(null,"@-o-keyframes","-o-"),r("end",
"@keyframes");break;case"2":r("start","@-webkit-keyframes"
,"-webkit-"),r(null,"@-moz-keyframes","-moz-"),r("end",
"@keyframes");break;case"3":r("start","@-webkit-keyframes",
"-webkit-"),r(null,"@-moz-keyframes","-moz-"),r("end",
"@-o-keyframes","-o-");break;case"4":r("start",
"@-webkit-keyframes","-webkit-"),r(null,"@-o-keyframes",
"-o-"),r("end","@keyframes");break;case"5":r("start",
"@-webkit-keyframes","-webkit-"),r("end","@-moz-keyframes",
"-moz-");break;case"6":r("start","@-webkit-keyframes",
"-webkit-"),r("end","@-o-keyframes","-o-");break;
case"7":r("start","@-webkit-keyframes","-webkit-"),
r("end","@keyframes");break;case"8":r("startend",
"@-webkit-keyframes","-webkit-");break;case"9":r("start",
"@-moz-keyframes","-moz-"),r(null,"@-o-keyframes","-o-"),
r("end","@keyframes");break;case"10":r("start",
"@-moz-keyframes","-moz-"),r("end","@-o-keyframes",
"-o-");break;case"11":r("start","@-moz-keyframes",
"-moz-"),r("end","@keyframes");break;case"12":r("startend",
"@-moz-keyframes","-moz-");break;case"13":r("start",
"@-o-keyframes","-o-"),r("end","@keyframes");break;
case"14":r("startend","@-o-keyframes","-o-");break;
case"15":r("startend","@keyframes")}return e})
((function(){var e="@{arguments}";return
e=e.replace(/^\[|\]$/g,"")})())`; @state: 1;
lesshat-selector { -lh-property: @process; }
}@mixin keyframes ($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-ms-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
}


+
Thank you for attention!
Sass vs Less
By supersmf
Sass vs Less
- 276

