LESS - CSS w nowej formie

Post on 26-May-2015

951 views 0 download

description

Wprowadzenie do preprocessora LESS dla języka CSS.

Transcript of LESS - CSS w nowej formie

LESS - CSS w nowej formie

✓ Główny programista w GavickPro

✓ @dziudek

✓ zebymniezapomnial.tumblr.com

Tomasz Dziuda

LESS?

LESS = CSS +

Zmienne

Funkcje

Mixiny

Warunki

Komentarze inline

DRY

Zagnieżdżone reguły

Operacje matematyczne

@base_size: 1000px;

.border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius;}

.parent { .border-radius; width: @base_size; .child { .border-radius; float: left; width: @base_size * 0.25; &:hover { background: #eee; } & > div { .border-radius; } } }

.parent { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; width: 1000px;}.parent .child { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; float: left; width: 250px;}.parent .child:hover { background: #eee;}.parent .child > div { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px;}

LESS CSS>> Preprocessor >>

Alternatywy

1. SASS (Ruby)

2. Turbine (PHP)

3. CSS Preprocessor (PHP)

4. Stylus (JavaScript)

Dlaczego warto poznać?

✓ Popularność (np. Bootstrap, Joomla!)

✓ Filozofia DRY

✓ Uzupełnia braki CSS

✓ Dobry na początek przygody z preprocessorami CSS

Zalety LESS

1. Łatwe zarządzanie kolorami, rozmiarami tekstu etc.

2. Pozwala zapomnieć o -moz-, -webkit-, -o-, -ms-

3. Zmniejszenie ilości plików CSS

4.Łatwiejsze tworzenie dedykowanych plików CSS dla wybranych podstron

Wady LESS

✓ Dodatkowy krok przy pracy z plikami

✓ Może powodować problemy ze znalezieniem odpowiedniego fragmentu kodu

✓ Może wygenerować sporo nadmiarowego kodu CSS.

✓ SASS > LESS

IE a duże pliki CSS

Przy korzystaniu z jednego pliku warto pamiętać, że IE < 10 ma limit 4095 selektorów w jednym pliku:

http://marc.baffl.co.uk/browser_bugs/css-selector-limit/

LESS w Joomla!

Narzędzia pomocnicze

✓ LESS.app

✓ less.js

✓ PHPLESS

✓ http://less2css.org/

✓ http://incident57.com/codekit/

Brackets

Dzięki rozszerzeniu BracktesLESS pozwala kompilować pliki LESS przy zapisie.

Sublime Text 2

Dzięki rozszerzeniom posiada zaawansowane wsparcie dla LESS: parsowanie plików przy zapisie, określanie miejsca docelowego dla plików LESS, pomijanie plików przy generowaniu plików CSS etc.

Espresso, Dreamweaver i inne

Pozostałe edytory z reguły pozwalają co najmniej na dodanie wsparcia dla składni LESS.

Składnia LESS

Komentarze

Wymarzona składnia

// komentarz inline :-)

Zmienne

@page-width: 1200px;

.wrapper {

max-width: @page-width;

}

Zmienne

Osadzanie zmiennych w wartościach CSS:

background-image: url("@{path_images}/img.png");

Zmienne w CSS

http://dev.w3.org/csswg/css-variables/

Zagnieżdżanie reguł

Zagnieżdżanie reguł

.class1 {property: value;.class2 {

property: value;&:hover {

property: value;}

}}

.class1 {property: value;

}

.class1 .class2 {property: value

}

.class1 .class2:hover {property: value;

}

=>

Zagnieżdżanie reguł

=>

.class1 {&.big {

property: value;}

}

.class1.big {property: value;

}

Zagnieżdżanie reguł

=>

.class1 {property: value;

@media (max-width: 580px) {property: value;

}}

.class1 {property: value;

}

@media (max-width: 580px) {.class1 {

property: value;}

}

Less nie grupuje reguł dla media queries!

Zagnieżdzanie reguł

=>

.child, .sibling { .parent & { color: black; } & + & { color: red; }}

.parent .child,

.parent .sibling { color: black;}.child + .child,.child + .sibling,.sibling + .child,.sibling + .sibling { color: red;}

Parsowanie CSS w przeglądarkach

Warto na to zwrócić uwagę gdy:

✓ Liczy się dla nas każda milisekunda

✓ Nasz kod CSS jest naprawdę złożony

✓ Gdy mamy problemy z wydajnością

Parsowanie CSS w przeglądarkach

Przeglądarki parsują selektory

od prawej do lewej:

#menu li a

Parsowanie CSS w przeglądarkach

Selektor potomka jest najwolniejszym z selektorów

#menu li a

(trochę) lepiej jest użyć:

#menu > li > a

Parsowanie CSS w przeglądarkach

Klasyfikacja reguł według wydajności (malejąco):

1. reguły ID

2. reguły klas

3. reguły tagów

4. reguły uniwersalne

Powyższa klasyfikacja jest uproszczona dla celów poglądowych - tak naprawdę najwolniejsze są pseudoklasy i selektory atrybutów, a dodatkowo pomiędzy ID a klasami z reguły nie ma zbyt wielkich różnic w wydajności.

Operacje matematyczne

@a: 20px;

@b: (@a * 10); // 200px

@c: (@a + @b); // 220px

width: ((@c + 36) * 2px); // 512px

color: #222 + #333; // #555

CSS i calc()

width: calc(100% - 20px);

font-size: calc(2 * 2em - 24px);

LESS nie uwzględnia rodzaju użytych jednostek

Mixiny

Najprostszy mixin

.border-radius {

-webkit-border-radius: 5px;

-moz-border-radius: 5px;

border-radius: 5px;

}można też zastosować nazwę #border-radius

Podwójne właściwości

Nawet jeżeli powtórzymy jakąś właściwość, to jeżeli w obu wypadkach ma ona taką samą wartość - nie zostanie ona powielona

(pod warunkiem, że powielimy ją w obrębie jednej klasy/mixinu)

Ukrywanie mixinów

.shadows() {box-shadow: 0 0 3px #000;text-shadow: 0 0 3px #000;

}

Mixiny - parametry

.shadows(@size) {box-shadow: 0 0 @size #000;text-shadow: 0 0 @size #000;

}

Użycie:

nav .submenu {border: 1px solid #eee;.shadows(3px);

}

Mixiny - wartości domyślne

.shadows(@size: 3px) {box-shadow: 0 0 @size #000;text-shadow: 0 0 @size #000;

}

Użycie:

nav .submenu {border: 1px solid #eee;.shadows;

}

Mixiny - !important

.shadows(20px; #aaa) !important;

box-shadow: 0 0 20px #aaa!important;text-shadow: 0 0 20px #aaa!important;

Guard mixins

.mixin(@a) when (@a > 10)

.mixin(@a) when (@a > 10), (@a < 100) // OR

.mixin(@a) when (@a > 10) and (@a < 100)

.mixin(@a) when not (@a > 10)

Selektory w mixinach

.mixin() {

.selector {

property: value;

}

}

Mixiny - przestrzenie nazw

#package {.mixin() {

...}

}

Użycie:

.cssclass {#package > .mixin;

}

Funkcje

http://lesscss.org/#reference

Importowanie kodu

LESS pozwala zarówno na importowanie plików *.css jak i *.less

W wypadku plików *.css wszystkie deklaracje @import przenoszone są podczas kompilacji na samą górę pliku

Importowanie kodu

.class { @import “test.less”; border: 10px solid #aaa;}

Przerwa dla gardła ;-)

Level++

Przecinki a średniki

.shadows(@size: 3px; @color: #000) {box-shadow: 0 0 @size @color;text-shadow: 0 0 @size @color;

}

.test(a, b, c;);

Drugi sposób na przecinki

~”text”

Ważne!

samo “text” powoduje wstawienie wartości z cudzysłowami

Problemy z calc()

calc(~”WYRAŻENIE”)

zamiast

calc(WYRAŻENIE)

Takie same nazwy mixinów

.mixin(@a; @b: 10);.mixin(@a: 20; @b: 10);

.mixin(@a:30; @b);

W powyższym wypadku wywołanie:

.mixin(10);

spowoduje wykorzystanie kodu CSS z pierwszego i drugiego mixinu (i powielenie właściwości CSS!)

Złożone argumenty mixinów

.shadows(@size: 3px; @color: #000) {box-shadow: 0 0 @arguments;text-shadow: 0 0 @arguments;

}

.shadows(2px, #aaa); box-shadow: 0 0 2px #aaa;text-shadow: 0 0 2px #aaa;

Mixiny - @rest

.shadows(@pos: 3px 4px; @rest...) {box-shadow: @pos @rest;text-shadow: @pos @rest;

}

.test(@a...) { ...}

Mixiny - pattern matching

.margins(mobile; @value: 20px)

.margins(tablet; @value: 30px)

.margins(@_;@value: 50px)

pierwszy mixin wywoła się gdy:

@mode: mobile;

.margins(@mode);

.margins(@mode; 10px);

Kod JS w mixinach

Kod JS jest wykonywany gdy użyjemy składni:

`kod JS`

.class { height: `document.body.clientHeight`;}

(działa tylko z less.js)

Interpolacja selektorów

@big-headers: ~"h1, h2, h3";@small-headers: ~"h4, h5, h6";

@{big-headers} { font-weight: 600;}

@{small-headers} { font-weight: 400;}

@{big-headers},@{small-headers} { text-transform: uppercase;}

h1, h2, h3 { font-weight: 600;}h4, h5, h6 { font-weight: 400;}h1, h2, h3,h4, h5, h6 { text-transform: uppercase;}

=>

Zmienne nazwy zmiennych

@color-frontpage: #aaa;@color-subpage: #bbb;

.colorize(@page) { background-color: ~"@{color-@{page}}";}

.wrapper { .colorize(subpage);}

Aliasy

.transition-timing-function(@value) { -webkit-transition-timing-function: @value; -moz-transition-timing-function: @value; -o-transition-timing-function: @value; transition-timing-function: @value;}// Alias.trans-timing(@value) { .transition-timing-function(@value);}

Co dalej?

✓ trzeba być na bieżąco

✓ Analiza kodu LESS otwartych projektów

✓ Praktyka, praktyka i jeszcze raz... praktyka ;-)

✓ SASS?

Źródła informacji

1. http://lesscss.org/ (EN)

2. http://ciembor.github.io/lesscss.org/ (PL)

3. https://github.com/cloudhead/less.js/wiki (EN)

4. Stack Overflow ;-)

Gratis ode mnie ;-)

Mój standardowy zestaw mixinów:

https://github.com/dziudek/LESS-Mixins

Pytania?

Dziękuję za uwagę

-50% zniżki na licencje Developer i Business

Kod zniżkowy:

joomladay-2013plWażny od 5 do 12 października 2013