SlideShare una empresa de Scribd logo
1 de 63
Descargar para leer sin conexión
CSS Workflow
Czyli jak pracować z CSS-em
Michał Strześniewski
Lead Web Developer
KERRIS Group
Poznajmy się!
Kto z was pracuje jako Frontend Developer?
Czy ktoś z was programuje również w innym
języku?
Czy ktoś z was uczęszcza(ł) na / skończył studia
informatyczne?
Czy korzystacie z preprocesorów CSS?
Kto z was słyszał o metodologii BEM
A kto z niej na co dzień korzysta?
Plan prelekcji
Preprocesory CSS
Metodologia BEM
Zasady tworzenia dobrego kodu
Preprocesory CSS
Czym są preprocesory?
Jaki mamy wybór?
Less
Stylus
Post CSS
Sass/Scss
Rozszerzenia które oferuje preprocesor.
Zmienne
// Colors
$primaryColor: #fff;
$secondaryColor: #000;
// Borders
$borderWidth: 2px;
$borderRadius: 3px;
.demo{
background: $primaryColor;
color: $secondaryColor;
boder: $borderWidth $secondaryColor solid;
border-radius: $borderRadius;
}
Zagnieżdzenia
.demo{
background: $primaryColor;
.element{
color: $secondaryColor;
}
&:before{
content: "<<<";
}
&:after{
content: ">>>";
}
}
Importy
/*
Theme Name: Theme
Theme URI: http://kerris.pl/
Description: WordPress Theme
Author: KERRIS Group | Michał Strześniewski
*/
@import 'tools/mixins';
@import 'base/variables';
@import 'base/reset';
@import 'base/base';
@import 'base/grid';
@import 'base/typography';
@import 'base/buttons';
@import 'elements/header';
@import 'elements/main';
@import 'elements/footer';
@import 'responsive/responsive';
Obliczenia
//Numeric operations
$addition: 10px + 2px;
$substraction: 5px - 3px;
$negation: -$margin;
$division: $width/2;
$multiplication: 1234px * 5;
//Color operations
p{
color: #010203 + #040506; // #050709
background: #010203 * 2; //#020406
}
Mixiny
@mixin font-size($size) {
font-size: $size;
font-size: remCalc($size);
}
@mixin font($size: 14px,$weight: 400,$opacity: 1,$color: #fff){
@include font-size($size);
font-weight: $weight;
color:rgba($color,$opacity);
line-height: 1em;
}
Funkcje
@function remCalc($size) {
$remSize: $size / $htmlFontSize;
@return $remSize * 1rem;
}
@function elementsList($element, $from:1, $to:6) {
@if $from == $to {
@return '#{$element}#{$from}';
} @else {
@return '#{$element}#{$from}, ' +
elementsList($element, $from+1, $to);
}
}
Listy
//List
$list: 1px 2px 3px;
$commaSeparatedList: 1px, 2px, 3px;
$oneElementList: 1px;
$emptyList: ();
$listOfLists: (1px 2px) (3px 4px);
//Map - Association List
$map: (one: 1px, two: 2px, three: 3px);
Pętle
// For loop
@for $i from 1 through 3 {
.item-#{$i} {
width: 2em * $i;
}
}
// Foreach loop
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {
#{$header} {
font-size: $size;
}
}
// While loop
$i: 6;
@while $i > 0 {
.item-#{$i} {
width: 2em * $i;
}
$i: $i - 2;
}
Rozszerzony zakres funkcji
.demo{
$color: #f00;
$color2: rgba($color,0.5); // rgba(255, 0, 0, 0.5);
$color3: opacify($color2,0.3); // rgba(255, 0, 0, 0.8);
$color4: transparentize($color3,0.2);// rgba(255, 0, 0, 0.6);
$hsl: hsl(0, 100%, 50%); //#f00
$newNumber: round($number);
$newNumber2: ceil($number);
$newNumber3: floor($number);
$mapElement: map-get($map, $key);
$twoListTogether: join($list1, $list2);
$elemPosition: index($list, $value);
$len: str-length($string);
$newString: str-insert($string, $insert, $index);
$upper: to-upper-case($string);
}
Usprawnienia optymalizacji generowanego kodu
:nested
:expanded
:compact
:compressed
Metodologia BEM
Co to jest BEM?
.block__element--modifier
Block
Samodzielny, znaczącący element strony.
Zarówno całe duże sekcje jak i mniejsze fragmenty
o ile ich wyodrębnienie jest uzasadnione.
Block
.header{}
.menu{}
.content{}
.article{}
.heading{}
.form{}
.input{}
.footer{}
Element
Fragment bloku który nie istenieje bez swojego
rodzica.
Jest w stu procentach zależny od bloku w którym
się znajduje.
Element
.header__logo{}
.menu__item{}
.footer__copyright{}
.form__row{}
Modifier
Flaga która zmienia wygląd bądź zachowanie
bloków i elementów.
Może być przypisywany do elementu jak i
bezpośrednio do bloku.
Modifier
.header--fixed{}
.menu__item--highlighted{}
.heading--secondary{}
.input--disabled{}
.article--sticky{}
Zalety korzystania z BEM
Modularność.
Reużywalność.
Przejrzysta struktura.
Modularność.
Style bloków nie mieszają się ze sobą.
Brak problemów związanych z kaskadowością
styli.
Możliwość wykorzystania całych bloków w innych
projektach.
Reużywalność.
Przy dobrym rozplanowaniu bloków na stronie i
wykorzystywaniu tych samych bloków w kilku
miejscach znacząco zmniejszamy ilość pisanego
kodu.
Z wykorzystaniem dodatkowych narzędzi takich
jak KSS możemy tworzyć w pełni
zautomatyzowane guideline'y.
To podejście nazywamy
Style Guide Driven Development.
Przejrzysta struktura.
Dzięki metodologii BEM tworzymy kod o solidnej
strukturze. Łatwej do zrozumienia i odczytania
przez współpracowników.
BEM in use
<button class="button">Tekst</button>
<button class="button button--success">Tekst</button>
<button class="button button--success button--big">Tekst</button>
.button{
...
color: black;
background: white;
padding:1em;
}
.button--success{
background: green;
color: white;
}
.button--big{
padding:2em;
}
BEM w SCSS
<ul class="menu">
<li class="menu__item"></li>
<li class="menu__item menu__item--highlighted"></li>
</ul>
.menu{
...
&__item{
...
&--highlighted{
...
}
}
}
A co jeżeli nie BEM?
OOCSS
SMACSS
SUITCSS
Atomic
Użycie którejkolwiek z tych metod zapewnia
polepszenie waszej pracy z CSSem
Zasady tworzenia dobrego
kodu
DRY
Nie powtarzaj się!
Należy unikać zbędnych powtórzeń w kodzie
Należy utrzymywać kod w takiej postaci aby nie
było konieczności zmiany tej samej informacji w
wielu miejscach
Nie powtarzaj się!
Jedno źródło prawdy
Każda informacja przekazywana do systemu musi
mieć dokładnie jedną reprezentację w kodzie.
Zmiana informacji powinna wymagać edycji w
dokładnie jednym miejscu.
Jedno źródło prawdy
/*********
* Fonts *
*********/
$htmlFontSize: 14px;
$primaryFont: 'proxima-nova', Arial, sans-serif;
$secondaryFont: 'Times New Roman', Times, serif;
/**********
* Colors *
**********/
$primaryColor: #3E5567;
$secondaryColor: #E76855;
$fontColor: #3E5567;
$fontColor2: #fff;
$bgColor: #fff;
$borderColor: #E76855;
Nie powtarzaj się! / Jedno źródło
prawdy
Używaj zmiennych do przechowywania
powtarzajacych się informacji
Twórz mixiny do wykonywania
powtarzalnych fragmentów
Pamiętaj że nie każde powtórzenie
w kodzie jest złe.
SOLID
SOLID
Single responsibility principle
(Zasada jednej odpowiedzialności)
Open/closed principle
(Zasada otwarte-zamknięte)
Liskov substitution principle
(Zasada podstawienia Liskov)
Interface segregation principle
(Zasada segregacji interfejsów)
Dependency inversion principle
(Zasada odwrócenia zależności)
Zasada jednej odpowiedzialności
Klasa powinna być odpowiedzialna za dokładnie
jedną rzecz.
Nigdy nie powinien istnieć więcej niż jeden powód
do modyfikacji klasy
Należy podzielić problem na najmniejsze możliwe
części
Zasada jednej odpowiedzialności
@import 'elements/header';
@import 'elements/main';
@import 'elements/menu';
@import 'elements/post-type';
@import 'elements/sidebar';
@import 'elements/breadcrumbs';
@import 'elements/layout';
@import 'elements/page';
@import 'elements/404';
@import 'elements/taxonomy';
@import 'elements/single';
@import 'elements/footer';
Zasada otwarte-zamknięte
Oprogramowanie powinno być otwarte na
rozszerzenia ale zamknięte na zmiany.
Przy zmianie wymagań nie powinien być
zmieniany stary działający kod, ale dodawany
nowy, który rozszerza zachowania
Zasada otwarte-zamknięte
.button{
...
padding: 1em 2em;
}
.button--large{
padding: 1.5em 2.5em;
}
Zasada podstawienia Liskov
Klasa która dziedziczy po innej klasie może być
podstawiona za swojego rodzica bez
konsekwencji.
W CSS jeżeli tworzymy klasę która jest
odpowiedzialna za kolory to inna klasa która
rozszerza jej właściwości również powinna
odpowiadać za kolory.
Jeżeli tworzymy modyfikator koloru to nie
powinnien on wpływać na inne właściwości.
Zasada podstawienia Liskov
.button{
color: green;
padding: 1em 2em;
}
.button--large{
padding: 1.5em 2.5em;
}
.button--success{
color: red;
}
Zasada segregacji interfejsów
Wiele dedykowanych interfejsów jest lepsze niż
jeden ogólny.
Jeżeli 2 bloki na stonie dotyczą tego samego (np.
artykuł) ale różnią się znacząco, należy stworzyć 2
oddzielne klasy stylizujące.
Przesadane dążenie do reużywalności elementów
jet anty-wzorcem.
Zasada odwrócenia zależności
Bloki podrzędne nie mogą zależeć od
nadrzędnych.
Kod powinien być podzielony na małe
samodzielne fragmenty
Zasada odwrócenia zależności
.group-title{
}
SOLID
Single responsibility principle
(Zasada jednej odpowiedzialności)
Open/closed principle
(Zasada otwarte-zamknięte)
Liskov substitution principle
(Zasada podstawienia Liskov)
Interface segregation principle
(Zasada segregacji interfejsów)
Dependency inversion principle
(Zasada odwrócenia zależności)
Separacja zagadnień
Elementy systemu powinny mieć rozłączne i
osobliwe zastosowanie.
Żaden z elementów nie powinien współdzielić
odpowiedzialności z innym elementem
Zmiana w jednej warstwie danych nie może
wpływać na drugą
Separacja zagadnień w CSS
Przypisuj style jedynie do klas CSS
Nie używaj DOMu jako selektora CSS
Nie przypisuj funkcji javascriptowych do klas
używanych przez CSS
Nie przypisuj CSS do atrybutów HTML
przechowujących wartości
Separacja zagadnień
<nav class="site-nav js-site-nav" role="navigation">
<ul class="site-nav__list">
<li class="site-nav__item">
<a class="site-nav__link is-active">...</a>
</li>
<li class="site-nav__item">
<a class="site-nav__link">...</a>
</li>
</ul>
</nav>
Bibliografia
Dokumentacja Sass
http://sass-lang.com/documentation/file.SASS_REFERENCE.html
Get BEM
http://getbem.com/
CSS for Software Engineers for CSS Developers –
Harry Roberts / Front-Trends 2016
https://www.youtube.com/watch?v=wFn5nel3j6w
SOLID CSS
http://blog.millermedeiros.com/solid-css/
CSS Workflow
Czyli jak pracować z CSS-em

