Większość z nas pisząc kod html pisze go z palca, ewentualnie korzysta z dobrodziejstw jakie dostarcza IDE. Jednak niewiele osób wykorzystuje możliwości jakie daje nam Emmet, który znajduje się praktycznie w każdym IDE. Brak znajomości Emmet-a zmusza nas do bezsensownego klepania w klawiaturę, czegoś co mogło by zostać wygenerowane :(
Otóż Emmet to nic innego jak umowny sposób zapisu tekstu, który zostanie przekształcony przez IDE lub jakiś plugin na kod html. Najlepiej zobrazuje to bardzo prosty przykład.
Powyższy przykład obrazuje chyba w najprostszy sposób ideę jaką kieruje się Emmet. Czyli mamy w tym przypadku test div
, który po naciśnięciu klawisza Tab powoduje zmianę tekstu na <div></div>
.
Jeśli myślicie sobie teraz, co ten koleś pierdzieli, przecież takie podpowiedzi są w każdym porządnym IDE. Zaś niektóre zaawansowane edytory tekstu mają tę funkcję, czy to wbudowaną, czy też dostarczaną przez pluginy.
Jednak takich podpowiedzi nie należy mylić z Emmet-em, bowiem w jego przypadku wyglądało by to następująco.
Gdyby jednak nie przekonywało was powyższe porównanie, przecież czas wprowadzania kodu jest bardzo porównywalny. To może poniższy przykład będzie ciekawszy ;)
Skąd go wziąć ?? Rozwiązanie to znajdziecie niemal w każdym IDE, które wspiera html-a. Jednak w przypadku niektórych edytorów tekstu oraz IDE ich filozofia mówi, że dodatkowe rzeczy są dostarczane jako pluginy. Jest to jak najbardziej w porządku, i możecie znaleźć interesujący was plugin na stronie Emmet-a w sekcji Download.
Poniżej znajdziecie najczęściej używane prze ze mnie zapisy Emmet-a. Ich znajomość pozwoli wam znacznie przyspieszyć pisanie kodu html. A że jestem zwolennikiem jak najłatwiejszego przekazywania wiedzy, więc każdy zapis będzie poparty stosowną animacją, która jak mam nadzieję ułatwi przyswojenie wiedzy.
Zaczynamy od samych podstaw, czyli możliwości przypisania klasy do znacznika html. Robimy to poprzez zastosowanie składni nazwa_znacznika
następnie .
i nazwa_klasy
. Zobaczmy w praktyce jak to wygląda:
div.class_name
Możliwe jest dodawanie wielu klas poprzez dodawanie kolejnych po .
(kropce).
div.class_name.class_name2
Podobnie jak w przypadku klas, składnia sprowadza się do nazwa_elementu
następnie #
po którym podajemy identyfikator
. Co w praktyce może wyglądać następująco:
div#example
Wiedząc jak zapisać znacznik html wzbogacony o klasę, czy też identyfikator. Możemy pokusić się o stworzenie kombinacji tych elementów. Dodając jednocześnie klasę i identyfikator.
div.class_name#example
Do tej pory rozpatrywaliśmy przypadki w których podawaliśmy zawsze znacznik div
. Następnie dodawaliśmy klasy, czy też identyfikator. Oczywiście możemy używać dowolnych znaczników i wzbogacać je o klasy, identyfikatory czy też atrybuty.
span.class_name
Jednak jeśli znacznikiem, którego chcemy użyć jest div
to możemy go pominąć w zapisie. I tak dodanie klasy wyglądało by następująco:
.class_name
Podobnie w przypadku identyfikatora:
#example
Tworzenie pojedynczych elementów wzbogaconych o klasy czy identyfikator jest fajne. Jednak podobną wydajność otrzymujemy wykorzystując sprawnie auto podpowiedzi IDE. W związku z czym, aby zwiększyć wydajność konieczne jest poznanie bardziej złożonych struktur.
Pierwszą z nich będzie możliwość zagłębiania znaczników w sobie. I na pierwszy ogień idzie bardzo prosta struktura, która w znaczniku div
umieści znacznik p
.
div>p
Teraz nieco bardziej skomplikowana operacja jednak zapewne dość często spotykana. Do znacznika div
dodajemy strukturę ul>li>a
, która często jest nawigacją na stronie.
div.container>ul>li>a
Oczywiście poza tworzeniem struktur zagłębionych mamy możliwość umieszczania znaczników html na tym samy poziomie. Wykorzystujemy do tego celu znak +
(plusa).
div+p
I poniżej połączenie umieszczania znaczników obok siebie oraz zagłębianie.
div.class_name+div#example>p.text
Skoro możliwe jest zagłębianie elementów, to także powinno być możliwe przechodzenie poziom wyżej w stosunku do bieżącego poziomu. I rzeczywiście tak jest, do tego celu wykorzystuje się znak ^
.
header>div>img.logo^nav>ul>li>a
To jest jedna z rzeczy dla której warto korzystać z Emmet-a. W bardzo szybki sposób możecie rozmnożyć elementy lub całe struktury. Zobaczmy jak to działa na prostym przykładzie:
div>p*5
Definiując znaczniki czasem chcemy od razy zdefiniować jakąś treść i tutaj także mamy taką możliwość.
div>p{przykładowa treść}
Fajnie że możemy dodawać treść w znacznikach html, ale przecież często mamy tam Lorem ipsum. I tutaj twórcy także to przewidzieli i możemy wypełnić zawartość znacznika tekstem zastępczym.
div*4>lorem
Poza dodawaniem klas, identyfikatorów do znaczników html-a. Możemy także definiować zawartość atrybutów, jak adres url w znaczniku a
.
div>p>a[href="/"]
Czasem może okazać się, że chcemy stworzyć nieco bardziej skomplikowaną strukturę. I przechodząc pomiędzy poziomami zagłębień robi się dość skomplikowane i mało wygodne. W takich przypadkach powinnismy skorzystać z możliwości grupowania, które do tego celu wykorzystuje nawiasy ()
.
header>(div>img.logo)+(nav>ul>li*4>a)
Takie zapisanie struktury wygląda dużo czytelniej od ewentualnych przejść do poziomów wyżej i ponownych zagłębień.
Emmet pozwala nam na bardzo szybkie wygenerowanie struktury dokumentu html. Możemy skorzystać z jednego znaku !
bądź dość dokładnie określić o jaki typ dokumentu nam chodzi: html:5
, html:xs
, html:4s
oraz kilka innych.
!
html:5
html:xs
html:4s
Skoro jesteśmy przy generowaniu struktury to możemy generować wszelkiej maści znaczniki link
poprzez dodanie informacji po :
(dwukropku) czy ma to być css
, favicon
czy cokolwiek innego.
link:css
link:import
link:favicon
Ostatnią rzeczą o jakiej wspomnę jest możliwość dodania automatycznego numerowania, czy to do klas, identyfikatorów czy czegokolwiek innego. Robi się to w bardzo prosty sposób, wstawiamy znak $
(dolara).
div#example_$*5
Powyższa lista to jedynie ułamek możliwości Emmet-a. Jednak są to elementy wykorzystywane prze ze mnie na codzień. I mam nadzieję że ułatwią także wam życie, a więcej znajdziecie pod adresem: https://docs.emmet.io/cheat-sheet/