[CSS] Niesamowicie wyglądające listy numerowane
Z racji nadchodzącego Sylwestra i okresu postanowień noworocznych można przygotować sobie odpowiednio wyglądającą listę z postanowieniami. W tym artykule dowiesz się, jak stworzyć listy, które zaskoczą innych efektownym widokiem nie umniejszając ich funkcjonalności.
Już kiedyś miałem okazję napisać o różnych sposobach tworzenia efektownych list za pomocą CSS. Dzisiejszy wpis będzie jakby jego rozwinięciem.
Przykład 1 - zagnieżdżone listy
Kod HTML
Na początek musimy przygotować odpowiednią strukturę HTML dla naszej listy. Nie będzie to nic odkrywczego, po prostu numeryczna lista:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <div id="lista1"> <h2>Przykład 1</h2> <ol> <li>Pozycja 1</li> <li>Pozycja 2</li> <li>Pozycja 3</li> <li>Pozycja 4</li> <li>Pozycja 5</li> <li>Pozycja 6 <ol> <li>Zagnieżdżona pozycja 6.1</li> <li>Zagnieżdżona pozycja 6.2</li> <li>Zagnieżdżona pozycja 6.3</li> </ol> </li> <li>Pozycja 7</li> <li>Pozycja 8 <ol> <li>Zagnieżdżona pozycja 8.1</li> <li>Zagnieżdżona pozycja 8.2</li> <li>Zagnieżdżona pozycja 8.3</li> </ol> </li> <li>Pozycja 9</li> <li>Pozycja 10</li> </ol> </div> |
Na potrzeby tego artykułu, listy będą trzymane w osobnych kontenerach (czyt.: divach), nie jest to najbardziej fortunnie wyglądający kod. Dlatego na stronach lepiej definiować identyfikatory bezpośrednio do list.
Kod CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #lista1 ol { counter-reset: licznik; margin-left: 0; padding-left: 0; } #lista1 ol > li { position: relative; margin: 0 0 6px 2em; padding: 4px 8px; list-style: none; border-top: 2px solid #666; background: #f6f6f6; display: block; } #lista1 ol > li:before { content: counter(licznik); counter-increment: licznik; position: absolute; top: -2px; left: -2em; width: 2em; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; margin-right: 8px; padding: 4px; border-top: 2px solid #666; color: #fff; background: #666; font-weight: bold; font-family: Arial, Helvetica, sans-serif; text-align: center; } #lista1 li ol, #lista1 li ul { margin-top: 6px; } #lista1 ol ol li:last-child { margin-bottom: 0; } |
W tym przykładzie, a także w kolejnych, zostały wykorzystane atrybuty: counter-reset, counter-increment. Są to rzadko używane atrybuty, ale o bardzo ciekawych możliwościach i istnieją od czasów powstania CSS2. Dzięki nim, można numerować listy na swój sposób i wykorzystać numery list w odpowiednich miejscach za pomocą atrybutu: content, który służy do stawiania tekstu na stronę za pomocą CSS. Dzięki kombinacji tych trzech atrybutów oraz pseudoklasy :before na stronie "dzieje się magia".
Wykorzystano również atrybut: box-sizing, w celu dostosowania elementów listy tak, aby marginesy i paddingi zawierały się w szerokości i wysokości elementu, a nie dodawały się do szerokości i wysokości psując cały układ strony. Jest to nowe podejście do modelu pudełka znanego z CSS2. Dzięki niemu, nie trzeba się już martwić o kalkulowanie wartości szerokości i wysokości.
Przykład 2 - pytania i odpowiedzi
Kod HTML
1 2 3 4 5 6 7 8 9 10 | <div id="lista2"> <dl> <dt>Co to jest CSS?</dt> <dd>CSS - Cascading Style Sheets (z ang. Kaskadowe Arkusze Stylów) jest to ...</dd> <dt>Co to jest HTML?</dt> <dd>HTML - HyperText Markup Language ? hipertekstowy język znaczników ...</dd> <dt>Co to jest JavaScript?</dt> <dd>JavaScript jest to ...</dd> </dl> </div> |
Tym razem wykorzystujemy listę definicji do utworzenia kolejnego efektu listy. Ten typ listy zazwyczaj się wykorzystuje do różnego typu elementów strony związanych z pytaniami i odpowiedziami.
Kod CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #lista2 dl { counter-reset: licznik; } #lista2 dt { position: relative; font: bold 16px Georgia; padding: 4px 0 10px 0; } #lista2 dt:before { content: counter(licznik); counter-increment: licznik; position: absolute; left: 0; top: 0; font: bold 50px/1 Arial, Helvetica, sans-serif; } #lista2 dd { margin: 0 0 50px 0; } #lista2 dt, #lista2 dd { padding-left: 50px; } |
Dzięki powyższemu kodowi, uzyskaliśmy efekt pierwszego znaku dużego (nie pamiętam nazwy typograficznej) co nadaje pewnej elegancji tekstowi na stronie.
Przykład 3 - listy z obrazkami
Pora na najbardziej efektowny przykład listy, który można wykorzystać do tworzenia opisów czynności lub jako galerię zdjęć. Dzięki niemu, strona na pewno zyska na elegancji.
Kod HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div id="lista3"> <ol> <li> <img ...> <div>...</div> </li> <li> <img ...> <div>...</div> </li> <li> <img ...> <div>...</div> </li> </ol> </div> |
Kod CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #lista3 ol { list-style: none; } #lista3 li { counter-increment: licznik; position: relative; clear: both; } #lista3 li:before { content: counter(licznik, upper-roman); font-size: 40px; background: rgba(255,132,0,0.7); color: #fff; position: absolute; top: 0; left: 0; width: 100px; height: 100px; line-height: 100px; text-align: center; } #lista3 li > div { float: right; width: 440px; margin: -40px -130px 100px 0; background: rgba(0,0,0,0.3); padding: 50px; position: relative; font: 18px/1.5 bold Arial, Helvetica, sans-serif; color: #fff; text-align: center; } |
W tym przykładzie wystąpiła mała zmiana dotycząca counter(). Tym razem counter() przyjmuje 2 parametry: nazwę licznika oraz typ licznika. W ten sposób osiągnęliśmy rzymskie numerowanie listy na obrazkach. Dla efektu przezroczystości tła użyliśmy kolorów w systemie rgba.
Podsumowanie
Analizując powyższe przykłady, można było się zapoznać z atrybutami, które do tej pory nie były wykorzystywane najczęściej. Teraz, znając ich dodatkowe możliwości można tworzyć efektownie wyglądające strony WWW z różnymi stylami numeracji listy bez korzystania z technologii pośrednich typu PHP czy JS. Jest to na pewno spore ułatwienie. Tym bardziej, że efekty działają we wszystkich najnowszych przeglądarkach włączając w to Internet Explorer 9.
Demo z tego artykułu można zobaczyć tutaj: listy numeryczne z CSS