Más contenido relacionado

Similar a CSS Workflow, czyli jak pracować z CSS-em?

Gavern Framework - Joomla! Day Poland 2013
Gavern Framework - Joomla! Day Poland 2013Gavern Framework - Joomla! Day Poland 2013
Gavern Framework - Joomla! Day Poland 2013
Bartłomiej Krztuk
 

Similar a CSS Workflow, czyli jak pracować z CSS-em? (20)

Gavern Framework - Joomla! Day Poland 2013
Gavern Framework - Joomla! Day Poland 2013Gavern Framework - Joomla! Day Poland 2013
Gavern Framework - Joomla! Day Poland 2013
 
Dostosowanie I Personalizacja Aplikacji Web
Dostosowanie I Personalizacja Aplikacji WebDostosowanie I Personalizacja Aplikacji Web
Dostosowanie I Personalizacja Aplikacji Web
 
Kaskadowe arkusze styli
Kaskadowe arkusze styliKaskadowe arkusze styli
Kaskadowe arkusze styli
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.
 
XHTML & CSS, WAI
XHTML & CSS, WAIXHTML & CSS, WAI
XHTML & CSS, WAI
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówContributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
Architektura CSS - dobre i złe praktyki
Architektura CSS - dobre i złe praktykiArchitektura CSS - dobre i złe praktyki
Architektura CSS - dobre i złe praktyki
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać
 
