Jak projektować layouty aplikacji, żeby ułatwić frontendowcom ich kodowanie i oszczędzić problemów z utrzymaniem kodu? Czemu chcemy, aby nasze dizajny były modularne?
Prezentacja wprowadzi Was w świat obiektowego, modularnego CSS.
Frontendowcy dowiedzą się, dlaczego stosujemy konwencje nazewnictwa w CSS oraz jak podejść do kodowania w sposób zorientowany na komponenty (obiekty).
Projektanci poznają korzyści z tworzenia layoutów jako całości zbudowanej z reużywalnych bloków (wspomnianych wcześniej komponentów) oraz jak pomóc sobie przy współpracy z frontendowcami nad aplikacją.
Kod do demonstracyjnej "aplikacji" znajduje się na repozytorium: https://github.com/sztyborek/obiektowy-css-demo
2. O czym będzie ta prezentacja?
• Do czego właściwie służy CSS i jak działa?
• O co chodzi z tym programowaniem obiektowym?
• Czy w CSS można pisać kod „zorientowany obiektowo”? I
dlaczego jest to nieintuicyjne?
• Jak podejść do projektowania layoutów, aby ułatwić programiście
pracę przy budowaniu strony?
• Jakie są podejścia i metodyki pisania „obiektowego” kodu CSS?
sztyborek martasztybor.pl
3. W jakim celu powstał CSS?
• Strona internetowa napisana w języku HTML to tak naprawdę
dokument
• Za pomocą CSS możemy stylować elementy zwykle występujące w
dokumentach oraz formularzach
• CSS ma globalną naturę
• Czy to podejście sprawdza się w przypadku aplikacji i dużych
portali internetowych?
sztyborek martasztybor.pl
4. Cechy CSS
• Dziedziczenie – elementy podrzędne w HTML uzyskują cechy
rodzica
• Kaskadowość
• Specyficzność – zestaw reguł, który ustala, jakie właściwości ma
uzyskać dany element, jeśli kilka selektorów pasuje do danego
elementu w dokumencie
sztyborek martasztybor.pl
6. Nie róbcie tego w domu!
• Użycie takiego kodu będzie kłopotliwe, jeśli dany komponent jest
używany w wielu miejscach aplikacji (brak elastyczności)
• Zbyt duża specyficzność selektorów (kod spaghetti, łatwo
doprowadzić do rozrostu nadpisujących klas)
• Relacja 1:1 selektorów i struktury HTML
• Warto spojrzeć na layout „z lotu ptaka”
• A może pomocne okażą się paradygmaty znane z języków
programowania?
sztyborek martasztybor.pl
7. Programowanie obiektowe
• Żyjemy w świecie obiektów – wszystko, co nas otacza to „obiekty”
• W programowaniu obiektowym klasa to abstrakcja. Służy do opisu
cech i zachowania modelowanego rodzaju obiektów
• Definiujemy modele danych jako klasy obiektów
sztyborek martasztybor.pl
11. Komponenty aplikacji jako obiekty
• Projektując aplikację, aby zachować wizualną spójność tworzymy
powtarzalne wzorce (visual patterns)
• Komponent posiada ściśle zdefiniowane cechy, na które nie ma wpływu jego
umiejscowienie w aplikacji (enkapsulacja)
• Komponent może się składać z innych komponentów (kompozycja)
• W ten sposób możemy budować layout jak z cegiełek albo klocków
• Zaczynamy od najdrobniejszych powtarzających się elementów (np.
przyciski, pola tekstowe), poprzez bardziej złożone (np. menu, komentarze)
kończąc na całych layoutach
sztyborek martasztybor.pl
14. CSS z klasą
• Naszą najpotężniejszą bronią przeciwko bałaganowi w kodzie są selektory
klas
• Klasa wskazuje na rodzaj komponentu (programowanie obiektowe)
• Odseparowujemy strukturę komponentu (HTML) od jego wyglądu (CSS)
• Rozwiązujemy problem ze specyficznością
sztyborek martasztybor.pl
15. Konwencje i metodyki CSS
• Jako konwencje nazewnicze ułatwiają czytanie i rozumienie kodu (kod się
częściowo sam dokumentuje). Zmuszają do bardziej przemyślanego
nazywania klas i przeciwdziałają konfliktom nazw
• Mogą być powiązane z architekturą komponentów w aplikacji – tworzyć
dodatkową warstwę abstrakcji do opisu jej wyglądu
• Bardziej przejrzysty i przemyślany kod prowadzi do mniejszej liczby
powtórzeń deklaracji. Krótszy plik CSS to szybsze ładowanie stylów na
stronie.
sztyborek martasztybor.pl
17. Object Oriented CSS (OOCSS)
• Obiekt rozumiemy jako kawałek kodu HTML wraz z odpowiadającymi mu
klasami
• Separacja struktury od stylu
• Separacja kontenerów od ich zawartości
sztyborek martasztybor.pl
20. Block Element Modifier (BEM)
• Blok, Element, Modyfikator
• Blok jest elementem nadrzędnym, wskazuje na komponent
• Element jest częścią składową bloku (subkomponent)
• Modyfikator określa wariant danego komponentu
sztyborek martasztybor.pl
21. Block Element Modifier (BEM)
• .block – nazwa klasy określająca blok
• .block__element – nazwa klasy określająca element
• .block—modifier – nazwa klasy określająca modyfikator
sztyborek martasztybor.pl
23. Jak, będąc projektantem, mogę tworzyć „obiektowe”
layouty?
• Traktuj aplikację jako zbiór pasujących do siebie i reużywalnych
komponentów
• Twórz spójny język wizualny
• Przygotuj UI kit lub bibliotekę komponentów (component library) dla
programisty
sztyborek martasztybor.pl