Layout & navigation
Création du design de base de l'application "layout" et des menus de navigation.
Layout, page et routes
Notre application aura deux pages et deux routes :
Page des tâches
Pages/PageTaches.vueroute :
'/'
Page de paramétrage
Pages/PageParams.vueroute :
'/params'
Ces deux pages seront injectées dans un seul layout : layouts/MainLayout.vue.
Un layout est un modèle graphique de page dans lequel on peut injecter une autre page, une autre composant.
Travail à réaliser
Créer les pages
PageTaches.vueetPageParams.vueen copiant le fichierpages/Index.vueAjouter un
<h1>dans chaque page afin de les distinguer.
Appliquer les modifications dans
router/routes.tset créer la route/params.6 : Changer
Index.vueenPageTaches.vue7 : Ajout de la nouvelle route
paramspour la pagePageParams.vue
Tester le fonctionnement de l'application et des deux routes
Ouvrir la console pour s'assurer qu'il n'y a pas d'erreur
Ajouter
paramsdans à l'URL de l'application pour tester la page paramètres.
Menu Latéral
Nous allons maintenant modifier le menu de navigation latéral en y ajoutant les liens vers nos deux pages.

Le menu de navigation se trouve dans le fichier layouts/MainLayout.vue et est contenu dans l'élément <q-drawer>, voir ligne 22 du code.
Les liens du menu sont générés par le composant components/EssentialLink.vue ligne 34-38
Remplacer le composant
<EssentialLink>par le code ci-dessous. Ce code représente un lien de navigation.Comme notre page n'utilise plus le composant
EssentialLinkil y a des erreurs soulevées par ES Lint. Pour les corriger il faut retirer tout ce qui n'est plus utile. Attention les numéros de lignes peuvent varier de 1-2 lignes.Supprimer son importation dans le JavaScript de
MainLayout.vue(ligne 54)Supprimer le tableau des liens
essentialLinkslignes 56 à 99 deMainLayout.vueSupprimer le fichier du composant
components/EssentialLink.vue.
Votre application doit fonctionner, sans erreurs, et afficher un menu d'un lien, labellisé "Tâches" et décoré d'une icône "listes".
Analyse de la liste des liens
Cette liste de liens est crée à l'aide de composants Quasar, on les reconnait facilement car ils commencent tous pas <q- .
<q-list>: liste d'éléments Quasar.<q-item>: élément d'une liste Quasar.C'est cet élément qui est cliquable, grâce à l'attribut
clickable, et qui redirigera l'utilisateur vers la bonne page.
<q-item-section>: section d'un élément de liste.Permet de créer une section pour l’icône et une autre pour le label, texte du lien.
<q-icon>: icônePar défaut, Quasar utilise les icônes Material Design de Google : https://material.io/resources/icons/?style=baseline
Pour changer d’icône, trouver son nom et le saisir dans l'attribut
namede<q-icon>
<q-item-label>: label d'un élément de liste, ici le texte du lien.
Ces composants sont détectés et directement ajoutés à votre application par Quasar, donc pas besoin de les importer dans vos pages comme on le ferait pour nos composants.
Tous ces composants sont documentés :
listes Quasar : https://quasar.dev/vue-components/list-and-list-items
icônes Quasar : https://quasar.dev/vue-components/icon
Création du lien "Paramètres"

Copier et coller le <q-item> "Tâches" pour créer celui du lien "Paramètres"
Voici le résultat pour la liste complète des liens
Nos deux liens s'affichent, mais ne nous mènent nulle part ...
Définir la route avec to
toPour qu'un élément cliquable redirige l'utilisateur vers une route on utilise l'attribut to="/route".
Il suffit d'ajouter to="/" et to="/params" aux <q-item> correspondants pour qu'ils nous renvoient au bon endroit.
Parfait, notre menu est fonctionnel et nous permet de naviguer dans notre application.
Problème de la route dans la route
Quand on va à la page "Paramètres", le lien "Paramètres" du menu devient bleu, et quand retourne à la page d’accueil, il devient noir. C'est ce qu'on appelle le lien actif du menu.
Si vous observez bien, le lien de la page "Tâches", reste toujours bleu quand on change de page.
Le problème est que la route pour les Tâches "/" est présente dans la route des paramètres "/params" , puis qu'elle commencer par "/".
Pour indiquer à Quasar qu'un lien est actif uniquement si la route correspond exactement à l'URL, on ajoute l'attribut exact à l'élément cliquable.
Pour finaliser notre menu latéral, renommer notre menu en remplaçant Essential Links par Menu de navigation
31 :
Essential LinksdevientMenu de navigation34 : Ajout des attributs
to="/"etexactau lien<q-item>vers "Tâches"44 : Ajout des attributs
to="/params"etexactau lien<q-item>vers "Paramètres"
Footer avec barre de navigation

