Tomasz Dziuda “LESS – CSS dla leniwych”

64
LESS - CSS dla leniwych

Transcript of Tomasz Dziuda “LESS – CSS dla leniwych”

Page 1: Tomasz Dziuda “LESS – CSS dla leniwych”

LESS - CSS dla leniwych

Page 2: Tomasz Dziuda “LESS – CSS dla leniwych”

Tomasz Dziuda

Główny programista w GavickPro

[email protected]

Twitter: @dziudek

zebymniezapomnial.tumblr.com

Page 3: Tomasz Dziuda “LESS – CSS dla leniwych”

Czym jest LESS?

Page 4: Tomasz Dziuda “LESS – CSS dla leniwych”

Alternatywy

1. SASS (Ruby)

2. Turbine (PHP)

3. CSS Preprocessor (PHP)

4. Stylus (JavaScript)

Page 5: Tomasz Dziuda “LESS – CSS dla leniwych”

Dlaczego warto poznać LESS?

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

• Ponowne wykorzystanie kodu

• Udostępnia to czego nie ma (a powinien) CSS

• Dobry na początek przygody z preprocessorami CSS

Page 6: Tomasz Dziuda “LESS – CSS dla leniwych”

Zalety LESS

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

2. Pozwala zapomnieć o vendor prefixes

3. Zmniejszenie liczby plików CSS

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

Page 7: Tomasz Dziuda “LESS – CSS dla leniwych”

Wady LESS

• Wymaga dodatkowego kroku przy pracy z plikami

• Może powodować problemy ze znalezieniem odpowiedniego fragmentu kodu w Chrome Dev Tools czy Firebugu

• Nieumiejętnie stosowany może wygenerować sporo nadmiarowego kodu CSS.

• Wciąż brakuje mu wielu udogodnień znanych np. z SASS

Page 8: Tomasz Dziuda “LESS – CSS dla leniwych”

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/

Page 9: Tomasz Dziuda “LESS – CSS dla leniwych”

Workflow przy LESS

Ręcznie Automatycznie

Page 10: Tomasz Dziuda “LESS – CSS dla leniwych”

Narzędzia pomocnicze

• LESS.app

• less.js

• PHPLESS

• http://less2css.org/

• http://incident57.com/codekit/

Page 11: Tomasz Dziuda “LESS – CSS dla leniwych”

Brackets

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

Page 12: Tomasz Dziuda “LESS – CSS dla leniwych”

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.

Page 13: Tomasz Dziuda “LESS – CSS dla leniwych”

Espresso, Dreamweaver i inne

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

Page 14: Tomasz Dziuda “LESS – CSS dla leniwych”

Mój plugin - LESSer

Page 15: Tomasz Dziuda “LESS – CSS dla leniwych”

Jak działa LESSer?

Page 16: Tomasz Dziuda “LESS – CSS dla leniwych”

LESSer - beta

Wersję beta można pobrać z:

https://github.com/dziudek/LESSer

Page 17: Tomasz Dziuda “LESS – CSS dla leniwych”

Składnia LESS

Page 18: Tomasz Dziuda “LESS – CSS dla leniwych”

Komentarze

Wymarzona składnia // komentarz inline :-)

Page 19: Tomasz Dziuda “LESS – CSS dla leniwych”

Zmienne

@page-width: 1200px;

.wrapper {

max-width: @page-width;

}

Page 20: Tomasz Dziuda “LESS – CSS dla leniwych”

Zmienne

Osadzanie zmiennych w wartościach CSS:

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

Page 21: Tomasz Dziuda “LESS – CSS dla leniwych”

Zmienne w CSS

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

Page 22: Tomasz Dziuda “LESS – CSS dla leniwych”

Zagnieżdżanie reguł

Page 23: Tomasz Dziuda “LESS – CSS dla leniwych”

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;

}

=>

Page 24: Tomasz Dziuda “LESS – CSS dla leniwych”

Zagnieżdżanie reguł

=>

.class1 {&.big {

property: value;}

}

.class1.big {property: value;

}

Page 25: Tomasz Dziuda “LESS – CSS dla leniwych”

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!

Page 26: Tomasz Dziuda “LESS – CSS dla leniwych”

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;}

Page 27: Tomasz Dziuda “LESS – CSS dla leniwych”

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ą renderowania się strony (głównie urządzenia mobilne)

Page 28: Tomasz Dziuda “LESS – CSS dla leniwych”

Parsowanie CSS w przeglądarkach

Przeglądarki parsują selektory

od prawej do lewej:

#menu li a

Page 29: Tomasz Dziuda “LESS – CSS dla leniwych”

Parsowanie CSS w przeglądarkach

Selektor potomka jest najwolniejszym z selektorów

#menu li a

(trochę) lepiej jest użyć:

#menu > li > a

Page 30: Tomasz Dziuda “LESS – CSS dla leniwych”

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.

Page 32: Tomasz Dziuda “LESS – CSS dla leniwych”

Operacje matematyczne

@a: 20px;

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

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

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

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

Page 33: Tomasz Dziuda “LESS – CSS dla leniwych”

CSS i calc()

width: calc(100% - 20px);

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

LESS nie uwzględnia rodzaju użytych jednostek

Page 34: Tomasz Dziuda “LESS – CSS dla leniwych”

Mixiny

