cipherbliss_blog
les couleurs de la RATP dans SASS
si vous avez dans l'idée de faire un petit projet web incluant les couleurs des lignes de métro / RER / Tram parisien, voici les codes couleurs choppées à coup de pipette (on peut aussi trouver ces codes hexadécimaux sur wikipedia). Vous pouvez les utiliser dans votre css avec ces variables faites pour <a href="https://sass-lang.com/">le language de preprocessing SASS</a>.
Vous pouvez voir ce que donnent les compilations sass en ligne et vous exercer sur <a href="https://sassmeister.com/">sassmeister.com</a>
<code class="scss"> </code>
ensuite il vous faudra des classes pour appliquer ces couleurs sur vos lignes.
<code class="scss">/** metros**/ .metro1 { background: $metro1 !important; } .metro2 { background: $metro2; } .metro3 { background: $metro3; } .metro3BIS { background: $metro3BIS; } .metro4 { background: $metro4; } .metro5 { background: $metro5; } .metro6 { background: $metro6; } .metro7 { background: $metro7; } .metro7BIS { background: $metro7BIS; } .metro8 { background: $metro8; } .metro9 { background: $metro9; } .metro10 { background: $metro10; } .metro11 { background: $metro11; } .metro12 { background: $metro12; } .metro13 { background: $metro13; } .metro13BIS { background: $metro13; } .metro14 { background: $metro14; } ** trams ** .tram1 { color: $tram1; border: solid 3px $tram1; } .tram2 { color: $tram2; border-color: $tram2; } .tram3 { color: $tram3; border-color: $tram3; } .tram4 { color: $tram4; border-color: $tram4; } .tram5 { color: $tram5; border-color: $tram5; } .tram6 { color: $tram6; border-color: $tram6; } .tram7 { color: $tram7; border-color: $tram7; } .tram8 { color: $tram8; border-color: $tram8; }</code>
<code class="scss"></code> Et si vous voulez personnaliser tout ça dans un mixin pour choisir que colorer avec vos variables, c'i possible! <div>
Admettons que, comme ci dessus l'on veuille une classe pour chaque ligne afin de colorer une bordure. <div>Pour ça on va utiliser des tableaux associatifs(clé: valeur), sta dire des <strong>maps</strong>,</div> <div>et des tableaux non associatifs, des <strong>listes </strong>(élément1, élément2).</div> <div>On définit une map de famille de transport (métro, tram, rer), puis une couleur pour chaque ligne.</div> <div>Puis on définit notre <strong>@mixin</strong> qui fait une classe avec bordure correspondante.</div> <div>grâce à l'interpolation de variable on peut faire des noms de classe css (et d'autres choses) dynamiques.</div> <div>exemple:</div> <div><code>$name: foo; $attr: border; p.#{$name} { #{$attr}-color: blue; }</code></div> <div>Allez donc voir <a href="https://sass-lang.com/documentation/Sass/Script/Functions.html#map-functions">les quelques fonctions existantes sur les maps.</a> Ici on se servira uniquement de celle qui retourne la valeur pour une clé donnée.</div> <div>Avec <strong>@each</strong> on va parcourir notre map et créer des classes en conséquence avec notre mixin, appelé par la directive <strong>@include</strong>.</div> <div>Ensuite si on veut que nos classes soient différentes pour les métros et les trams on a plus qu'a faire un autre mixin, et voilà!</div> <code> // variables de couleurs $metro1: #fdce00; $metro2: #0267af; $metro3: #a1971b; $metro3BIS: #96d7dd; $metro4: #b74288; $metro5: #de8b53; $metro6: #79bb92; $metro7: #e8a8b8; $metro7BIS: #7cc485; $metro8: #cfa9d0; $metro9: #cec92b; $metro10: #dfb039; $metro11: #8e6538; $metro12: #328e5b; $metro13: #a0cccb; $metro14: #612684; $tram1: #0564b1; $tram2: #c74896; $tram3: #90613b; $tram3a: #90613b; $tram3b: #ec8a42; $tram4: #fcc11b; $tram5: #0564b1; $tram6: #ec5738; $tram7: #90613b; $tram8: #999738; $rera: #cf532e; $rerb: #5191cd; // maps de couleurs $metrocolors: ( '1' : $metro1, '2': $metro2, '3':$metro3, // etc ); $tramcolors: ( '1' : $tram1, '2': $tram2, // etc ); $rercolors: ('a' : $rera, 'b': $rerb); // map de famille $sisilafamille: ( 'metro' : $metrocolors, 'tram' : $tramcolors, 'rer' : $rercolors, ); // mettre une bordure à gauche selon la famille et le numéro de ligne @mixin lineBorder($famille,$nom) { $famillemap: map-get($sisilafamille, $famille); .#{$famille}_#{$nom} { border-left: 3px solid map-get($famillemap, $nom); } } // faire un style différent pour les trams @mixin tram($nom,$color) { .tram_#{$nom} { color: $color; border-color: $color; } } @warn "yeah"; // boucle-ception @each $famille, $list in $sisilafamille { @each $key, $val in $list { // traitement différent pour les trams @if ($famille == 'tram') { @include tram($key, $val); } @else { @include lineBorder($famille, $key); } } }</code> <div>Enjoy!</div> </div>
Liens
- cipherbliss Cipherbliss blog