sobota, 3 lutego 2018

Z艂e praktyki w CSS - jak ich unikn膮膰


CSS pozwala na okre艣lanie wygl膮du poszczeg贸lnych element贸w na stronie. Moim zdaniem, praca z CSS, po poznaniu jego podstaw, jest bardzo przyjemna i daje mn贸stwo satysfakcji. Niestety, ale gdy Twoja strona si臋 rozrasta i ilo艣膰 kodu CSS ro艣nie, praca staje si臋 coraz trudniejsza. Kod staje si臋 nieprzewidywalny, a dodawanie kolejnych funkcjonalno艣ci, wymaga ci膮g艂ego przeszukiwania arkusza. Ten poradnik, pozwoli Ci si臋 uchroni膰 przed problemami, kt贸re wychodz膮 dopiero wtedy, gdy Tw贸j projekt staje si臋 coraz bardziej rozbudowany.

Nadpisywanie styl贸w frameworka

Gdy nadpiszesz domy艣lny styl, framework przestanie zachowywa膰 si臋 tak, jak chcia艂 to autor. Prowadzi to do problem贸w, przy rozwoju aplikacji lub strony internetowej. Aby wprowadzi膰 modyfikacj臋, dodaj dodatkow膮 klas臋 - modyfikator.

.container {
    width: 500px !important; // ca艂a reszta strony psuje si臋
}


Aby zmniejszy膰 szeroko艣膰 strony, dodaj osobn膮 klas臋.
.container-smaller {
    width: 500px;
}

U偶ywanie important

Kod nadziany !importantami jak dobra kasza skwarkami, jest zwykle pisany przez osoby, kt贸re nie rozumiej膮 zasad kaskadowo艣ci styl贸w CSS. Je艣li nie musisz, nie u偶ywaj znacznika important!.

Przed zastosowaniem !important, sprawd藕 specyficzno艣膰 danego elementu i pomy艣l, jak j膮 nadpisa膰.

U偶ywaj膮c important, dzia艂asz kr贸tkowzrocznie i nadajesz elementowi styl, kt贸ry b臋dzie bardzo trudno zmieni膰. W przysz艂o艣ci, gdy kod CSS si臋 zmieni, sprawi to problemy.

Important jest cz臋sto wykorzystywany przez tw贸rc贸w plugin贸w czy szablon贸w CSS, chc膮cych mie膰 pewno艣膰, 偶e ich styl zostanie nadany.

Jak dzia艂a important?

Important zwi臋ksza specyficzno艣膰 w taki spos贸b, 偶e nie mo偶na nadpisa膰 elementu w inny spos贸b, jak tylko przez u偶ywanie jeszcze bardziej specyficznego stylu (tak偶e zawieraj膮cego !important). Je艣li musisz nadpisywa膰 style z u偶yciem !important, pomy艣l o przekszta艂ceniu kodu w taki spos贸b, by unikn膮膰 stosowania tej deklaracji.


https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity

Stylowanie po tagach lub Id elementu, zamiast po jego klasie

Struktura HTML strony mo偶e si臋 zmieni膰, dlatego lepiej jest u偶ywa膰 reu偶ywalnych klas. Jako programi艣ci front-end, cz臋sto zapominamy o tym, 偶e style CSS mog膮 by膰 wykorzystywane tak偶e w aplikacjach, kt贸re nie wykorzystuj膮 tag贸w HTML. Przyk艂adem jest React Native.

Elementy semantyczne (np <main>, <article>, <header>, <Hx>) na stronie HTML, maj膮 odzwierciedla膰 przeznaczenie danego elementu, a nie jego wygl膮d. Niekt贸re dobrze przemy艣lane frameworki, usuwaj膮 domy艣lne stylowanie z element贸w, a nast臋pnie, pozwalaj膮 na dodanie w艂asnych styl贸w jedynie za pomoc膮 klas. Na tym pomy艣le opiera si臋 mi臋dzy innymi Bulma.css.

