Exercices
Exe1 : Offre de prix
Méthode
- Créez un nouveau dossier nommé
flexOffrePrix
-
Dans ce dossier,
-
créez un nouveau fichier nommé
flexOffrePrix.html
- copiez-collez ce code dans le fichier html
Code à copier
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<header>
<nav>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#projects">Projects</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h1>Nos offres</h1>
<article>
<h2>Beginner</h2>
<h3>$10 <span>/ month</span></h3>
<ul>
<li>Feature 1</li>
<li>Feature 2</li>
<li>Feature 3</li>
</ul>
<a href="#">Get Started</a>
</article>
<article>
<h2>Standard</h2>
<h3>$20 <span>/ month</span></h3>
<ul>
<li>Feature 1</li>
<li>Feature 2</li>
<li>Feature 3</li>
</ul>
<a href="#">Get Started</a>
</article>
<article>
<h2>Premium</h2>
<h3>$30 <span>/ month</span></h3>
<ul>
<li>Feature 1</li>
<li>Feature 2</li>
<li>Feature 3</li>
</ul>
<a href="#">Get Started</a>
</article>
</section>
</main>
<footer>
<div>@Flexbox</div>
</footer>
</body>
</html>
- créez un nouveau dossier nommé
css
-
dans ce dossier css, créez un nouveau fichier nommé
flexOffrePrix.css
-
Reproduisez l'interface en tenant compte des consignées données ci-dessous >> Voir l'interface
Contraintes
- Vous ne pouvez pas utiliser de techniques comme le float, position absolue, position relative.
- Le code html ne peut être modifié, seuls des class ou id peuvent être ajoutés
- Le code Html doit être valide W3C
- Le code Css doit être valide W3C
Par où commencer ?
- Analysez le code html fourni.
- La feuille de style doit être externe et liée à la page html. Elle sera située dans le dossier
css
. (Liaison)
Consignes
Warning
Pour vous aider, vous avez des astuces. Utilisez l'astuce uniquement si vous êtes bloqués ou si vous désirez vérifier ce que vous avez réalisé.
Styles généraux
- Le titre de la page est "Offres de prix"
Astuce
Le titre de la page s'affiche dans l'onglet via la balise <title>
. >> info
- La police utilisée est
Tahoma
mais attention, prévoyez une sélection automatique d'une autre police sans empattement (sans-serif) siTahoma
n'est pas disponible.
Astuce
Utilisez l'héritage et spécifiez la police à utiliser dans le body. >> info
- La couleur de fond de la page est
#eee;
Astuce
Utilisez l'héritage et spécifiez la couleur de fond à utiliser dans le body. >> info
- La taille de la police doit être une fois celle spécifiée par le navigateur
Astuce
Utilisez l'héritage et spécifiez la taille de la police à utiliser dans le body. Utilisez l'unité rem.
- Quand on regarde le modèle, on s'aperçoit que le contenu ne prend pas toute la largeur du navigateur. Utilisons une classe générique qui sera appliquée aux différents éléments html.
Astuce
Pour centrer un élément de type bloc, vous devez lui donner une largeur et des marges latérales automatiques. >> infoLa class doit être appliquée aux conteneurs qui seront centrés.
<nav class="centrage">
<section class="centrage>
<div class="centrage>
A votre avis, pourquoi appliquer la class centrage au div et non au footer ?
- Quand on regarde le modèle, on s'aperçoit que le header et le footer ont les mêmes styles.
- Le contenu du header et du footer ne sont pas collés au bord. Espacez le contenu des bords du header et du footer
Astuce
Utiliser un padding sur le header et le footer
- Les bords des header et footer doivent être collés au bord du navigateur. A votre avis, d'où vient l'espace ?
Astuce
Annuler les marges externes (margin) du body
Concentrons-nous sur le menu.
Quand on regarde le modèle, on s'aperçoit que
- Les éléments du menu n'ont pas de puce. Masquons-les.
Astuce
Utilisez une classe, par exemple, nav-menu
sur la liste <ul class="nav-menu">
Utilisez la propriété list-style-type
>>Info
- Nous constatons que la couleur du texte des liens n'est pas blanche mais bleue. En effet, la couleur du texte des liens n'est pas héritée. Nous allons donc, explicitement, leur spécifier une couleur de texte. De plus, le texte de lien est plus grands, gras et non-souligné.
Astuce
- Les éléments du menu doivent être positionnés les uns à côté des autres.
Nous allons donc utiliser le flex.
Posez-vous les questions suivantes :
- Qui est le parent direct des éléments qui doivent être positionnés côte à côte ? Cet élément sera le conteneur Flex.
- Les éléments positionnés côte à côte doivent-ils autoriser le retour à la ligne ?
- Comment les enfants du conteneur occupent-ils l'espace ?
- Les enfants du conteneur doivent-il posséder une largeur définie ?
Astuce
Qui est le parent direct des éléments qui doivent être positionnés côte à côte ? Cet élément sera le conteneur Flex. ==> la balise <ul>
aura son display en flex. >>Info
Utilisons la class nav-menu appliquée sur
<ul>
Les éléments positionnés côte à côte doivent-ils autoriser le retour à la ligne ? Oui pour être responsive => le balise <ul>
qui est le conteneur flex autorisera le retour à la ligne de ses enfants directs => wrap >>Info
Utilisons la class nav-menu appliquée sur
<ul>
Les éléments se positionnent côte à côte mais ils sont collés. Nous ne désirons pas qu'ils prennent tous l'espace disponible. On va donc simplement les espacer. Nous pouvons travailler avec les marges mais nous pouvons également travailler avec la propriété gap
>>Info
Utilisons la class nav-menu appliquée sur
<ul>
Observez bien, le menu est décalé vers la droite. Utilisons l'inspecteur pour identifier d'où provient ce décalage.
ul
comprend des marges et des padding implicites.
Supprimons les marges et les padding de cet ul.
Utilisons la class nav-menu appliquée sur
<ul>
Réalisons les cartes
- Les cartes ont un fond blanc, une ombre et des bords arrondis
Astuce
Créez un sélecteur par exemple price-card
. Cette class sera attribuée aux articles.
Attribuez-lui
- Les 3 cartes doivent être positionnées les unes à côté des autres.
Nous allons donc utiliser le flex.
Posez-vous les questions suivantes :
- Qui est le parent direct des éléments qui doivent être positionnés côte à côte ? Cet élément sera le conteneur Flex.
- Les éléments positionnés côte à côte doivent-ils autoriser le retour à la ligne ?
- Les enfants du conteneur doivent-il posséder une largeur définie ?
- Comment les enfants du conteneur occupent-ils l'espace ?
Astuce
Qui est le parent direct des éléments qui doivent être positionnés côte à côte ? Cet élément sera le conteneur Flex. ==> la balise <section>
aura son display en flex. >>Info
Utilisons, par exemple, une classe nommée pricing-section
qui sera attribuée à la section parente.
Rappel : plusieurs class peuvent être attribuées au même élément html <section class="centrage pricing-section">
Les éléments positionnés côte à côte doivent-ils autoriser le retour à la ligne ? Oui pour être responsive => la balise <section>
qui est le conteneur flex autorisera le retour à la ligne de ses enfants directs => wrap >>Info
Utilisons la class
pricing-section
appliquée sur<section>
Oups, le titre se met à côté des cartes. Pas de panique, c'est normal.
En effet, une fois la <section>
devenue conteneur flex, tous ses enfants directs sont positionnés côte à côte. Le titre se place donc à côté des cartes.
Pour éviter cela, nous allons demander au titre d'occuper tous l'espace disponible. Pour ce faire, utilisons la propriété flex-basis
.
Les enfants du conteneur doivent-il posséder une largeur définie ? Actuellement, la largeur de la carte est dépendante de son contenu. Nous allons leur imposer une taille en utilisant la propriété flex-basis
. Ex : flex-basis: 15rem;
La propriété
flex-basis
doit être appliquée aux enfants ! Utilisons la classe.price-card
déclarée précédemment.
Comment les enfants du conteneur occupent-ils l'espace ? Nous désirons qu'ils soient centrés sur la largeur de leur parent et posséder un espace entre eux. Pour cela, utilisons les propriétés justify-content
et gap
. >>Info`
Utilisons la class
pricing-section
appliquée sur<section>
- Le contenu de la vignette n'est pas collé au bord
Astuce
Utilisez des marges intérieurs (padding)
Utilisons la class
price-card
- Le texte est centré.
Astuce
Utilisez text-align: center;
Utilisons la class
price-card
- La liste ne contient pas de puce.
Astuce
Utilisez list-style: none
Vous pouvez spécifier la liste de la class price-card =>
.price-card ul
Observez le décalage. A votre avis, d'où vient-il ?
Supprimer les marges et le padding de la liste. A ce moment, nous observons que la liste est collée au lien Get Started. Modifions les marges haut / bas. margin: 1rem 0;
-
La vignette possède un bouton de réservation qui
-
est de couleur
#008CBA;
- comprend du texte blanc
- des bords arrondis
- des marges intérieures pour éviter que le contenu colle au bord du bouton.
Astuce
Créez, par exemple, une class nommée buttonAction
Oups, le bouton chevauche d'autres éléments. Pourquoi ? Rappelez-vous : <a>
est une balise en ligne. Le comportement des padding ne sont pas les mêmes pour les éléments en ligne et pour les éléments de type block. Modifiez le display pour que l'élément se comporte comme un inline-block.
- Les vignettes ne sont pas collées au bord du footer et le titre "Nos offres" est plus bas.
Astuce
Utilisons un padding sur la section pour que l'ensemble de son contenu ne soit pas collé au bord.
Utilisez la class
pricing-section
- Modifions la couleur du prix et la taille
Astuce
Appliquons du vert sur l'ensemble du h3 / modifions la taille / modifions les marges externes / modifions l'épaisseur de la police
.price-card h3 {
font-size: 2rem;
color: #27ae60;
margin: 0.5rem 0;
font-weight: lighter;
}
- Modifions la couleur du prix et la taille /month
Astuce
Modifions la taille et la couleur du texte
.price-card h3 span {
font-size: 0.8rem;
color: #888;
}
- Augmontons l'espace entre les éléments Feature
Astuce
.price-card ul li {
margin: 0.5rem 0;
}
Exe2 : Crearchitex
Méthode
- Créez un nouveau dossier nommé
flexCrearchitex
-
Dans ce dossier,
-
créez un nouveau fichier nommé
flexCrearchitex.html
- copiez-collez ce code dans le fichier html
Code à copier
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>CrearchiteX</title>
</head>
<body>
<header>
<div>
<img src="img/logo.png" alt="CrearchiteX Logo">
<nav>
<ul>
<li><a href="" id="current">Home</a></li>
<li><a href="">Equipe</a></li>
<li><a href="">Projet</a></li>
<li><a href="">Contact</a></li>
</ul>
</nav>
</div>
</header>
<main>
<section>
<blockquote>Le bureau d’architecture <span>CrearchiteX</span> allie création et
techniques.<br> Construction, rénovation et design intérieur.</blockquote>
<img src="img/presentation.jpg" alt="Présentation bureau">
<h1>Nos forces</h1>
<ul>
<li><span>Construction</span>Proin iaculis purus consequat sem cursus digni
ssim. Donec porttitor entume suscipit. Aenean rhoncus posuere odio in tincidunt.</li>
<li><span>Rénovation</span>Nam aliquam volutpat leo vel lorem bibendum.
Nuncea
elit purusa, tempus pulvinar rhoncus egesta vel nibh volutpat leo.</li>
<li><span>Intérieur</span>Fusce porttitor turpis quis urna molestie cons
equat.
Nam felis purus, tincidunt sed dapibus ugravida fusce et magna libero.</li>
</ul>
</section>
<section>
<h2>Travaux récents</h2>
<article>
<img src="img/travRecent01.jpg" alt="Travaux récents 01 Maison unifamiliale ">
<h3>Maison unifamiliale</h3>
<p>Rénovation complète des façades principales, extensions magnifiques.</p>
</article>
<article>
<img src="img/travRecent02.jpg" alt="Travaux récents 02 Fermette ">
<h3>Fermette</h3>
<p>Restauration d'une fermette à colombages du 16e s. en deux habitations.</p>
</article>
<article>
<img src="img/travRecent03.jpg" alt="Travaux récents 03 Multi-logements">
<h3>Multi-logements</h3>
<p>Transformation d'un immeuble en deux logements.</p>
</article>
<article>
<img src="img/travRecent01.jpg" alt="Travaux récents 01 ">
<h3>Maison unifamiliale</h3>
<p>Rénovation complète des façades principales, extensions magnifiques.</p>
</article>
<article>
<img src="img/travRecent02.jpg" alt="Travaux récents 02 ">
<h3>Fermette</h3>
<p>Restauration d'une fermette à colombages du 16e s. en deux habitations.</p>
</article>
<article>
<img src="img/travRecent03.jpg" alt="Travaux récents 03 ">
<h3>Multi-logements</h3>
<p>Transformation d'un immeuble en deux logements.</p>
</article>
<article>
<img src="img/travRecent03.jpg" alt="Travaux récents 03 ">
<h3>Multi-logements</h3>
<p>Transformation d'un immeuble en deux logements.</p>
</article>
<article>
<img src="img/travRecent03.jpg" alt="Travaux récents 03 ">
<h3>Multi-logements</h3>
<p>Transformation d'un immeuble en deux logements.</p>
</article>
</section>
</main>
<footer>
<div>
<div>
<h3>Contact</h3>
<ul>
<li>Rue de l'espoir, 666 <br>4000 Liège</li>
<li>04 123 45 69</li>
</ul>
</div>
<div>
<h3>Jobs</h3>
<ul>
<li><a href="#">Collaborateurs</a></li>
<li><a href="#">Administratifs</a></li>
<li><a href="#">Informatique</a></li>
</ul>
</div>
<div>
<h3>Liens rapides</h3>
<ul>
<li><a href="#">Projets</a></li>
<li><a href="#">Collaborateurs</a></li>
<li><a href="#">Nous contacter</a></li>
</ul>
</div>
</div>
</footer>
</body>
</html>
- créez un nouveau dossier nommé
css
- dans ce dossier css, créez un nouveau fichier nommé
flexCrearchitex.css
-
téléchargez les images image crearchitex
-
Reproduisez l'interface en tenant compte des consignées données ci-dessous >> Voir l'interface
Contraintes
- Vous ne pouvez pas utiliser de techniques comme le float, position absolue, position relative.
- Le code Html ne peut être modifié, seuls des class ou id peuvent être ajoutés
- Le code Html doit être valide W3C
- Le code Css doit être valide W3C
Par où commencer ?
- Analysez le code html fourni.
- La feuille de style doit être externe et liée à la page html. Elle sera située dans le dossier
css
. (Liaison) - Travaillez étape par étape. Inspirez-vous de l'exercice précédent.