Pour ce deuxième épisode (épisode 1), on commence avec un HTML plus avancé.
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Laurène Ipsum, étudiante en graphisme - portfolio </title> <link href="https://fonts.googleapis.com/css?family=Space+Mono:400,400i,700" rel="stylesheet"> <link rel="stylesheet" href="style.css"> </head> <body class="home"> <header class="header"> <div class="header-flex"> <h1 class="header-logo">jenseign</h1> <nav class="no-mobile"> <a href="#" class="current">portfolio</a> • <a href="#">contact(@)laureneipsum.com</a> • <a href="#">linkedIn</a> </nav> <nav class="mobile"> <a href="#footer-nav">≡</a> </nav> </div> </header> <div class="grid"> <div class="about">Laurène Ipsum, étudiante en design graphique en 2e année à l’<em>ésad Amiens</em>.<br> <br> Actuellement à la recherche d’un <strong>stage</strong> d’un mois sur Paris, Lille ou Amiens pour la période juillet-août.</div> <img src="https://dummyimage.com/400x600/6100ff/fff&text=%20" class="m" alt="affiche"> <img src="https://dummyimage.com/400x288/00B3ED/fff&text=%20" class="s" alt="site"> <img src="https://dummyimage.com/400x600/FFDE13/fff&text=%20" class="m" alt="affiche"> <img src="https://dummyimage.com/400x288/FF5046/fff&text=%20" class="s" alt="site"> <img src="https://dummyimage.com/824x600/1FD0C0/fff&text=%20" class="l" alt="app"> <img src="https://dummyimage.com/400x600/FF5046/fff&text=%20" class="m" alt="affiche"> <img src="https://dummyimage.com/400x288/FFDE13/fff&text=%20" class="s" alt="site"> <img src="https://dummyimage.com/400x600/FF6600/fff&text=%20" class="m" alt="affiche"> <img src="https://dummyimage.com/400x288/6100ff/fff&text=%20" class="s" alt="site"> <img src="https://dummyimage.com/400x600/00B3ED/fff&text=%20" class="m" alt="site"> <img src="https://dummyimage.com/400x288/FF5046/fff&text=%20" class="s" alt="site"> </div> <footer class="footer"> <nav id="footer-nav"> <a href="#" class="current">portfolio</a> <a href="#">contact(@)laureneipsum.com</a> • <a href="#">linkedIn</a> </nav> </footer> </body> </html>
CSS, réglages et typographie
Choisir la typographie avant de coder permet de mieux ajuster votre mise en page. Dans le CSS, je commence mes projets par le réglage du box-sizing, puis de la famille de caractères.
/* la manière moderne de calculer les tailles */ html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } body{ margin:0; background: #eee; font-family: 'Space Mono', monospace; }
La grille automatique et centrée
Ma grille peut répéter son nombre de colonnes en auto-remplissage, ci-dessous j’obtiens une, deux, trois plus de colonnes de 400 pixels de large selon la taille de la fenêtre.
- 2 colonnes à 892px
- 3 à 1296px
- 4 à 1720px
- 5 à 2144px…
On gagne une colonne tous les 400 + 24px (largeur + gouttière).
grid-row-end:span 2;
vous oblige à avoir 2 colonnes minimum !grid-template-columns: repeat(auto-fill, 400px);
Centrage des colonnes :
justify-content: center;
Combinaison des codes :
.grid{ display:grid; grid-gap: 24px; gap:24px; justify-content: center; margin:72px 0 24px 0; padding:0 24px; grid-template-columns: repeat(auto-fill, 400px); grid-auto-rows: 288px; grid-auto-flow: row dense; } .s{ grid-column-end: span 1; grid-row-end:span 1; } .m{ grid-column-end: span 1; grid-row-end:span 2; } .l{ grid-column-end: span 2; grid-row-end:span 2; }
L’entête
Si vous avez lu le code, des éléments sont là pour une future version mobile, nous allons les masquer temporairement.
.footer, .mobile{ display:none; }
Pour mettre un élément en position fixe sur toute la largueur, il faut définir plusieurs propriétés.
.header{ position:fixed; /* fixe */ z-index: 999; /* devant les autres */ top:0; /* à 0px du coin supérieur */ right:0; /* à droite */ left:0; /* et à gauche => 100% */ height:48px; /* pour le style */ background: #fff; padding:0 24px; box-shadow: 0 5px 15px rgba(0,0,0,0.05); }
À cette étape, ça déborder, ce n’est pas centré, on va donc ajouter la grille auto-fill sur le header.
.header{ position:fixed; z-index: 999; top:0; right:0; left:0; height:48px; background: #fff; padding:0 24px; box-shadow: 0 5px 15px rgba(0,0,0,0.05); /* la même grille que .grid */ display:grid; grid-template-columns: repeat(auto-fill, 400px); grid-gap: 24px; gap:24px; justify-content: center; }
Finitions
La balise h1 possède des réglages CSS, ici je les change.
.header-logo{ margin:0; font-size:1em; /* = 16px par défaut */ } .header-flex{ grid-column: 1/-1; /* ce bloc s'étire sur les colonnes automatiques de la grille */ display:flex; /* technique flex pour faire un « trou » */ justify-content: space-between; /* le « trou » */ align-items: center; /* centrage vertical */ }
https://codepen.io/benoitwimart/full/bzYdPB
Suite dans l’épisode 3 (liens sur les projets, couleurs et version mobile).