Page 35: Tomasz Dziuda “LESS – CSS dla leniwych”

Najprostszy mixin

.border-radius {

-webkit-border-radius: 5px;

-moz-border-radius: 5px;

border-radius: 5px;

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

Page 36: Tomasz Dziuda “LESS – CSS dla leniwych”

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)

Page 37: Tomasz Dziuda “LESS – CSS dla leniwych”

Ukrywanie mixinów

Mixiny traktowane są jak klasy CSS chyba, że zrobimy z nich mixiny bezparametrowe:

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

}

Są one wtedy ukrywane w wynikowym kodzie CSS

Page 38: Tomasz Dziuda “LESS – CSS dla leniwych”

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);

}

Page 39: Tomasz Dziuda “LESS – CSS dla leniwych”

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;

}

Page 40: Tomasz Dziuda “LESS – CSS dla leniwych”

Mixiny - !important

Użycie !important po mixinie powoduje automatyczne dodanie !important do wszystkich właściwości w nim użytych

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

Page 41: Tomasz Dziuda “LESS – CSS dla leniwych”

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)

Page 42: Tomasz Dziuda “LESS – CSS dla leniwych”

Selektory w mixinach

W mixinach można umieszczać też całe grupy selektorów, co powoduje, że możemy generować fragmenty kodu zależnie od wartości zmiennych:

.mixin() {

.selector {

property: value;

}

}

Page 43: Tomasz Dziuda “LESS – CSS dla leniwych”

Mixiny - przestrzenie nazw

#package {.mixin() {

...}

}

Użycie:

.cssclass {#package > .mixin;

}

Page 44: Tomasz Dziuda “LESS – CSS dla leniwych”

Funkcje

http://lesscss.org/#reference

Page 45: Tomasz Dziuda “LESS – CSS dla leniwych”

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 (ewentualnie są umieszczane zaraz po @charset)

Page 46: Tomasz Dziuda “LESS – CSS dla leniwych”

Importowanie kodu

Pliki *.less można importować wewnątrz reguł CSS:

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

}

Page 47: Tomasz Dziuda “LESS – CSS dla leniwych”

Przerwa dla gardła ;-)

Page 48: Tomasz Dziuda “LESS – CSS dla leniwych”

Level++

Page 49: Tomasz Dziuda “LESS – CSS dla leniwych”

Przecinki a średnikiParametry można rozdzielać przecinkami lub średnikami, przy czym średniki są bezpieczniejsze:

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

}

Na końcu parametru z przecinkami można dodać średnik aby był traktowany jako jeden argument:

.test(a, b, c;);

Page 50: Tomasz Dziuda “LESS – CSS dla leniwych”

Drugi sposób na przecinki

~”text”

Ważne!

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

Page 51: Tomasz Dziuda “LESS – CSS dla leniwych”

Problemy z calc()

calc(~”WYRAŻENIE”)

zamiast

calc(WYRAŻENIE)

Page 52: Tomasz Dziuda “LESS – CSS dla leniwych”

Takie same nazwy mixinów

Możemy zdefiniować kilka mixinów o tej samej nazwie - użyte zostaną wszystkie mixiny, które mają odpowiednie argumenty

.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!)

Page 53: Tomasz Dziuda “LESS – CSS dla leniwych”

Złożone argumenty mixinów

@arguments pozwala użyć wartości wszystkich parametrów za jednym zamachem:

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

}

Page 54: Tomasz Dziuda “LESS – CSS dla leniwych”

Mixiny - @rest

LESS pozwala na określenie zmiennej ilości argumentów - tutaj przydaje się zmienna @rest:

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

}

Można też sprawić, że pierwsza zmienna przyjmie dowolny ciąg argumentów:

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

Page 55: Tomasz Dziuda “LESS – CSS dla leniwych”

Mixiny - pattern matching

Jako pierwszy argument mixina możemy podać ciąg znaków - wtedy będzie wymagał do swojego wywołania podania tego ciągu znaków jako pierwszego argumentu:

.margins(mobile; @value: 20px)

.margins(tablet; @value: 30px)

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

Wtedy pierwszy mixin wywoła się gdy:

@mode: mobile;

.margins(@mode);

.margins(@mode; 10px);

Page 56: Tomasz Dziuda “LESS – CSS dla leniwych”

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)

Page 57: Tomasz Dziuda “LESS – CSS dla leniwych”

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;}

=>

Page 58: Tomasz Dziuda “LESS – CSS dla leniwych”

Zmienne nazwy zmiennych

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

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

.wrapper { .colorize(subpage);}

Page 59: Tomasz Dziuda “LESS – CSS dla leniwych”

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);}

Page 60: Tomasz Dziuda “LESS – CSS dla leniwych”

Co dalej?

• LESS się ciągle rozwija - trzeba być na bieżąco ;-)

• Analiza kodu LESS popularnych otwartych projektów

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

• SASS?

Page 61: Tomasz Dziuda “LESS – CSS dla leniwych”

Ź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 ;-)

Page 62: Tomasz Dziuda “LESS – CSS dla leniwych”

Gratis ode mnie ;-)

Mój standardowy zestaw mixinów:

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

Page 63: Tomasz Dziuda “LESS – CSS dla leniwych”

Pytania?

Page 64: Tomasz Dziuda “LESS – CSS dla leniwych”

Dziękuję za uwagę