chevron-left chevron-right

[JS] Jak zbudować menu dopasowujące się do szerokości strony z wykorzystaniem AdaptiveNav.js?

Tworząc nowoczesne strony internetowe bardzo często można się spotkać z problemem działania nawigacji w różnych trybach działania strony. Czy menu ma się chować? Czy może ma zmieniać swój kształt i wygląd? Jest wiele różnych podejść.

Ten artykuł jest pierwszym z serii artykułów w których będę opisywał sposoby wykorzystania pluginów Javascript stworzonych w wolnych chwilach przeze mnie.

AdaptiveNav.js - co to jest?

AdaptiveNav.js jest to plugin Javascript, który pozwala na dostosowanie liczby widocznych elementów menu w zależności od szerokości ekranu. Jeśli elementy nie mieszczą się na ekranie, to wtedy zostają przeniesione do listy rozwijanej która jest otwierana za pomocą dodatkowego przycisku w nawigacji.

Sposób działania pluginu można zobaczyć na animacji poniżej:

AdaptiveNav.js in action

Jak wykorzystać plugin na swojej stronie?

Aby móc wykorzystać możliwości pluginu na swojej stronie, należy pobrać plugin z repozytorium na Github.com lub uruchomić w linii komend następującą komendę:

npm install adaptive-nav

Następnie, należy dołączyć pliki adaptive-nav.min.js oraz adaptive-nav.css na swojej stronie.

Kolejnym krokiem jest przygotowanie struktury nawigacji w kodzie HTML. Przykładowa struktura może wyglądać następująco:

1
2
3
4
5
6
7
8
9
<nav class="adaptive-nav">
    <ul class="adaptive-nav__list">
        <li class="adaptive-nav__list__item">Item 1</li>
        <li class="adaptive-nav__list__item">Item 2</li>
        [...]
        <li class="adaptive-nav__list__item">Item 14</li>
        <li class="adaptive-nav__list__item">Item 15</li>
    </ul>
</nav>

Jeśli korzystamy z tej struktury, to możemy uruchomić plugin w następujący sposób:

1
new AdaptiveNav();

Zaawansowane wykorzystanie pluginu AdaptiveNav.js

W przypadku gdy dysponujemy inną strukturą HTML lub innymi klasami CSS dodanymi do elementów nawigacji, to możemy nieco zmodyfikować działanie pluginu poprzez dodanie obiektu z konfiguracją podczas inicjalizacji pluginu.

1
2
3
4
5
6
7
8
var adaptiveNav = new AdaptiveNav({
    // selektor CSS kontenera zawierającego menu z elementami nawigacji
    navSelector: '.nav-container',
    // selektor CSS listy z elementami nawigacji
    navListSelector: '.nav-list',
    // selektor CSS elementów nawigacji pierwszego poziomu (elementy z dodatkowych menu rozwijanych nie powinny używać tego selektora)
    navItemSelector: '.nav-item'
});

W przykładzie powyżej przedstawiono wszystkie opcje konfiguracyjne pluginu. Wszystkie z nich dotyczą selektorów CSS na podstawie których plugin będzie mógł odpowiednio zmodyfikować swoje działanie.

Ponadto, AdaptiveNav.js udostępnia metodę do aktualizowania stanu nawigacji (widoczności elementów nawigacji) na żądanie. Wystarczy tak jak w przykładzie powyżej utworzyć zmienną o nazwie adaptiveNav a następnie wywołać metodę aktualizującą stan nawigacji:

1
adaptiveNav.update();

Podsumowanie

Mam nadzieję, że plugin utworzony przeze mnie okaże się przydatny w Twojej codziennej pracy. Po zminifikowaniu plik z kodem waży niecałe 3kB. Wszelkie uwagi co do działania pluginu można zgłaszać w komentarzach do tego wpisu lub bezpośrednio na Github.com.

Zapraszam do pobierania pluginu stąd - AdaptiveNav.js | Github.com

  • Tomasz Grabowski

    świetne

  • Łukasz Ostrowski

    Niezbyt BEMowe klasy masz 😛 Podwójne elementy, powino być adaptive-nav__list > adaptive-nav__list-item

  • Dziękuję za komentarz. Spotkałem się z kilkoma podejściami do BEM. Jedno z nich sugeruje by klasy CSS przedstawiały strukturę kodu HTML i to podejście zastosowałem w moim przypadku.

  • Łukasz Ostrowski

    W dokumentacji BEM traktowane jest jako błąd 😛 w każdym razie całą magią BEM jest całkowite zerwanie z kaskadowością, w tym HTML. Po wytrenowaniu takiego sposobu myślenia, można pisać bardzo, bardzo przenośny kod. Pozdrawiam