WordUp Wrocław #3 2015
WordUp Wrocław #3 2015WordUp Wrocław #3 2015
WordUp Wrocław #3 2015
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Podstawy PHP
Podstawy PHPPodstawy PHP
Podstawy PHP
 

Más de WordCamp Polska

Más de WordCamp Polska (16)

Budowanie skalowalnej architektury serwerowej pod WordPressa
Budowanie skalowalnej architektury serwerowej pod WordPressaBudowanie skalowalnej architektury serwerowej pod WordPressa
Budowanie skalowalnej architektury serwerowej pod WordPressa
 
Optymalizacja pracy front-end developera
Optymalizacja pracy front-end developeraOptymalizacja pracy front-end developera
Optymalizacja pracy front-end developera
 
Progresywny WordPress
Progresywny WordPressProgresywny WordPress
Progresywny WordPress
 
Krótki poradnik o tym jak rozmawiać o pieniądzach
Krótki poradnik o tym jak rozmawiać o pieniądzachKrótki poradnik o tym jak rozmawiać o pieniądzach
Krótki poradnik o tym jak rozmawiać o pieniądzach
 
Dream life, czyli jak WordPress i społeczność pomogły mi zostać cyfrowym nomadą
Dream life, czyli jak WordPress i społeczność pomogły mi zostać cyfrowym nomadąDream life, czyli jak WordPress i społeczność pomogły mi zostać cyfrowym nomadą
Dream life, czyli jak WordPress i społeczność pomogły mi zostać cyfrowym nomadą
 
