LESS
Less – dynamiczne arkusze stylów
dobre praktyki:
- do komentarzy używaj // zamiast /* .. */
- używaj mixins z parametrami
- kompilując kod LESS minifikuj CSS
- twórz kod modułowo, będzie go można łatwo użyć do innych projektów
- używaj wzorców
- oddzielaj funkcje od stylu, detale od głównych idei
- stwórz katalog lib ze zbiorem kodu wielokrotnego użytku
co zawiera LESS:
- zmienne
- mixins (domieszki)
- operacje
- funkcje
działanie:
- przeglądarki
- po stronie serwera (środowiska Node.js, Rhino)
Zmienne, variables:
definiowanie i użycie:
//LESS
@baseColor1: #e22117;
@baceColor2: #f2c909;
body{
background-color:@baseColor1;
}
h1{
color:@baseColor2;
}
Mixins
rodzaj dziedziczenia – pozwala na zawarcie właściwości jednej klasy dla innej klasy – załączenie nazwy klasy jako właściwości.
Mogą zachowywać się jak funkcje, pobierać argumenty.
// LESS
.rounded-corners (@radius: 3px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
-ms-border-radius: @radius;
-o-border-radius: @radius;
border-radius: @radius;
}
.div_first {
.rounded-corners();
}
.div_second {
.rounded-corners(5px);
}
// CSS
.div_first {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
-ms-border-radius: 3px;
-o-border-radius: 3px;
border-radius: 3px;
}
.div_second {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
}
Parametric mixins (parametized mixins) bez wstępnego określenia parametru pozwala na zapisanie reguł które nie są interpretowane od razu ale wtedy gdy zamieścisz je w innym zbiorze reguł z dołączona wartością:
.ghost-button (@radius:5px, @width:200px, @padding:5px, @color:#fff, @border:5px, @margin:5px) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
margin:@margin auto;
display: block;
width: @width;
padding: @padding;
color: @color;
border: @border solid @color;
text-align: center;
outline: none;
text-decoration: none;
}
Można tez zmodyfikować podczas zamieszczania dowolny parametr:
//LESS
@lightYellow: #fff000;
@green: #34A853;
//definicja mixin
.border(@style: solid, @width: 2px, @color: @lightYellow){
border:@style @width @color;
}
//użycie
.border(@width: 3px, @color: @green);
Mixin Guards, Guarded mixins – warunkowe 'wstawki’
//LESS
@base: #F9690E;
.box-shadow(@style, @c) when (iscolor(@c)) {
box-shadow: @style @c;
}
.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
.box-shadow(@style, rgba(0, 0, 0, @alpha));
}
.box {
div { .box-shadow(0 0 5px, 30%) }
}
.box {
p { .box-shadow(0 0 5px, @base) }
}
//CSS
.box div {
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
.box p {
box-shadow: 0 0 5px #F9690E;
}
//LESS
@template_color: #e22117;
@dark: #000;
@light: #fff;
.set-text-color (@bg-color) when (lightness(@bg-color) >= 50%) {
color: @dark;
background: @bg-color;
}
.set-text-color (@bg-color) when (lightness(@bg-color) < 50%) {
color: @light;
background: @bg-color;
}
.box-1 {
.set-text-color(lighten(@template_color, 30%));
}
.box-2 {
.set-text-color(@template_color);
}
//CSS
.box-1 {
color: #000;
background: #f5a19d;
}
.box-2 {
color: #fff;
background: #e22117;
}
–
Zagnieżdżanie – nested rules, nesting:
less pozwala na pisanie zagnieżdżonych wewnątrz siebie elementów dzięki czemu w css uzyskujemy pełna strukturę selektorów.
Przydatne użycie znaku & pozwala się odwołać do własnie opisywanego selektora.
// LESS
#header {
background-color:#e22117;
color:#fff;
nav {
font-size: 12px;
font-weight: 700;
border-bottom:solid 1px #fff;
}
ul {
list-style: none;
text-align:center;
li {
display:inline;
margin:0 10px;
a {
color:#fff;
&:hover{
color:#f2c909;
}
}
}
}
}
// CSS
#header {
background-color:#e22117;
color:#fff;
}
#header nav {
font-size: 12px;
font-weight: 700;
border-bottom:solid 1px #fff;
}
#header ul {
list-style: none;
text-align:center;
}
#header ul li {
display:inline;
margin:0 10px;
}
#header ul li a {
color:#fff;
}
#header ul li a:hover{
color:#f2c909;
}
Funkcje, operacje
dodawanie, odejmowanie, dzielenie, mnożenie wartości właściwości i kolorów – złożone zależności między właściwościami.
operacje wykonujemy wewnątrz nawiasów.
// LESS
@border: 1px;
@baseColor: #111;
@myRed: #842210;
.div_first {
color: (@baseColor * 3);
border-top: @border;
border-left: (@border * 2);
}
.div_second {
color: (@baseColor + #003300);
border-color: desaturate(@myRed, 10%);
}
// CSS
.div_first {
color: #333;
border-left: 1px;
border-right: 2px;
}
.div_second {
color: #114411;
border-color: #7d2717;
}
–
// LESS
@myBlue: #5B83AD;
@lightBlue: (@nice-blue + #111);
.div_first { color: @lightBlue; }
// CSS
.div_first { color: #6c94be; }
// LESS
@text: "Hello my sweet!";
@var: 'text';
content: @@var;
// CSS
content: "Hello my sweet!";
Funkcje kolorów
- darken() – dodaje czerń
- lighten() – dodaje biel
- saturate() – bardziej intensywne kolory
- desaturate() – bardziej wyblakłe kolory
- fadein() – dodaje przeźroczystość
- fadeout() – usuwa przeźroczystość
- spin() – modyfikuje odcień koloru
Extend
dodaje style określone dla innej klasy do klasy w jakiej jest dodany
// LESS
nav ul {
&:extend(.inline);
background: blue;
}
.inline {
color: red;
}
// CSS
nav ul {
background: blue;
}
.inline, nav ul {
color: red;
}
// LESS
nav ul:extend(.inline){
background: pink;
}
.inline {
color: gray;
}
.my-inline-block {
display: inline-block;
font-size: 0;
}
.thing1 {
&:extend(.my-inline-block);
}
.thing2 {
&:extend(.my-inline-block);
}
// CSS
.my-inline-block,
.thing1,
.thing2 {
display: inline-block;
font-size: 0;
}
Escaping – escaped value
Korzystając z wartości które nie są zgodne ze składnią CSS lub ich składnia jest nierozpoznawalna przez LESS korzystamy ze znaku ~ i zamykamy wartość w łańcuchu:
// LESS
.class {
filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
}
// CSS
.class {
filter: ms:alwaysHasItsOwnSyntax.For.Stuff();
}
Built-in Function
Kompilacja LESS na CSS
za pomocą JavaScript
<link rel="stylesheet/less" type="text/css" href="css/styles.less">
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js"></script>
Lub dzięki edytorowi Atom i dodatkowi less-autocompile
gdzie wstawiamy w pliku styles.less zakomentowaną instrukcję:
//out: styles.css, sourcemap: true, compress: false
//main: styles.less
- out – ścieżka i nazwa pliku css który ma powstać po kompilacji
- sourcemap – tworzenie pliki mapy źródłowej
- compress – kompresja pliku css
- main – wskazuje plik less do kompilacji
LESS libraries
http://getpreboot.com/
http://lesselements.com/
http://lesselements.com/
–
Hope this helps and happy coding :)
Zobacz jeszcze
Bezpieczne czcionki web
Wykaz bezpiecznych czcionek do zastosowań web. osadzanie: font-family: "Times New Roman", Times, serif; Serif Fonts: font-family: Georgia, serif; font-family:...