Flexbox, Grid & Responsive Design
đŠ Flexbox : Mise en page flexible unidirectionnelle
Flexbox est conçu pour créer des mises en page unidimensionnelles (ligne OU colonne).
đč Principes de base
- Un conteneur devient « flexible » avec
display: flex;
- Les enfants directs deviennent les éléments « flex » (items)
đ§ PropriĂ©tĂ©s du conteneur Flex
Propriété | Effet |
---|---|
flex-direction |
DĂ©finit lâaxe principal (row , column , etc.) |
justify-content |
Aligne les Ă©lĂ©ments sur lâaxe principal |
align-items |
Aligne sur lâaxe secondaire (croisĂ©) |
flex-wrap |
Permet ou non le retour Ă la ligne (wrap ) |
đ§ PropriĂ©tĂ©s des items flex
Propriété | Effet |
---|---|
flex |
Raccourci pour flex-grow , flex-shrink , flex-basis |
align-self |
Alignement spĂ©cifique dâun item |
order |
RĂ©ordonne les Ă©lĂ©ments dans lâinterface |
Exemple de barre de navigation avec Flexbox
nav ul {
display: flex;
justify-content: space-around;
align-items: center;
list-style: none;
margin: 0;
padding: 0;
}
đ§± CSS Grid : Mise en page bidimensionnelle
đ Quâest-ce que CSS Grid ?
Grid est un systĂšme de mise en page bidimensionnel qui permet de gĂ©rer lignes et colonnes en mĂȘme temps. Câest trĂšs adaptĂ© pour des layouts complexes comme des galeries ou des structures de pages.
đ§© Activation du mode grid
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* 3 colonnes égales */
gap: 20px; /* espace entre lignes et colonnes */
}
đ§ PropriĂ©tĂ©s principales du conteneur Grid
Propriété | RÎle |
---|---|
display: grid |
Active Grid |
grid-template-columns |
Définit le nombre et la taille des colonnes |
grid-template-rows |
(facultatif) Définit les lignes |
gap |
Espace entre les cellules |
grid-column-gap /grid-row-gap |
Espace spécifique horizontal / vertical |
place-items |
Aligne les enfants (center , etc.) |
đ§· Placement explicite dâĂ©lĂ©ments
On peut positionner un élément dans une cellule spécifique avec grid-column
ou grid-row
:
.item1 {
grid-column: 1 / 3; /* sâĂ©tend de la colonne 1 Ă 2 inclus */
}
Exemple : Galerie de projets avec Grid
<div class="grid-container">
<div class="card">Projet 1</div>
<div class="card">Projet 2</div>
<div class="card">Projet 3</div>
</div>
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.card {
background: white;
padding: 15px;
border: 1px solid #ccc;
border-radius: 5px;
}
âauto-fit
avecminmax()
permet une grille responsive automatiquement.
đ± Responsive Design : Sâadapter aux petits Ă©crans
đ§ Notion de responsive
Un site responsive adapte sa mise en page et ses tailles selon la largeur de lâĂ©cran. On utilise les media queries pour dĂ©clencher des styles Ă certaines largeurs.
đ Media Queries : mode dâemploi
Les media queries permettent dâappliquer certains styles CSS uniquement dans certaines conditions, comme une largeur dâĂ©cran maximale ou minimale.
Syntaxe générale
@media (condition) {
/* rĂšgles CSS ici */
}
Exemples classiques
- Adapter le style pour les smartphones :
@media (max-width: 600px) {
body {
font-size: 14px;
}
}
- Adapter pour les grands écrans :
@media (min-width: 1200px) {
.container {
max-width: 1140px;
margin: auto;
}
}
- Combiner conditions :
@media screen and (min-width: 768px) and (max-width: 1024px) {
/* Tablettes */
}
Exemple de media query responsive complet
@media (max-width: 600px) {
nav ul {
flex-direction: column;
align-items: flex-start;
}
nav li {
width: 100%;
}
.grid-container {
grid-template-columns: 1fr;
}
.card {
margin-bottom: 20px;
}
h1 {
font-size: 1.5em;
text-align: left;
}
.profile-photo {
width: 100px;
display: block;
margin: 0 auto 20px;
}
}
đĄ Meta viewport
Ă inclure dans le <head>
de chaque page HTML pour que les media queries fonctionnent correctement sur mobile :
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Sans cette balise, les navigateurs mobiles affichent la page avec un zoom par dĂ©faut, ce qui empĂȘche lâeffet responsive.
đ Ressources utiles
đ Vous savez maintenant utiliser Flexbox, Grid et appliquer des rĂšgles responsive grĂące aux media queries, pour crĂ©er des sites modernes, adaptatifs et bien structurĂ©s.
đ§ Flexbox : mise en page flexible et moderne
đĄ Pourquoi Flexbox ?
- Facilite la création de mises en page unidimensionnelles (lignes ou colonnes).
- Permet de centrer et dâaligner facilement des Ă©lĂ©ments.
- Sâadapte Ă lâespace disponible (flexible !).
đ RĂ©fĂ©rence : Concepts de base Flexbox - MDN
đ§± Mise en place
.container {
display: flex;
flex-direction: row; /* ou column */
justify-content: space-between;
align-items: center;
}
display: flex
: active Flexbox sur le conteneurflex-direction
: sens de disposition (row par défaut)justify-content
: aligne sur lâaxe principal (horizontal si row)align-items
: aligne sur lâaxe secondaire (vertical si row)flex-wrap: wrap
: permet le retour Ă la ligne
đ§© Sur les enfants flex (items)
flex: 1
: chaque item occupe Ă©galement lâespaceflex: 0 0 30%
: largeur fixe (30% ici)align-self
: aligne un item indépendamment
đ Exemples pratiques
đ Barre de navigation horizontale
HTML :
<nav>
<ul>
<li><a href="index.html">Accueil</a></li>
<li><a href="projets.html">Projets</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
CSS :
nav ul {
display: flex;
justify-content: space-around;
align-items: center;
list-style: none;
margin: 0;
padding: 0;
}
nav a {
color: white;
text-decoration: none;
padding: 10px 15px;
}
nav a:hover {
background-color: #555;
}
nav {
background-color: #333;
padding: 5px 0;
}
đŒïž Grille de projets avec Flexbox
HTML :
<div class="projects-container">
<div class="project-card">
<img src="images/proj1.jpg" alt="Projet 1">
<h3>Projet Alpha</h3>
<p>Description rapide...</p>
</div>
<!-- autres cartes -->
</div>
CSS :
.projects-container {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.project-card {
flex: 0 0 30%;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 5px;
padding: 15px;
margin: 10px 0;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.project-card img {
max-width: 100%;
border-radius: 5px 5px 0 0;
}
đ± Responsive Web Design : sâadapter aux Ă©crans
đ Meta viewport
Ajoutez dans le <head>
:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
đ§ Media Queries : adapter les styles selon la taille
@media (max-width: 600px) {
nav ul {
flex-direction: column;
align-items: flex-start;
}
nav li {
width: 100%;
}
nav a {
padding: 12px;
border-top: 1px solid #444;
}
h1 {
font-size: 1.8em;
padding-left: 10px;
}
.projects-container {
flex-direction: column;
}
.project-card {
flex: 0 0 100%;
margin: 10px 0;
}
.profile-photo {
width: 100px;
margin: 0 10px 10px 0;
}
}
â Ces rĂšgles sâappliquent quand lâĂ©cran fait 600px de large ou moins.
đ Astuces Responsive
- Textes : réduisez la taille des titres pour éviter les débordements
- Images :
max-width: 100%
pour quâelles sâadaptent au conteneur - Navigation : passez en vertical ou cachez certains Ă©lĂ©ments sur mobile
- Colonnes : transformez une ligne en pile avec
flex-direction: column