Navscroll
L’elemento Navscroll presenta liste di link con ancore a sezioni della pagina in cui è contenuto.
Layout della Navscroll
Il componente Navscroll è una declinazione del componente Navbar <nav class="navbar navbar-expand-lg">
con l’aggiunta della classe .it-navscroll-wrapper
e dell’attributo data-bs-navscroll
.
Nella sua versione mobile, la navigazione viene collassata all’interno di un menu, posizionabile a inizio o fine viewport.
Per posizionare tale menu in alto, è sufficiente aggiungere al tag <nav>
la classe .it-top-navscroll
. Al contrario, per posizionare il menu in basso, è sufficiente aggiungere la classe .it-bottom-navscroll
.
La Navscroll può avere una linea-separatore a destra o a sinistra dell’elemento. Si ottiene aggiungendo al tag <nav>
la classe .it-left-side
per ottenere una linea a sinistra, e .it-right-side
per ottenere una linea a destra.
Ogni link all’interno della Navscroll contiene l’attributo href
con il valore dell’id relativo all’elemento correlato in pagina: href="#idElemento"
.
Per fare in modo che la voce di menu sia evidenziata automaticamente durante lo scorrimento della pagina, è sufficiente aggiungere alle sezioni corrispondenti alle voci di menu (#idElemento
), una classe .it-page-section
, e racchiudere le sezioni in un elemento con classe .it-page-sections-container
.
Le animazioni sono state realizzate con il plugin javascript AnimeJs.
Posizionamento a fondo pagina con linea a sinistra
In questo esempio, la linea che limita la barra di navigazione è posizionata a sinistra. Su dispositivi con schermi a dimensione inferiore a 992px, la barra che permette di aprire la navigazione si sposterà in basso nella pagina.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<nav class="navbar it-navscroll-wrapper navbar-expand-lg it-bottom-navscroll it-left-side" data-bs-navscroll>
<button class="custom-navbar-toggler" type="button" aria-controls="navbarNav" aria-label="Apri/Chiudi indice" data-bs-toggle="navbarcollapsible" data-bs-target="#navbarNav"><span class="it-list"></span>1. Introduzione
</button>
<div class="navbar-collapsable" id="navbarNav" tabindex="-1">
<div class="close-div visually-hidden">
<button class="btn close-menu" type="button">
<span class="it-close"></span>Chiudi
</button>
</div>
<button type="button" class="it-back-button btn w-100 text-start">
<svg class="icon icon-sm icon-primary align-top"><use href="/dist/svg/sprites.svg#it-chevron-left" xlink:href="/dist/svg/sprites.svg#it-chevron-left"></use></svg>
<span>Indietro</span>
</button>
<div class="menu-wrapper" tabindex="-1">
<div class="link-list-wrapper">
<h3>header</h3>
<ul class="link-list">
<li class="nav-item active">
<a class="nav-link active" href="#"><span>1. Introduzione </span></a>
<ul class="link-list">
<li class="nav-link active">
<a class="nav-link active" href="#"><span>1.1 Elemento annidato (attivo) </span></a>
<ul class="tertiary link-list">
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.1 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.2 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.3 Elemento annidato </span></a></li>
</ul>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>1.2 Elemento annidato </span></a>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>1.3 Elemento annidato </span></a>
</li>
</ul>
<a class="nav-link" href="#"><span>2. Sezione </span></a>
<ul class="link-list">
<li class="nav-link">
<a class="nav-link" href="#"><span>2.1 Elemento annidato </span></a>
<ul class="tertiary link-list">
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.1 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.2 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.3 Elemento annidato </span></a></li>
</ul>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>2.2 Elemento annidato </span></a>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>2.3 Elemento annidato </span></a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
Posizionamento in testa alla pagina con linea a destra
In questo esempio, la linea che limita la barra di navigazione è posizionata a destra. Su dispositivi con schermi a dimensione inferiore a 992px, la barra che permette di aprire la navigazione si sposterà in alto nella pagina.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<nav class="navbar it-navscroll-wrapper navbar-expand-lg it-top-navscroll it-right-side" data-bs-navscroll>
<button class="custom-navbar-toggler" type="button" aria-controls="navbarNavB" aria-label="Apri/Chiudi indice" data-bs-toggle="navbarcollapsible" data-bs-target="#navbarNavB"><span class="it-list"></span>1. Introduzione
</button>
<div class="navbar-collapsable" id="navbarNavB" tabindex="-1">
<div class="close-div visually-hidden">
<button class="btn close-menu" type="button">
<span class="it-close"></span>Chiudi
</button>
</div>
<div class="menu-wrapper" tabindex="-1">
<button type="button" class="it-back-button btn w-100 text-start">
<svg class="icon icon-sm icon-primary align-top"><use href="/dist/svg/sprites.svg#it-chevron-left" xlink:href="/dist/svg/sprites.svg#it-chevron-left"></use></svg>
<span>Indietro</span>
</button>
<div class="link-list-wrapper">
<h3>header</h3>
<ul class="link-list">
<li class="nav-item active">
<a class="nav-link active" href="#"><span>1. Introduzione </span></a>
<ul class="link-list">
<li class="nav-link active">
<a class="nav-link active" href="#"><span>1.1 Elemento annidato (attivo) </span></a>
<ul class="tertiary link-list">
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.1 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.2 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.3 Elemento annidato </span></a></li>
</ul>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>1.2 Elemento annidato </span></a>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>1.3 Elemento annidato </span></a>
</li>
</ul>
<a class="nav-link" href="#"><span>2. Sezione </span></a>
<ul class="link-list">
<li class="nav-link">
<a class="nav-link" href="#"><span>2.1 Elemento annidato </span></a>
<ul class="tertiary link-list">
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.1 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.2 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.3 Elemento annidato </span></a></li>
</ul>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>2.2 Elemento annidato </span></a>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>2.3 Elemento annidato </span></a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
Progress bar
La Navscroll può mostrare una barra di avanzamento dello scorrimento del contenuto. Per farlo utilizzare il componente Progress Bar, aggiungendo la classe .it-navscroll-progressbar
all’elemento .progress-bar
. Il contenuto a cui si riferisce l’avanzamento dello scorrimento è relativo all’elemento .it-page-sections-container
.
Esempio Navscroll con Progress bar >
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<nav class="navbar it-navscroll-wrapper navbar-expand-lg it-bottom-navscroll it-right-side" data-bs-navscroll>
<button class="custom-navbar-toggler" type="button" aria-controls="navbarNavProgress"
aria-label="Apri/Chiudi indice" data-bs-toggle="navbarcollapsible" data-bs-target="#navbarNavProgress">
<span class="it-list"></span>1. Introduzione
</button>
<div class="progress custom-navbar-progressbar">
<div class="progress-bar it-navscroll-progressbar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="navbar-collapsable" id="navbarNavProgress" tabindex="-1">
<div class="menu-wrapper" tabindex="-1">
<button type="button" class="it-back-button btn w-100 text-start">
<svg class="icon icon-sm icon-primary align-top"><use href="/dist/svg/sprites.svg#it-chevron-left" xlink:href="/dist/svg/sprites.svg#it-chevron-left"></use></svg>
<span>Indietro</span>
</button>
<div class="link-list-wrapper">
<h3>header</h3>
<div class="progress">
<div class="progress-bar it-navscroll-progressbar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<ul class="link-list">
<li class="nav-item">
<a class="nav-link active" href="#">
<span>1. Introduzione </span>
</a>
<ul class="link-list">
<li class="nav-link">
<a class="nav-link" href="#">
<span>1.1 Elemento annidato </span>
</a>
<ul class="tertiary link-list">
<li class="nav-link">
<a class="nav-link" href="#">
<span>1.1.1 Elemento annidato </span>
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span>2. Seconda sezione </span>
</a>
<ul class="link-list">
<li class="nav-link">
<a class="nav-link" href="#">
<span>2.1 Elemento annidato </span>
</a>
<ul class="tertiary link-list">
<li class="nav-link">
<a class="nav-link" href="#">
<span>2.1.1 Elemento annidato </span>
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
Variante scura
Il nav ha due versioni, light e dark.
Lo stile di default è con sfondo bianco e testo di colore primario, su desktop e mobile.
Temi Navscroll
Per cambiare il tema è sufficiente aggiungere le seguenti classi al tag <nav class="navbar">
:
.theme-dark-mobile
: sfondo scuro, testi e link bianco (modifica unicamente la versione mobile del Navscroll).
.theme-dark-desktop
: sfondo scuro, testi e link di colore bianco (modifica unicamente la versione desktop del Navscroll).
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<nav class="navbar it-navscroll-wrapper navbar-expand-lg it-top-navscroll it-right-side theme-dark-mobile theme-dark-desk" data-bs-navscroll>
<button class="custom-navbar-toggler" type="button" aria-controls="navbarNavC" aria-label="Apri/Chiudi indice" data-bs-toggle="navbarcollapsible" data-bs-target="#navbarNavC"><span class="it-list"></span>1. Introduzione
</button>
<div class="navbar-collapsable" id="navbarNavC" tabindex="-1">
<div class="close-div visually-hidden">
<button class="btn close-menu" type="button">
<span class="it-close"></span>Chiudi
</button>
</div>
<div class="menu-wrapper" tabindex="-1">
<button type="button" class="it-back-button btn w-100 text-start">
<svg class="icon icon-sm icon-white align-top"><use href="/dist/svg/sprites.svg#it-chevron-left" xlink:href="/dist/svg/sprites.svg#it-chevron-left"></use></svg>
<span>Indietro</span>
</button>
<div class="link-list-wrapper">
<h3>header</h3>
<ul class="link-list">
<li class="nav-item active">
<a class="nav-link active" href="#"><span>1. Introduzione </span></a>
<ul class="link-list">
<li class="nav-link active">
<a class="nav-link active" href="#"><span>1.1 Elemento annidato (attivo) </span></a>
<ul class="tertiary link-list">
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.1 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.2 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>1.1.3 Elemento annidato </span></a></li>
</ul>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>1.2 Elemento annidato </span></a>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>1.3 Elemento annidato </span></a>
</li>
</ul>
<a class="nav-link" href="#"><span>2. Sezione </span></a>
<ul class="link-list">
<li class="nav-link">
<a class="nav-link" href="#"><span>2.1 Elemento annidato </span></a>
<ul class="tertiary link-list">
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.1 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.2 Elemento annidato </span></a></li>
<li class="nav-link"><a class="nav-link" href="#"><span>2.1.3 Elemento annidato </span></a></li>
</ul>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>2.2 Elemento annidato </span></a>
</li>
<li class="nav-link">
<a class="nav-link" href="#"><span>2.3 Elemento annidato </span></a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
Menu Inline
La classe distintiva del wrapper esterno è .inline-menu
.
Gli inline menu possono contenere liste di link di ogni tipo; nell’esempio che segue è stata inserita una Lista di link collassabile.
Per maggiori informazioni, si può fare riferimento alla documentazione delle Liste di link.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<nav class="inline-menu">
<div class="link-list-wrapper">
<ul class="link-list">
<li>
<a class="list-item large medium right-icon" href="#collapseOne" role="button" data-bs-toggle="collapse" aria-expanded="false" aria-controls="collapseOne">
<span class="list-item-title-icon-wrapper">
<span>Link lista 1</span>
<svg class="icon icon-xs icon-primary right"><use href="/dist/svg/sprites.svg#it-expand"></use></svg>
</span>
</a>
<ul class="link-sublist collapse" id="collapseOne">
<li><a class="list-item" href="#"><span>Link lista 1.1</span></a>
</li>
<li><a class="list-item" href="#"><span>Link lista 1.2</span></a>
</li>
<li><a class="list-item" href="#"><span>Link lista 1.3</span></a>
</li>
</ul>
</li>
<li>
<a class="list-item large medium right-icon" href="#collapseTwo" role="button" data-bs-toggle="collapse" aria-expanded="false" aria-controls="collapseTwo">
<span class="list-item-title-icon-wrapper">
<span>Link lista 2</span>
<svg class="icon icon-xs icon-primary right"><use href="/dist/svg/sprites.svg#it-expand"></use></svg>
</span>
</a>
<ul class="link-sublist collapse" id="collapseTwo">
<li><a class="list-item" href="#"><span>Link lista 2.1</span></a>
</li>
<li><a class="list-item" href="#"><span>Link lista 2.2</span></a>
</li>
<li><a class="list-item" href="#"><span>Link lista 2.3</span></a>
</li>
</ul>
</li>
<li>
<a class="list-item large medium right-icon" href="#collapseThree" role="button" data-bs-toggle="collapse" aria-expanded="false" aria-controls="collapseThree">
<span class="list-item-title-icon-wrapper">
<span>Link lista 3</span>
<svg class="icon icon-xs icon-primary right"><use href="/dist/svg/sprites.svg#it-expand"></use></svg>
</span>
</a>
<ul class="link-sublist collapse" id="collapseThree">
<li><a class="list-item" href="#"><span>Link lista 3.1</span></a>
</li>
<li><a class="list-item" href="#"><span>Link lista 3.2</span></a>
</li>
<li><a class="list-item" href="#"><span>Link lista 3.3</span></a>
</li>
</ul>
</li>
</ul>
</div>
</nav>
Attivazione tramite codice
Nel caso in cui si desidera che il componente sia inizializzato in maniera automatica
utilizzare l’attributo data-bs-toggle
specifico per la sua inizializzazione.
Nel caso in cui si desidera importare e inizializzare autonomamente il componente
l’attributo data-bs-toggle
specifico non deve essere incluso così da evitare
inizializzazioni automatiche che possono portare a comportamenti inaspettati.
Per maggiori informazioni consulta la sezione JavaScript di Bootstrap Italia.
È possibile creare un’istanza di Navscroll manualmente con il constructor:
1
2
3
4
import { NavScroll } from 'bootstrap-italia';
const navscrollElement = document.querySelector('.it-navscroll-wrapper');
const navscroll = new NavScroll(navscrollElement, options);
Il componente nella sua versione Menu Inline
utilizza al suo interno il componente
Collapse
, si rimanda alle sezioni specifiche per l’attivazione:
Opzioni
Le opzioni possono essere passate tramite gli attributi data o tramite Javascript. Per quanto riguarda gli attributi data, aggiungi il nome dell’opzione a data-bs
, come in data-bs-parent=""
.
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
scrollPadding | number | function | 10 | Uno spazio (in pixel) per consentire allo scroll di fermarsi prima o dopo (se viene fornito un valore negativo) rispetto alla posizione del bersaglio. Nel caso in cui ci siano degli elementi fixed dinamici è possibile fornire una funzione per calcolare di volta in volta lo spazio. |
duration | number | 800 | Durata dell'animazione di scroll espressa in millisecondi. |
easing | string | easeInOutSine | Inerzia dell'animazione di scroll. Per i valori fare riferimento alla documentazione di AnimeJs. |
Metodi
Metodo | Descrizione |
---|---|
getInstance | Metodo statico che consente di ottenere l'istanza di avviso associata a un elemento DOM, è possibile utilizzarlo in questo modo: NavScroll.getInstance(domElement). |
getOrCreateInstance | Metodo statico che restituisce un'istanza di avviso associata a un elemento DOM o ne crea una nuova nel caso in cui non fosse stata inizializzata. Puoi utilizzarla in questo modo: NavScroll.getOrCreateInstance(element). |
dispose | Rimuove la funzionalità NavScroll. |
setScrollPadding | Modfica il valore dell'opzione scrollPadding . |
Breaking change
- Spostato il pulsante “Indietro” come primo elemento della struttura interna di
.menu-wrapper
.
Inoltre, la versione mobile o a forte ingrandimento del componente, che si basa sulla navbar presente anche nei componenti Header e Megamenu, è stata reimplementata come modale per migliorare l’accessibilità con le combinazioni principali di lettori di schermo, sistema operativo e browser. Modifiche principali:
- struttura: la navbar ora utilizza un pattern dialog con backdrop
- gerarchia visiva: la gestione
z-index
è allineata al componente modale - gestione del focus: implementato
focus-trap.js
per utenti da tastiera e lettori di schermo, e gestione inert - il comportamento è diverso se implementata dentro o fuori dall’elemento
main
di pagina (se presente)
Se hai personalizzato il CSS della navbar, rivedi le tue modifiche per verificarne la compatibilità. Se hai modificato il comportamento JavaScript in, assicurati che funzioni con il nuovo pattern dialog. Testa la tua implementazione con lettori di schermo e con utenti per verificarne l’accessibilità.
Gli elementi con classe .it-back-button
diventano di tipo <button>
invece di <a>
.
Gli elementi di tipo <a>
dei collapse necessitano l’aggiunta dell’attributo role="button"
.