Suite du premier article Comprendre et utilises SASS et de l’installation de SASS.
Définir une liste SASS/SCSS
Ceci se fait avec une variables dont les valeurs sont séparés soit avec espaces, soit des virgules.
$list1 : 480px 640px 980px 1140px; $list2 : Helvetica, Arial, sans-serif; $list3 : 1280px 1480px 1600px;
Pour connaître la longueur d’une liste, on utilise la fonction length()
:
:root { content: length( $list1 ); }
Si je souhaite récupérer le nième élément, on a la fonction nth()
:
html { width: nth($list1, 3); font-family: nth($list2, 2); }
Remplacer une valeur :
html { width: set-nth($list1, 3, 780px); font-family: set-nth($list2, 2, 'Roboto'); }
Fusionner 2 listes :
html { width: join($list1, $list3); }
et en souhaitant indiquer le type de séparateur :
html { width: join($list1, $list3, comma); width: join($list1, $list3, space); }
Ajouter un élément à une liste :
html { font-family: append($list2, 'Roboto'); }
Ajouter un élément en indiquant le séparateur :
html { font-family: append($list2, 'Roboto', comma); }
Trouver la position d’un élément dans une liste :
html { content: index($list2, 'Arial'); }
Combiner des listes :
p { box-shadow: zip( 10px 20px 30px, 1px 2px 3px, 10px 10px 10px, #000 #F00 #00f ); }
ce qui donnera en CSS :
p { box-shadow: 10px 1px 10px #000, 20px 2px 10px #F00, 30px 3px 10px #00f; }
Les maps scss
Définir une map (tableau) :
$map1 : ( 'key1': 'value1', 'key2': 'value2' )
Imbriquer une map :
$map2 : ( 'key1' : 'value1', 'key2' : 'value2', 'key3' : ( nestedKey1: 'nestedValue1', nestedKey2: 'nestedValue2' ) );
Lister tous les indices et valeurs :
p { content: map-keys($map1); content: map-values($map1); }
Tester si un indice existe ; retournera true
ou false
:
p { content: map-has-key($map1, 'key1'); }
Récupérer la valeur d’un indice :
p { content: map-get($map1, 'key1'); }
Opérations mathématiques scss
Nous pouvons utiliser les opérations directement dans nos déclarations :
div { width: 40 + 2; }
Et en déclarant des variables :
$width: 640px; $columns: 4; div { width: $width / $columns; }
ce qui donnera en CSS :
div { width: 160px; }
Convertir un nombre en pourcentage :
div { width: percentage(0.5); }
ce qui donnera :
div { width: 50%; }
Trouver le plus petit nombre :
div { content: min(10, 20, 50); }
Et l’inverse pour trouver le plus grand :
div { content: max(10, 20, 50); }
Et un chiffre aléatoire avec un maximum :
div { content: random(100); }
Les conditions en SCSS
Effectuer une condition si/sinon – if/else :
$string: alement; $number: 20; $noValue: null; html { @if $type == element { min-height: 100vh; } @else { min-height: auto; } }
Effectuer une condition si/sinon si/sinon – if/elseif/else :
$string: element; $number: 20; $noValue: null; html { @if $number == 50 { min-height: 100vh; } @else if $number < 20 { min-height: 100%; } @else { min-height: auto; } }
Les opérateurs mathématiques :
- egalité :
==
- différent :
!=
- supérieur :
>
- supérieur ou égal :
>=
- inférieur :
<
- inférieur ou égal :
<=
Les boucles en SCSS
3 types de boucles :
- for
- each
- while
@for $i from 1 through 6 { h#{$i} { font-size: #{70 - $i * 10}px } }
Ce qui donnera en CSS :
h1 { font-size: 60px; } h2 { font-size: 50px; } h3 { font-size: 40px; } h4 { font-size: 30px; } h5 { font-size: 20px; } h6 { font-size: 10px; }
Ou en parcourant une liste, ce qui donnera le même résultat CSS :
$titles: h1, h2, h3, h4, h5, h6; @for $i from 1 through 6 { #{ nth($titles, $i) } { font-size: #{70 - $i * 10}px } }
Ou encore en utilisant la fonction length()
:
$titles: h1, h2, h3, h4, h5, h6; @for $i from 1 through length($titles) { #{ nth($titles, $i) } { font-size: #{70 - $i * 10}px } }
Une boucle @each
:
@each $title in h1, h2, h3, h4, h5, h6 { #{$title} { font-size: 20px; } }
Une boucle @each
avec une liste :
$titles: h1, h2, h3, h4, h5, h6; @each $title in $titles { #{$title} { font-size: 20px; } }
Une boucle @while
:
$i : 1; @while $i <= 6 { h#{$i} { font-size: #{70 - $i * 10}px } $i : $i + 1; }
Une boucle en utilisant 2 listes :
$titles: h1, h2, h3, h4, h5, h6; $sizes: 55px, 45px, 35px, 25px, 15px, 10px; $i : 1; @while $i <= 6 { #{nth($titles, $i)} { font-size: #{nth($sizes, $i)} } $i : $i + 1; }
Les fonctions
La déclaration de fonctions passe par la directive @function
, des paramètres optionnels, et la directive @return
; comparons la longueur de 2 listes :
$titles: h1, h2, h3, h4, h5, h6; $sizes: 55px, 45px, 35px, 25px, 15px, 10px; @function memeLongueur($list1, $list2) { $len1: length($list1); $len2: length($list2); @if ($len1 == $len2) { @return 'OK'; } @else { @return 'Nok'; } } div { content: memeLongueur($titles, $sizes); }