Element z danym Id mo偶e znajdowa膰 si臋 na stronie tylko raz, a je艣li znajduje si臋 na stronie wi臋cej razy, mo偶e powodowa膰 to nieoczekiwane dzia艂anie na przyk艂ad JS.

Tworz膮c stron臋 internetow膮, staraj si臋 komponowa膰 j膮 z reu偶ywalnych element贸w, kt贸re b臋dzie mo偶na wykorzysta膰 na wielu podstronach. Wyklucza to u偶ywanie stylowania za pomoc膮 id.

Przyk艂ad - chcesz, aby input na stronie oznaczony okre艣lonym id, mia艂 wi臋kszy margines od innych input贸w. Pomy艣l jednak, czy nie lepiej jest zastosowa膰 osobnej klasy i w przysz艂o艣ci, wykorzysta膰 j膮 do tworzenia element贸w o podobnym stylowaniu.

Przyk艂ad
/* nu nu nu */
header {
    font-size: 50px;
}

/* lepiej */
.header { /* stylujemy po klasie, nie po tagu */
    font-size: 50px
}

Stylowanie inline - bardzo trudno jest je potem nadpisa膰

Stylowanie inline mo偶e przybiera膰 dwie, bardzo k艂opotliwe formy.
Po pierwsze, style inline s膮 nadawane przez kod Javascriptu.
Drugim sposobem jest wpisanie ich “na sztywno” w element, w celu jego wystylowania. Jedna i druga metoda, powoduje problemy z p贸藕niejszym utrzymaniem kodu.
Style inline s膮 stosowane dlatego, 偶e daj膮 natychmiastowe efekty i oszcz臋dzaj膮 nam wysi艂ku umys艂owego, przy wybieraniu element贸w CSS za pomoc膮 selektor贸w. Niestety, ale z czasem, musisz coraz d艂u偶ej zastanawia膰 si臋 nad tym, jak nadpisa膰 takie style.
Jeszcze jedn膮 wad膮 styl贸w inline jest to, 偶e nie pozwalaj膮 one na wielokrotne wykorzystywanie kodu.
Stylowanie przypominaj膮ce inlinowe mo偶na “osi膮gn膮膰” tak偶e za pomoc膮 klas CSS, co r贸wnie偶 nale偶y do z艂ych praktyk.
Framework CSS Bootstrap, umo偶liwia stosowanie takich klas, jak :
float-left
pull-left
Metodologia Atomic CSS zaleca stosowanie takich klas, jak
mt-10 /* margin-top: 10px */
pt-10 /* padding-top: 10px */


W praktyce, wykorzystanie takiego kodu, nie r贸偶ni si臋 niczym od stylowania inlinowego i nale偶y go unika膰!

Stosowanie szczeg贸艂owych selektor贸w, gdy mo偶na skorzysta膰 z ich og贸lniejszej wersji

Kod pocz膮tkuj膮cych deweloper贸w cz臋sto zyskuje na jako艣ci, po usuni臋ciu wielu warto艣ci niepotrzebnie wpisanych w bardzo szczeg贸艂owo okre艣lone elementy. Praktyka podpowiada, 偶e zanim napiszemy zbyt szczeg贸艂owy selektor CSS, powinni艣my przejrze膰 inne elementy strony i prawdopodobnie, skorzysta膰 z warto艣ci ju偶 zdefiniowanych w kodzie.

Przyk艂ady

Na stronie znajduje si臋 menu i ka偶dy jego element li ma nadane inne stylowanie, na przyk艂ad za pomoc膮 osobnej klasy lub w艂a艣ciwo艣ci nth-child.

<ul>
  <li class=”menu-item-1”>Lorem</li>
  <li class=”menu-item-2”>Ipsum</li>
  <li class=”menu-item-3”>Dolor</li>
<ul>

Bardzo prawdopodobne jest to, 偶e programista w takiej sytuacji m贸g艂by wykorzysta膰 jedn膮 (a nie trzy) klas臋 CSS, poniewa偶 poszczeg贸lne elementy menu, zwykle wygl膮daj膮 tak samo.