7 Grzechów Głównych, czyli jak nie prowadzić (i nie ulepszać) strony opartej ...
7 Grzechów Głównych, czyli jak nie prowadzić (i nie ulepszać) strony opartej ...7 Grzechów Głównych, czyli jak nie prowadzić (i nie ulepszać) strony opartej ...
7 Grzechów Głównych, czyli jak nie prowadzić (i nie ulepszać) strony opartej ...
 
Nie pytaj, co WordPress może zrobić dla Ciebie, zapytaj, co Ty możesz zrobić ...
Nie pytaj, co WordPress może zrobić dla Ciebie, zapytaj, co Ty możesz zrobić ...Nie pytaj, co WordPress może zrobić dla Ciebie, zapytaj, co Ty możesz zrobić ...
Nie pytaj, co WordPress może zrobić dla Ciebie, zapytaj, co Ty możesz zrobić ...
 
Wpisy, które chce się czytać, czyli efektywna komunikacja na blogu
Wpisy, które chce się czytać, czyli efektywna komunikacja na bloguWpisy, które chce się czytać, czyli efektywna komunikacja na blogu
Wpisy, które chce się czytać, czyli efektywna komunikacja na blogu
 
Gdzie prawo krępuje social media?
Gdzie prawo krępuje social media?Gdzie prawo krępuje social media?
Gdzie prawo krępuje social media?
 
Jak zarabiać dobre pieniądze na WordPressie
Jak zarabiać dobre pieniądze na WordPressieJak zarabiać dobre pieniądze na WordPressie
Jak zarabiać dobre pieniądze na WordPressie
 
Moving from the agency with service-model to service/product-model by develop...
Moving from the agency with service-model to service/product-model by develop...Moving from the agency with service-model to service/product-model by develop...
Moving from the agency with service-model to service/product-model by develop...
 
Zarabiaj na swojej wiedzy - sprzedaż treści premium na WooCommerce
Zarabiaj na swojej wiedzy - sprzedaż treści premium na WooCommerceZarabiaj na swojej wiedzy - sprzedaż treści premium na WooCommerce
Zarabiaj na swojej wiedzy - sprzedaż treści premium na WooCommerce
 
Kompletujemy witrynę na WordPressie. Przegląd technologii
Kompletujemy witrynę na WordPressie. Przegląd technologiiKompletujemy witrynę na WordPressie. Przegląd technologii
Kompletujemy witrynę na WordPressie. Przegląd technologii
 
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressieObiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
 
Od zera do Automattica
Od zera do AutomatticaOd zera do Automattica
Od zera do Automattica
 
6 sposobów, aby zacząć utrzymywać się z blogowania
6 sposobów, aby zacząć utrzymywać się z blogowania6 sposobów, aby zacząć utrzymywać się z blogowania
6 sposobów, aby zacząć utrzymywać się z blogowania
 

CSS Workflow, czyli jak pracować z CSS-em?