Bootstrap : Créer un méga dropdown menu responsive

Mis à jour il y a 3 ans

Un tutoriel pour mettre en place un large (méga) menu déroulant (dropdown) avec Bootstrap 4

Wilo Ahadi

Auteur

Wilo A.

Technologies

HTML, CSS, Bootstrap
Voir aussi Un tutoriel pour déterminer la durée entre la date de début ($date1) et la date de fin ($date2) en années, mois, heures, minutes et secondes dans un projet Laravel. En savoir plus

Introduction

Le framework CSS Bootstrap propose une barre de navigation « .navbar » avec un menu déroulant (dropdown) d’une colonne qui se présente de la manière suivante :

Dropdown menu de Boostrap 4

Le code source qui produit ce dropdown :

<li class="nav-item dropdown">

	<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
	Dropdown
	</a>

	<div class="dropdown-menu" aria-labelledby="navbarDropdown">
		<a class="dropdown-item" href="#">Action</a>
		<a class="dropdown-item" href="#">Another action</a>
		<div class="dropdown-divider"></div>
		<a class="dropdown-item" href="#">Something else here</a>
	</div>
  
</li>


Nous avons les éléments suivants :

  • « nav-item dropdown » : le contenant du dropdown
  • « nav-link dropdown-toggle » : l’élément déclencheur (Afficher/masquer) du dropdown
  • « dropdown-menu » : le contenu du dropdown.

Mais quand ce dropdown menu nous laisse peu d’espace pour présenter plusieurs éléments en plusieurs colonnes, nous pouvons le transformer, l’élargir en le gardant responsive comme le montre la capture ci-dessous :

Méga dropdown menu responsive de ce cours

Nous vous présentons une astuce au point suivant pour mettre en place ce large menu dropdown responsive. Mais avant, vous pouvez récupérer le code source complet de ce cours en cliquant ici.

Le méga dropdown avec l’alignement flex

Voici le code source pour reproduire le méga dropdown menu présenté, nous l'expliquons juste après :

<li class="nav-item dropdown">

	<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
	Mega Dropdown
	</a>

	<div class="dropdown-menu pt-0" aria-labelledby="navbarDropdown">

		<img src="./img/cover.jpg" class="img-fluid" alt="" >

		<div class="d-flex align-items-start flex-column flex-sm-row p-3">

			<div>
				<div class="dropdown-header">Services</div>
				<a class="dropdown-item" href="#" >Développement web</a>
				<a class="dropdown-item" href="#" >Développement mobile</a>
				<a class="dropdown-item" href="#" >UX et Design</a>
				<a class="dropdown-item" href="#" >Infographie</a>
			</div>

			<div>
				<div class="dropdown-header">Technologies</div>
				<a class="dropdown-item" href="#" >HTML et CSS</a>
				<a class="dropdown-item" href="#" >BOOTSTRAP</a>
				<a class="dropdown-item" href="#" >PHP et LARAVEL</a>
				<a class="dropdown-item" href="#" >JAVASCRIPT et VUE.JS</a>
			</div>

			<div>
				<div class="dropdown-header">Outils</div>
				<a class="dropdown-item" href="#" >Visual Studio Code</a>
				<a class="dropdown-item" href="#" >Laragon</a>
				<a class="dropdown-item" href="#" >Google Chrome</a>
				<a class="dropdown-item" href="#" >Windows 10</a>
			</div>

		</div>

	</div>

</li>

Nous avons les éléments suivants dans « dropdown-menu », le contenu du menu déroulant :

1. Une image « img » avec la classe « img-fluid » pour qu’elle prenne la largeur maximale du dropdown :

<img src="./img/cover.jpg" class="img-fluid" alt="" >

2. Le conteneur « div » des colonnes du menu avec les classes :

  • « d-flex » pour avoir des éléments (colonnes) flexibles, les « div » enfants
  • « align-items-start » pour aligner les éléments au début (dessus - gauche) au sein du conteneur
  • « flex-column » pour gérer le côté responsive, afficher verticalement les éléments sur mobile
  • « flex-sm-row » pour gérer le côté responsive,  afficher horizontalement des éléments sur tablette et ordinateur
  • « p-3 » pour la marge interne
<div class="d-flex align-items-start flex-column flex-sm-row p-3">

	<div>Contenu de la colonne 1</div>

	<div>Contenu de la colonne 2</div>

	<div>Contenu de la colonne 3</div>

</div>


Vous pouvez donc aligner et gérer le comportement responsive des colonnes de votre large menu avec les classes align-items-* et flex-*, voir la documentation Flex.


Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.

Wilo Ahadi

Wilo Ahadi, l'auteur

Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School

Voir profil

Commentaires