Na ca艂ej stronie u偶ywana jest czcionka Arial. Powinna ona zosta膰 nadana ca艂o艣ciowo dla strony, a nie, dla ka偶dego elementu z osobna.

/* plik CSS
/ nu nu nu, nie robimy tak
*/

h1 {
    font-family: Arial
}
h2 {
font-family: Arial
}


Podobna zasada dotyczy wi臋kszo艣ci selektor贸w CSS u偶ywanych na stronie, takich, jak font-size, line-height. Powiniene艣 d膮偶y膰 do tworzenia kodu, kt贸ry mo偶na wykorzysta膰 tak偶e w innych miejscach aplikacji.

Magiczne warto艣ci

Przed nadaniem elementowi okre艣lonej wysoko艣ci lub szeroko艣ci, pomy艣l, czy w przysz艂o艣ci si臋 on nie zmieni. Praktyka pokazuje, 偶e ustawienie jakiej艣 warto艣ci na sztywno, niemal zawsze powoduje kolejne problemy w przysz艂o艣ci.

Przyk艂ad:
W szablonie PSD, dostajesz element, kt贸ry ma 500 na 500 pixeli i zajmuje mniej wi臋cej p贸艂 szeroko艣ci ekranu. Je艣li nadasz mu takie wymiary, po dodaniu wi臋kszej ilo艣ci tre艣ci, element “rozwali si臋”. Z kolei, ustawienie na sztywno szeroko艣ci, powoduje kolejny problem - przy zmniejszeniu okna przegl膮darki, elementy przestaj膮 si臋 mie艣ci膰.
Znacznie lepszym rozwi膮zaniem, jest nadanie elementowi szeroko艣ci 50% na du偶ym ekranie i ustawienie breakpointu za pomoc膮 media queries, by na w膮skim ekranie, zajmowa艂 on na przyk艂ad 100% szeroko艣ci.
Warto艣ci ustawione za pomoc膮 warto艣ci bezwzgl臋dnych tak偶e mog膮 si臋 przyda膰 podczas tworzenia strony. Element opisany na przyk艂adzie, mo偶e mie膰 z ka偶dej strony padding 15 pikseli, kt贸ry b臋dzie dobrze wygl膮da艂 zar贸wno na ma艂ym, jak i na du偶ym ekranie.

Du偶o wi臋cej na ten temat dowiesz si臋 z ksi膮偶ki Ethana Marcotte “Responsive Web Design”.

Wymy艣lanie ko艂a na nowo, czyli stosowanie w艂asnych rozwi膮za艅, gdy mamy ju偶 gotowe we frameworku lub istniej膮cym kodzie.

Przyk艂ad - tworzenie w艂asnego okna modalnego na stronie, kt贸ra u偶ywa ju偶 Bootstrapa. Stosowanie gotowych rozwi膮za艅 pozwala na szybsz膮 prac臋 oraz wyeliminowanie nieoczekiwanych b艂臋d贸w, kt贸re pojawiaj膮 si臋 podczas tworzenia kodu od nowa.

Z czasem, poznasz coraz wi臋cej bibliotek, kt贸re rozwi膮zuj膮 popularne problemy front-endowe na r贸偶nych poziomach trudno艣ci. Je艣li znajdziesz na cudzej stronie jak膮艣 interesuj膮c膮 funkcj臋, mo偶esz podejrze膰 jej kod lub sprawdzi膰, jaka jest nazwa pluginu czy biblioteki, kt贸ra j膮 obs艂uguje. Nie wpadnij jednak w nawyk, dodawania do prostych stron kilku r贸偶nych bibliotek wa偶膮cych po kilkana艣cie kilobajt贸w, kt贸re obs艂uguj膮 tylko jeden ficzer.

Je艣li u偶ywasz du偶ych bibliotek, takich, jak na przyk艂ad Bootstrap, powiniene艣 dobrze pozna膰 jego mo偶liwo艣ci. By膰 mo偶e oka偶e si臋, 偶e do wykonania kolejnej funkcjonalno艣ci, nie musisz dodawa膰 jeszcze jednej biblioteki, poniewa偶 jej obs艂uga, ju偶 jest wbudowana.