Afin de faciliter la navigation sur les petits écrans, nous allons ajouter un pied de page avec une barre de navigation.
Pour ajouter un pied de page à notre Layout, voir les docs suivantes :
Il suffit ensuite de récupérer le code des exemples présentés pour les ajouter à notre application comme présenter cette vidéo :
Placer le code ci-dessous après la fermeture du composant </q-page-container> à la ligne 58.
Refactoring des menus
Les codes du menu latéral et du menu du footer se ressemblent beaucoup, et affichent les mêmes informations.
Nous allons donc automatiser la génération des menus en créant :
Un tableau d'objets liens (id, libellé, icône, route) dans les données de
MainLayout.vueDes boucles
v-forparcourant le tableau de liens dans les menus
Lorsque vous transformer un attribut statique en attribut dynamique, ne pas oublier d'ajouter ":" devant son nom.
to="/params" => :to="lien.to"
name="settings" => :name="lien.icon"
Résultat
Menu latéral
33-34 : Ajout de
v-foret:keypour parcourir le tableau des liensv-for="lien in liens"35 : Ajout de
:devant:topour le rendre dynamique et affectation de la route du lien parcourus39 : Même chose qu'à la ligne 39, mais pour le nom de l’icône
:name43 : Injection du libellé du lien parcourus
{{ lien.libelle }}
Menu du footer
56-57 : Ajout de
v-foret:keypour parcourir le tableau des liensv-for="lien in liens"58: Injection de la route
:to(pas oublier:)59 : Injection du nom de l'icône
:icon(pas oublier:)60: Injection du libellé du lien
:label(pas oublier:)
Tableau des liens
71 - 82 : Ajout des data et déclaration du tableau des liens. Chaque objet lien possède les propriétés :
id
libelle
icone
route
Affichage responsive des menus
Il n'es pas utile que les deux menus s'affichent en même temps.
Nous allons donc customiser les menus pour que :
Le menu latéral s'affiche uniquement pour les grands écrans :
>= 768pxLe menu du footer s'affiche uniquement pour les petits écrans :
< 767px
Menu latéral
Le menu latéral est gérer par le composant <q-drawer> : https://quasar.dev/layout/drawer#QDrawer-API
Ce composant possède une propriété breakpoint qui permet de définir à partir de quelle largeur, en pixel, le menu doit être caché. Nous utiliserons donc cette propriété et lui affecterons la valeur de 767.

Footer
Il faut maintenant masquer le footer pour les écrans >= 768px.
Nous allons créer un style CSS responsive utilisant les "médias queries" pour cacher notre footer.
Si on inspecte notre élément footer, comme présenté sur la capture ci-après, on remarque que l'élément <footer> possède une classe q-footer.

Tous les composants Quasar générés possède une classe CSS portant le nom du composant, dans notre cas <q-footer> aura la classe .q-footer.
Utiliser les classes CSS Qasar pour sélectionner et styler les composants Quasar !
Dans notre cas il est préférable d'utiliser le sélecteur CSS de classe .q-footer que le sélecteur d'élément footer.
Il sera plus précis et limite la propagation des styles sur les autres éléments HTML de l'application.
Ci-après, le code à ajouter à la fin du fichier MainLayout.vue après le script </script>.
Personnalisation du layout
Le composant racine d'un layout est <q-layout> (voir deuxième ligne du code de MainLayout.vue) , il possède un attribut view, qui permet de personnaliser l'affichage de neuf zones.
Mais c'est quoi ce charabia :
"lHh Lpr lFf"🧐
Quasar introduit un concept de mise en page unique et génial, qui permet de structurer facilement les layout en modifiant une simple chaine de caractères.
Pour expliquer comment cela fonctionne, imaginez que votre Layout est une matrice 3x3 de conteneurs (représentée en bleu ci-dessous).
La première rangée de conteneurs est l'en-tête et la dernière rangée serait le pied de page.
La première colonne de conteneurs serait la "gauche" et la dernière colonne serait la "droite".
Le centre de la matrice, sous l'en-tête et au-dessus du pied de page, serait la page ou le conteneur de contenu principal.
Cette matrice de conteneurs ou "QLayout View" peut être représentée par une chaîne de caractères que vous devez fournir à la attribut view de <q-layout>.
Cette chaîne doit contenir exactement 11 caractères (9 zones + 2 espaces), organisés ainsi :
3 définissant la ligne d'en-tête
un espace
3 définissant la ligne du milieu
un espace
3 définissant la ligne de bas de page

Vous devez donc choisir une lettre par zone pour définir quel élément sera affiché dans cette zone :
h ou H : header
l ou L : left
f ou F : footer
r ou R : right
p : page
Les lettre en majuscule afficheront l'élément de de manière fixe. Il sera toujours visible même lors du scroll de l'utilisateur.
Outils
Les outils suivants vous faciliteront la tâche pour personnaliser votre layout :
Configuration actuelle
Notre configuration actuelle donne le résultat suivant :

Nouvelle configuration
Nous allons modifier notre configuration pour que le header et le footer s'affichent de manière fixe (lettre en majuscule) au-dessus des autres (left, right).

Nettoyage du header
Nous allons retirer tout ce qui est inutile dans le header (bouton du menu, version Quasar) et centrer le titre.
Pour centrer le texte nous allons utiliser un "helper". Les "helper" sont des classes CSS qui reproduisent les mises en forme courantes : ajouter des marges, changer l'alignement ou la couleur du texte.
Pour centrer le texte, nous utiliserons le "helper" absolute-center.
Documentation des "helpers" pour le positionnement : https://quasar.dev/style/positioning
Notre header simplifié avec titre centré :
Comme nous avons supprimer le bouton du menu, nous pouvons également supprimer la méthode toggleLeftDrawer qui ne nous est plus utile.
Palette de couleurs
Pour appliquer une couleur à un texte ou à un arrière-plan, on peut utiliser les classes CSS de la palette de couleurs Quasar :
On peut modifier la couleur en appliquant une simple classe CSS à un élément :
Pour la couleur du texte avec le préfixe
text-class="text-red-2"
Pour la couleur de fond avec le préfixe
bg-class="bg-red-2"
Style du menu latéral
Nous allons finaliser le style de notre menu latéral <q-drawer> :
Largeur max de 250px : ajouter la propriété
width="250"à<q-drawer>.Couleur de fond en bleu foncé, qui est la couleur principale (primary) de notre application.
Ajouter
class="bg-primary"
Activer le mode sombre (dark) pour la liste. Indique que la cloueur de fond est sombre et active l'utilisation de couleurs claires pour le texte.
<q-list dark>
Changer la couleur de "Menu de navigation" en blanc en ajoutant
class="text-white"au<q-item-label>Changer la couleur des lien en gris clair.
Ajouter
class="text-grey-4"à<q-item>
Changer la couleur des liens actifs en blanc.
Le lien actif d'un menu est identifiable grâce à la classe CSS
q-router-link--exact-activeIl faut créer une règle CSS qui ne s'appliquera qu'au lien actif du menu latéral, car cela ne concerne pas le style du lien actif du footer.
Utilisation du SCSS
Nous allons réécrire la règles CSS si dessus en SCSS.
Pour pouvoir utiliser le langage SCSS dans un projet Quasar il faut :
Activer SCSS dans l'assistant de création d'un projet Quasar
Indiquer que la partie style du fichier .vue utilise le langage SCSS en y ajoutant l'attribut
lang="scss".
Couleurs du thème
Le fichier SCSS src/css/quasar.variables.scss permet de changer les couleurs du thème.
Nous allons changer la couleur primaire du thème avec un violet, sentez-vous libre de choisir une autre couleur 🎨 .
Afin de définir les couleurs de votre thème, vous pouvez utiliser l'outil suivant et copier le résultat.
Résultat final
Télécharger le code complet du chapitre
Télécharger et extraire l'archive (zip)
Depuis le terminal :
Aller dans le dossier du projet
Taper la commande :
npm installTaper la commande :
quasar dev
Mis à jour
Ce contenu vous a-t-il été utile ?