Wymy艣lanie ko艂a na nowo, dotyczy tak偶e niewielkich zada艅, z kt贸rymi zmagamy si臋 w codziennej pracy. Powracaj膮c do przyk艂adu Bootstrapa - posiada on wbudowane klasy, rozwi膮zuj膮ce takie problemy, jak:


  • Wy艣rodkowywanie element贸w
  • Zmniejszanie element贸w takich, jak <img>, by mie艣ci艂y si臋 na wszystkich rozdzielczo艣ciach ekranu.
  • Usuwanie r贸偶nic w wy艣wietlaniu r贸偶nych element贸w pod wieloma przegl膮darkami
  • Zachowanie konsekwentnego stylowania strony we wszystkich miejscach.

Umiej臋tnie wykorzystuj膮c te klasy, mo偶esz skupi膰 si臋 na wa偶niejszych zadaniach, ni偶 ci膮g艂e zastanawianie si臋, dlaczego Tw贸j kod CSS nie dzia艂a. Znacznie przy艣piesza to tworzenie strony WWW.

Nadmierne zagnie偶d偶anie selektor贸w

Je艣li tw贸j selektor wygl膮da mniej wiecej tak:

div.post-body.view.view--loaded > div.post-body__body > div > p:nth-child(35) {
    color: red;
}

to ka偶da zmiana w strukturze HTML, sprawi, 偶e przestanie on dzia艂a膰. Selektory nie powinny by膰 zagnie偶d偶one bardziej ni偶 do 2 - 3 element贸w, a je艣li jest ich wi臋cej, znacznie ro艣nie wysi艂ek zwi膮zany ze zrozumieniem kodu.
Warto na to zwraca膰 szczeg贸ln膮 uwag臋, podczas korzystania z preprocesor贸w CSS, kt贸re u艂atwiaj膮 tworzenie zagnie偶d偶e艅.

Mniejsza ilo艣膰 zagnie偶d偶e艅 w kodzie, to tak偶e szybsze dzia艂anie przegl膮darki u偶ytkownika, poniewa偶 ma ona do przeparsowania, mniejsz膮 ilo艣膰 selektor贸w.
W wielu przypadkach pracy z CSS, mo偶na unikn膮膰 stosowania mocno zagnie偶d偶onych selektor贸w i zamiast nich, u偶y膰 pseudoselektora.

Og贸lny ba艂agan w arkuszach styl贸w

Arkusze CSS potrafi膮 si臋 bardzo szybko rozrasta膰, co prowadzi do sytuacji, w kt贸rej coraz trudniej jest dodawa膰 lub zmienia膰 konkretne warto艣ci. Wzrost z艂o偶ono艣ci kodu, to jeden z najgorszych wrog贸w programisty, dlatego powiniene艣 konsekwentnie dba膰 o porz膮dek w arkuszach.

Kilka porad:


  • Utrzymuj logiczny podzia艂 styl贸w - arkusz mo偶esz podzieli膰 komentarzami na sekcje, odnosz膮ce si臋 do r贸偶nych element贸w
  • Przed dodaniem nowego znacznika CSS lub wykorzystaniem klasy ju偶 dodanej w HTML, przeszukaj ca艂y arkusz styl贸w i sprawd藕, czy nie mo偶esz rozbudowa膰 ju偶 istniej膮cego selektora. Nie ma sensu dodawanie go ponownie, je艣li ju偶 istnieje.
  • Zapoznaj si臋 z metodologiami tworzenia CSS, takimi, jak BEM czy SMACSS.
  • W wi臋kszym projekcie, rozwa偶 zastosowanie preprocesora CSS, kt贸ry umo偶liwia rozdzielenie kodu na kilka arkuszy, 艂膮cz膮cych si臋 w jeden po kompilacji.
  • Dokonuj refaktoringu arkuszy styl贸w

Brak komentarzy:

Prze艣lij komentarz