Premier semestre (15h)
Deuxième semestre (15h)
Internet, c'est le réseau (ou plutôt des milliers de réseaux), l'infrastructure.
Conçu à la fin des années 60 sous le nom d'Arpanet.
Il renferme plusieurs services :
Le web est un service d'Internet, on parle donc de sites web.
Un ensemble de pages web liées entre elles sous le même nom de domaine par des liens hypertextes, stockées sur un serveur web connecté au réseau Internet (ou un réseau local), accessibles via un navigateur web.
Le nom de domaine est l'adresse de votre site et son domaine (fr, com, net, etc.).
"Nom de domaine" ne doit pas être confondu avec "URL" :
Site vitrine (ou site de marque) :
Site catalogue :
Site marchand (ou e-commerce) :
Site institutionnel :
Site communautaire :
Site intranet / extranet :
On peut aussi créer des fichiers "index.html" dans les sous-répertoires
Le haut de page (header)
Le menu principal
La zone de contenus
Le pied de page (footer)
Il faut garder une homogénité visuelle pour ne pas gêner l'internaute
L'étape de conception est primordiale !
Ce langage communique avec le navigateur web grâce à des balises.
Il permet d'indiquer au navigateur le type de contenu à afficher :
Il permet de structurer la page et lui donner un sens.
Les balises servent à indiquer des informations au navigateur web :
Une balise, ça ressemble à ça :
<p>Un paragraphe</p>
Ces navigateurs disposent aussi d'un inspecteur d'éléments
Elles entourent le contenu visé :
<h1>Un titre</h1>
<p>Un paragraphe</p>
Elles n'entourent rien (pas besoin)
Un saut de ligne<br/>
<img src="monimage.jpg"/>
L'attribut donne des indications supplémentaires au navigateur.
On trouve plusieurs types d'attributs :
Par exemple, pour une image :
<img src="monimage.jpg"/>
Elle indique la version de HTML utilisée
<!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!doctype html>
Elle marque le début du document HTML
<!doctype html>
<html>
</html>
C'est l'entête de la page
On met cette balise entre la balise ouvrante et fermante <html>
<!doctype html>
<html>
<head>
<!-- Métadonnées -->
</head>
</html>
C'est le contenu de la page
<!doctype html>
<html>
<head>
<!-- Métadonnées -->
</head>
<body>
<!-- Contenu -->
</body>
</html>
Pour commenter un document, utilisez la balise suivante :
<!-- Mon commentaire -->
Permet une meilleure lisibilité du code :
Code non-indenté | Code indenté |
Elle colore les balises du fichier HTML pour une meilleure lisibilité
C'est l'un des principaux intérêts de l'utilisation d'un éditeur de code
Il faut les afficher pour éviter des erreurs :
<!doctype html>
<html>
<head>
<!-- Métadonnées -->
</head>
<body>
<!-- Contenu -->
</body>
</html>
<meta charset="utf-8"/>
<title>Titre de ma page</title>
<meta name="description" content="Description de ma page"/>
<meta name="keywords" content="Un mot clé, un autre mot clé"/>
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Titre de ma page</title>
<meta name="description" content="Description de ma page"/>
<meta name="keywords" content="Un mot clé, un autre mot clé"/>
</head>
<body>
<!-- Contenu -->
</body>
</html>
<p>Mon premier paragraphe</p>
<p>Mon deuxième paragraphe</p>
<p>Mon troisième paragraphe</p>
<br/>
<p>
Ma première ligne<br/>
Ma deuxième ligne
</p>
<h1>Un titre principal</h1>
<h2>Un titre de niveau 2</h2>
<h2>Un titre de niveau 3</h2>
Etc.
<strong>Mon texte mis en exergue</strong>
<em>Une emphase</em>
Valeur sémantique et non visuelle !
<b>Mon texte mis en gras</b>
<i>Mon texte mis en italique</i>
HTML n'est pas fait pour du visuel. On fera ça en CSS.
<ul>
<li>Premier élément de liste</li>
<li>Deuxième élément de liste</li>
<li>Troisième élément de liste</li>
<li>Quatrième élément de liste</li>
<li>Cinquième élément de liste</li>
</ul>
<ol>
<li>Premier élément de liste</li>
<li>Deuxième élément de liste</li>
<li>Troisième élément de liste</li>
<li>Quatrième élément de liste</li>
<li>Cinquième élément de liste</li>
</ol>
L'attribut "type" permet de choisir le type de liste ordonnée
<ol type="I">
<li>Premier élément de liste</li>
<li>Deuxième élément de liste</li>
<li>Troisième élément de liste</li>
</ol>
<ul>
<li>Premier élément de liste
<ul>
<li>Premier sous-élément de liste</li>
<li>Deuxième sous-élément de liste</li>
</ul>
</li>
<li>Deuxième élément de liste</li>
<li>Troisième élément de liste</li>
</ul>
Permettent d'organiser des informations en tableaux
Trois balises indispensables :
Des balises sémantiques :
Exemple de tableau :
<table>
<thead>
<tr>
<td>Prénom</td>
<td>Nom</td>
</tr>
</thead>
<tbody>
<tr>
<td>Peter</td>
<td>Parker</td>
</tr>
<tr>
<td>Bruce</td>
<td>Wayne</td>
</tr>
</tbody>
</table>
Ce qui donne :
Prénom | Nom |
Peter | Parker |
Bruce | Wayne |
On peut changer la largeur du tableau avec l'attribut "width"
<table width="400">
<thead>
<tr>
<td>Prénom</td>
<td>Nom</td>
</tr>
</thead>
<tbody>
<tr>
<td>Peter</td>
<td>Parker</td>
</tr>
<tr>
<td>Bruce</td>
<td>Wayne</td>
</tr>
</tbody>
</table>
Ce qui donne :
Prénom | Nom |
Peter | Parker |
Bruce | Wayne |
Le lien hypertexte est un texte cliquable entouré de la balise <a>.
<a href="http://adresse.fr">Mon lien hypertexte</a>
<a href="http://adresse.fr" title="Description du lien">Mon lien hypertexte</a>
<a href="http://www.univ-poitiers.fr">Site de l'Université de Poitiers</a>
<a href="/sous-repertoire/fichier.html">Lien vers fichier.html dans le répertoire "sous-repertoire"</a>
<a href="/">Lien vers la page d'accueil (index.html)</a>
<a href="sous-repertoire/fichier.html">Lien vers fichier.html dans le répertoire "sous-repertoire"</a>
<a href="../fichier.html">Lien vers un fichier du répertoire racine</a>
<a href="C:\Utilisateurs\nomutilisateur\Bureau\monrepertoire\index.html">Lien absolu en développement local</a>
On appelle ça une ancre
<p id="cible">Contenu cible</p>
<a href="#cible">Lien vers la cible</a>
Attention : un ID ne peut être utilisé qu'une fois dans la page
Méthode semblable aux liens hypertextes
<img src="mon-image.jpg"/>
<img src="mon-image.jpg" alt="texte alternatif" width="640" height="480"/>
Consignes :
Si besoin, le lien d'où est tiré le texte :
Consignes :
Ou "feuilles de styles en cascade" (on verra pourquoi)
C'est le langage qui sert à mettre en forme les pages web
La version actuelle de CSS est la 3
Avec un même code HTML, CSS permet de faire des designs complètement différents :
Du CSS, ça se déclare.
3 méthodes pour déclarer du CSS :
Ce fichier externe, c'est une "feuille de styles".
On utilisera cette même feuille de styles sur chacune des pages du site :
On l'appelle dans la balise <head></head> avec la balise <link/>
<head>
<meta charset="utf-8"/>
<title>Titre de ma page</title>
<meta description="Description de ma page"/>
<meta keywords="Mots-clés, de ma page"/>
<link href="monfichier.css" rel="stylesheet"/>
</head>
Avec la propriété "color" :
body {
color:#999;
}
Deux manières principales de définir une couleur
#f4c242
rgb(244, 194, 66)
On peut aussi les appeler par leur nom :
blue, red, yellow, etc.
Avec la propriété "text-align" :
body {
text-align:justify;
}
Quatre valeurs possibles :
Avec la propriété "font-size" :
body {
font-size:1em;
}
On la définit (entre autres) en "em"
body {
font-size:1em; // 1em est notre taille de base
}
h1 {
font-size:1.8em;
}
h2 {
font-size:1.5em;
}
h2, h4 {
font-size:1.2em;
}
Avec la propriété "line-height"
body {
font-size:1em; // 1em est notre taille de base
line-height:1.4em;
}
Avec la propriété "font-weight" :
body {
font-weight:normal;
}
Plusieurs valeurs possibles :
Avec la propriété "font-style" :
body {
font-style:italic;
}
Plusieurs valeurs possibles :
Avec la propriété "text-decoration" :
body {
text-decoration:underline;
}
Plusieurs valeurs possibles :
Avec la propriété "text-transform" :
body {
text-transform:uppercase;
}
Plusieurs valeurs possibles :
Avec la propriété "font-family" :
body {
font-family:Arial, Verdana, sans-serif;
}
@font-face {
font-family: 'OpenSansRegular';
url('fonts/open-sans/opensans-regular-webfont.ttf') format('truetype'),
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'OpenSansRegularBold';
url('fonts/open-sans/opensans-bold-webfont.ttf') format('truetype'),
font-weight: bold;
font-style: normal;
}
Dans l'exemple ci-dessous :
<body>
<ul>
<li>Un élément de liste</li>
</ul>
<body>
Les balises sont imbriquées
body {
color:red;
}
p { } /* La balise <p> est enfant de <body> : sauf indication contraire, le texte sera rouge lui aussi */
body {
color:red; /* Rouge devient la couleur de texte par défaut de la page */
}
/* on écrase le style du parent */
p {
color:green; /* Tous les paragraphes seront en vert */
}
ul li {
color:red;
}
ul li strong {
color:red;
}
ul li ul {
color:red;
}
Les valeurs relatives sont basées sur la valeur du parent :
body {
font-size:0.8em;
}
ul {
font-size:0.8em;
}
Le plus basique : pour cibler tous les éléments d'un même type
a { color:#f00; }
p { font-size:0.8em }
L'identifiant est représenté par le symbole dièse "#"
<p id="intro">Mon paragraphe avec un identifiant</p>
#intro { color:#f00; }
La classe est représentée par le symbole point "."
<p class="citation">Mon paragraphe avec un identifiant</p>
.citation { color:#f00; }
On choisit les noms par leur rôle et non leur apparence
On reste simple !
Pas de fantaisies, juste des lettres, chiffres et tirets
Principe d'entonoir : vous partez d'un parent pour aller jusqu'à la balise ciblée
ul li { color:#f00; }
On peut même mixer avec un identifiant ou une classe !
ul.maliste li { color:#f00; }
La pseudo classe permet de cibler un élément sans avoir à ajouter de classe.
Elle cible son état, ou sa position dans une suite d'éléments.
On reconnait une pseudo classe parce qu'elle commence avec le symbole ":".
Exemples de pseudo-classes :
a:hover { text-decoration:underline }
a:focus { text-decoration:underline }
a:active { text-decoration:underline }
a:visited { text-decoration:underline; color:#F00; }
ul li:first-child { color:#f00 } /* Sélectionne le 1e élément de liste */
Attention : pour que ça fonctionne, il faut que les enfants directs du parent soient tous du même type (par exemple, que des <li> dans un parent <ul>)
ul li:last-child { color:#f00 } /* Sélectionne le dernier élément de liste */
Attention : pour que ça fonctionne, il faut que les enfants directs du parent soient tous du même type (par exemple, que des <li> dans un parent <ul>)
ul li:nth-child(2) { color:#f00 } /* Sélectionne le 2e élément de liste */
Attention : pour que ça fonctionne, il faut que les enfants directs du parent soient tous du même type (par exemple, que des <li> dans un parent <ul>)
Vous pouvez retrouver la majorité des sélecteurs sur cette page
On divise souvent les pages en 4 parties distinctes :
Avec des balises HTML dites structurantes :
...pourquoi s'embêter avec les autres ?
Les balises de type block prennent toute la largeur de l'écran
Elles créent un retour à la ligne avant et après, en poussant les contenus suivants à la ligne.
On peut leur attribuer une largeur et une hauteur
Les balises "inline" ne provoquent pas de retour à la ligne.
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Titre de ma page</title>
<meta description="Description de ma page"/>
<meta keywords="Mots-clés, de ma page"/>
</head>
<body>
<header>
<!-- contenu de mon en-tête de page -->
</header>
<nav>
<!-- contenu de mon menu -->
</nav>
<section>
<!-- contenu principal -->
</section>
<section>
<!-- contenu secondaire -->
</section>
<footer>
<!-- contenu de mon pied de page -->
</footer>
</body>
</html>
Il faut maintenant la mettre en page grâce à CSS
<link href="css/styles.css" rel="stylesheet"/>
L'objectif est d'arriver à ce résultat :
Les balises structurantes sont dites de type "block"
La largeur s'applique avec la propriété "width"
balise {
width:800px;
}
balise {
width:800px;
}
balise {
width:100%;
}
balise {
max-width:800px;
min-width:200px;
}
La hauteur s'applique avec la propriété "height"
balise {
height:200px;
}
Le fonctionnement est le même qu'avec la propriété width
On fait appel à la propriété "background-color"
balise {
background-color:#000000;
}
body {
background-color:#dddddd;
}
header {
background-color:#c34b4b;
}
On fait appel à la propriété "background-image"
balise {
background-color:#000000;
background-image:url('../img/image.png');
}
Avec la propriété "background-repeat" :
background-repeat:repeat;
Les possibilités sont les suivantes
Avec la propriété "background-position" :
background-position:center top;
Deux valeurs, la largeur (x) et la hauteur (y) séparées par une espace :
header {
background-color:#dddddd;
background-image:url(../img/monimage.png);
background-position:center top;
background-repeat:no-repeat;
}
Avec la propriété "margin" :
balise {
margin:50px;
}
balise {
margin:50px 40px 30px 20px;
}
balise {
margin-top:50px;
margin-right:40px;
margin-bottom:30px;
margin-left:20px;
}
balise {
margin:50px 10px;
}
Une marge interne ?
Avec la propriété "padding" :
balise {
padding:50px;
}
Avec la propriété "border" :
balise {
border:1px solid #ddd;
}
Cette propriété est composée de 3 valeurs séparées par des espaces :
balise {
border-left:1px solid #ddd;
border-top:2px dotted #f00;
}
Dans cet exemple :
Par défaut, les marges internes et les bordures modifient la taille des boites.
Pour un bloc de 800px de large avec un padding de 20px et une bordure de 1px de chaque côté, il faut ajouter à ces 800px de large :
On se retrouve avec une boite de 842px au lieu des 800px souhaités de base. Cela pourrait poser des problèmes de mise en page.
balise {
width:800px;
padding:20px;
border:1px solid #ddd
box-sizing:border-box;
}
Votre site ne fera généralement pas la largeur de votre écran.
Il va falloir le centrer sur l'écran, grâce à la propriété "margin".
balise {
margin:0 auto;
}
Ce qui revient à écrire :
balise {
margin-top:0;
margin-right:auto;
margin-bottom:0;
margin-left:auto;
}
L'objectif est d'arriver à ce résultat :
On souhaite que le fond de notre page soit gris.
body {
background-color:#ddd;
}
Ca, c'était facile.
Voici les caractéristiques souhaitées pour notre header :
Autant de propriétés qu’on sait désormais traduire en CSS !
header {
width:800px;
height:200px;
background:#c34b4b;
margin:5px auto;
}
Voici les caractéristiques souhaitées pour notre nav :
C'est quasiment le même code que pour le header !
Les caractéristiques sont les mêmes que pour le header.
On veut centrer nos deux boites en les gardant côte à côte.
<div>
<section>
<!-- contenu principal -->
</section>
<section>
<!-- contenu secondaire -->
</section>
</div>
Il vaut mieux l'identifier parce qu'on risque d'avoir plusieurs conteneurs à différents endroits de notre site. On ne pourra donc pas mettre en forme notre conteneur en faisant appel à son type d'élément. Il faut le différencier en lui donnant un identifiant (ou une classe si vous pensez avoir besoin de ce conteneur là plusieurs fois sur votre page).
<div id="container">
<section>
<!-- contenu principal -->
</section>
<section>
<!-- contenu secondaire -->
</section>
</div>
#container {
width:800px;
background:#c34b4b;
margin:5px auto;
}
On va commmencer par donner une classe à chacune de nos sections.
Si on veut donner un style particulier à la première balise de section et un style particulier à la 2e, on ne pourra pas les cibler par leur type de balise (sauf en utilisant une pseudo-classe type "first-child"/"last-child"). Il faut donc être capable de les discriminer avec une classe, par exemple.
<div id="container">
<section class="content">
<!-- contenu principal -->
</section>
<section class="sidebar">
<!-- contenu secondaire -->
</section>
</div>
Dans le code ci-dessus, on a ajouté la classe "content" à notre première section, et la classe "sidebar" à notre 2e section.
Oui, si on estime n'avoir à utiliser ces identifiants une seule fois dans la page.
Cependant, les deux balises ont des caractéristiques communes, il serait dommage de les répéter deux fois.
Pour ces caractéristiques, nous allons donc cibler par type de balise, pour modifier toutes les balises de ce type : ici le type <section>.
section {
height:500px;
}
Ensuite, nous allons définir la largeur et la couleur de chacune des sections.
.content {
width:550px;
background:rgba(255,255,255,0.5);
}
.sidebar {
width:250px;
background:rgba(0,0,0,0.5);
}
Ha, oui... On avait vu les couleurs en RGB, mais il existe aussi RGBA : c'est la même chose, sauf que la dernière valeur gère la transparence de la couleur, de 0 (transparent) à 1 (opaque).
Si vous avez bien suivi les différentes étapes, voici ce que ça devrait donner :
Pour rappel : les balises de section sont des balises de type « block ».
Nous avons vu que nous avions un problème avec le positionnement du bloc « sidebar ». Il va falloir mettre nos deux sections côte à côte.
Il existe plusieurs manières de positionner des blocs. Nous allons voir les plus courantes. La première, c’est la propriété « float ».
Elle peut prendre 4 valeurs :
Voici la représentation de nos deux sections dans un conteneur :
Dans notre maquette, nous allons donc utiliser la propriété « float » pour placer nos deux sections côte à côte. La première va flotter à gauche, et la deuxième à droite :
.content {
width:550px;
background:rgba(255,255,255,0.5);
float:left;
}
.sidebar {
width:250px;
background:rgba(0,0,0,0.5);
float:right;
}
Quand on fait flotter deux éléments dans un conteneur, la hauteur du conteneur ne s'ajuste pas automatiquement au contenu.
Dans notre CSS, nous n'avons indiqué aucune hauteur à notre conteneur (il fait donc 0px de haut), et nous ne voulons pas le faire.
Pour notre maquette d'exemple, nos sections ont une hauteur fixe (500px). On pourrait donner cette même hauteur à notre conteneur et le problème serait réglé.
En règle générale, la hauteur de vos sections ne sera pas fixe, puisqu'elle s'adaptera à la longueur de son contenu.
Il est donc impossible de savoir à l'avance quelle sera la hauteur de vos sections.
La propriété overflow permet de gérer les débordements de contenus.
Si un contenu déborde, elle permet :
Respectivement, ses propriétés sont :
On va donc lui appliquer la propriété "overflow:auto" :
#container {
width:800px;
background:#c34b4b;
margin:5px auto;
overflow:auto;
}
Nous venons de voir le principe du « float » : cela permet déjà de faire pas mal de choses. Mais à vrai dire, ce n’est pas forcément la manière la plus propre de positionner des éléments (ça ne vous empêche pas de l’utiliser, je ne vous demande pas non plus de devenir des pros de l’intégration web).
Mais pour bien comprendre la positionnement, il est intéressant de s’initier à la propriété « display ».
Je vous ai déjà parlé de balises de type « block », et j’ai aussi évoqué les balises de type « inline ».
Nous avons vu que les balises de type « block » ont des caractéristiques propres : elles forment des boites, des espaces dimensionnables, et chacune provoque un retour à la ligne.
Les balises de type « inline », se positionnent les unes à côté des autres sans former de boites, puisqu'elles n'ont pas de dimensions à proprement parler.
En CSS, il est possible de faire d’une balise « block » une balise « inline », et vice-versa. Tout cela grâce à la propriété « display » :
div {
display:inline;
}
a {
display:block;
}
Cette propriété peut prendre principalement 4 valeurs
On ne va pas approfondir plus que ça dans cette présentation, vous avez déjà beaucoup de choses à retenir.
Voici tout de même un bon lien pour aller plus loin avec cette propriété "display" :
https://la-cascade.io/la-difference-entre-block-et-inline/
A noter que nous allons utiliser cette propriété dans l'exercice qui va suivre :)
Encore une fois, l'idée n'est ni de vous bourrer (encore plus) le crane, ni de faire de vous des experts de CSS.
Je ne m'étalerai donc pas trop sur cette propriété, mais sachez qu'elle existe et qu'elle peut être utile.
La propriété "position" peut prendre trois valeurs :
Pour l’utilisation, je préfère vous donner quelques liens :
Dans ce chapitre, nous allons intégrer une vraie page web, avec une vraie mise en page, des images et tout.
Je vais tout vous expliquer pas à pas, et normalement, si certaines choses étaient un peu floues, elle devraient devenir plus claires après cet exercice.
Il y a deux/trois petites choses en plus qu'on n'a pas vues avant, je vous les expliquerai en cours de route :)
L'idée, c'est de mettre en pratique ce que vous avez appris mais en vous faisant un peu réfléchir. A chaque étape, vous trouverez le code qui vous permettra d'obtenir le rendu désiré, mais il sera masqué par défaut. Vous pourrez l'afficher, mais je vous conseille d'exercer votre réflexion car il n'y a rien de tel pour bien comprendre le code.
Téléchargez l'archive contenant tous les fichiers nécessaires en cliquant sur le lien ci-dessous :
Cette étape est très importante avant se lancer dans la structure HTML.
Il faut observer les différentes zones de notre maquette.
On peut noter 7 sections principales qui sont :
Cette analyse de la page va nous donner une première idée de notre code HTML.
On aura :
Normalement, vous avez téléchargé l'archive contenant tous les fichiers pour l'exercice.
Cette archive contient un fichier "index.html", et deux sous-repertoires ("css", qui contient un fichier "styles.css" et "img", qui contient les fichiers images).
Ouvrez votre fichier "index.html".
N'oubliez pas, dans Notepad++, de changer l'encodage du fichier en "UTF-8 (Sans BOM)" pour ne pas avoir de problème d'affichage des accents par la suite.
Vous la connaissez, mais je vous la remets ici pour être sûrs de partir sur de bonnes bases :)
<!doctype html>
<html>
<head>
<!-- Métadonnées -->
</head>
<body>
<!-- Contenu -->
</body>
</html>
Pour rappel, ça se passe dans la balise <head> et on va renseigner :
Je vous laisse essayer de vous débrouiller tout seul pour renseigner ces éléments, mais je vous mets le code ci-dessous si vous avez besoin :
Ca a été ? Alors on peut passer à la suite !
Maintenant qu'on a nos méta-données, on va pouvoir passer à la structure proprement dite de notre page. C'est à dire que nous allons renseigner les balises qui nous permettrons de délimiter les différentes parties de notre page web.
Le haut de page est composé d'une image, ainsi que d'un titre.
Je vous laisse réfléchir un peu, en vous donnant la réponse plus bas pour vous aiguiller :p
On est sur du très simple : un haut de page, dans lequel on trouve une image et un titre... Comment le traduisez-vous en HTML ?
Pour rappel, il faut voir un menu comme une LISTE de liens ;) Pour le reste, je vous laisse réfléchir mais je vous mets le code ci-dessous.
On a vu dans l'analyse de la maquette qu'on pouvait découper le contenu de la page (mis à par le haut de page, le menu principal et le pied de page) en quatre sections.
Ici, on souhaite intégrer la première. On ne fait pour le moment que du HTML donc on ne s'occupe pas du visuel. Le code final est assez simple, même si il faut penser à quelque chose en particulier.
Ca se complique un peu ! Je sentais que vous commenciez à vous ennuyer :p
Premièrement on aura deux éléments côte à côte. Aucune incidence en HTML si ce n'est qu'il va falloir délimiter chaque élément pour en faire des boites qui pourront se positionner côte à côte toute à l'heure.
Donc on a à gauche un bloc de texte, avec un titre et trois paragraphes. A droite, un bloc grisé avec un titre et des données qu'il serait peut-être judicieux d'intégrer dans... un tableau !
Et si on montait la difficulté d'encore un cran ?
Là on n'a plus deux éléments côte à côte mais quatre, avec un peu plus de choses dedans... Avant de vous jeter sur la solution, réfléchissez un peu à ce que ça pourrait donner en HTML :)
C'est d'une simplicité monstrueuse tant elle ressemble à la deuxième section !
Je vais juste vous apprendre à intégrer une Google Map.
- Allez sur ce lien : Vers Google Maps
- Cliquez sur "Partager" dans le volet à gauche de la page. Une fenêtre s'ouvre.
- Cliquez sur l'onglet "Intégrer la carte". - Changez "Moyenne" pour "Taille personnalisée". Notre future carte fera 600 x 300. - Copiez le code généré dans le champ de texte, et collez-le dans votre HTML. C'est tout :)
Je n'ai pas fait grand chose à ce niveau mais n'hésitez pas à vous entrainer à intégrer des listes de liens par exemple, ou des images.
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Le château d'Angers</title>
</head>
<body>
<header id="main-header">
<img src="img/logo.jpg" alt="Château d'Angers"/>
<h1>Le château d'Angers</h1>
</header>
<nav id="main-nav">
<ul>
<li><a href="#presentation">Présentation</a></li>
<li><a href="#actualites">Actualités</a></li>
<li><a href="#visiter">Visiter le château</a></li>
</ul>
</nav>
<section id="bandeau">
<div class="content">
<img src="img/bandeau.jpg" alt=""/>
</div>
</section>
<section id="presentation">
<div class="content">
<h2>Présentation du château</h2>
<div class="text">
<p>Le château d'Angers, aussi appelé château des ducs d'Anjou, est situé dans la ville d’Angers dans le département de Maine-et-Loire en France.</p>
<p>La forteresse est édifiée sur un promontoire de schiste ardoisier qui domine la Maine. Le site est occupé dès l’antiquité du fait de sa position défensive stratégique. Par la suite, les comtes d'Anjou y installent leurs demeures, jusqu'à la fin de l'empire Plantagenêt qui voit le royaume de France conquérir le comté d'Anjou.</p>
<p>Louis IX fait construire le château actuel au XIIIe siècle tandis que les ducs d'Anjou le transforment en résidence seigneuriale au XVe siècle. Yolande d'Aragon y donne naissance à René d'Anjou. Au XVIIe siècle, à la suite des troubles des guerres de religion, le roi ordonne la destruction du château, mais seule la partie supérieure des tours est détruite. Il est par la suite transformé en prison, puis en garnison et dépôt de munition pendant la Seconde Guerre mondiale. Au début du XXIe siècle, il héberge la tenture de l'Apocalypse et est un des sites touristiques les plus visités de Maine-et-Loire. Son ouverture au tourisme est gérée par le Centre des monuments nationaux.</p>
</div>
<div class="infos">
<h3>Fiche technique</h3>
<table>
<tr>
<td>Période</td>
<td>Médiéval</td>
</tr>
<tr>
<td>Type</td>
<td>Forteresse</td>
</tr>
<tr>
<td>Début constr.</td>
<td>XIIIe siècle</td>
</tr>
<tr>
<td>Fin constr.</td>
<td>XVIe siècle</td>
</tr>
<tr>
<td>Destination initiale</td>
<td>Résidence et défense</td>
</tr>
<tr>
<td>Protection</td>
<td>Classé MH (1875, 1913)</td>
</tr>
<tr>
<td>Lieu</td>
<td>Angers (49), France</td>
</tr>
</table>
</div>
</div>
</section>
<section id="actualites">
<div class="content">
<h2>Actualités</h2>
<div class="actu">
<img src="img/actu.jpg" alt="Texte alternatif"/>
<h3>Titre de l'actualité</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor.</p>
<p><a href="#">Lire la suite</a></p>
</div>
<div class="actu">
<img src="img/actu.jpg" alt="Texte alternatif"/>
<h3>Titre de l'actualité</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor.</p>
<p><a href="#">Lire la suite</a></p>
</div>
<div class="actu">
<img src="img/actu.jpg" alt="Texte alternatif"/>
<h3>Titre de l'actualité</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor.</p>
<p><a href="#">Lire la suite</a></p>
</div>
<div class="actu">
<img src="img/actu.jpg" alt="Texte alternatif"/>
<h3>Titre de l'actualité</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor.</p>
<p><a href="#">Lire la suite</a></p>
</div>
</div>
</section>
<section id="visiter">
<div class="content">
<h2>Visiter le château</h2>
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2697.021852346613!2d-0.5621886841106488!3d47.4700036053968!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x480878c6fd07f131%3A0x689453eed1cc89ea!2sCh%C3%A2teau+d'Angers!5e0!3m2!1sfr!2sfr!4v1453153966667" width="600" height="300" frameborder="0" style="border:0" allowfullscreen></iframe>
<div class="infos">
<h3>Infos pratiques</h3>
<p>
<span class="bold">Adresse :</span><br/>
2 Promenade du Bout du Monde<br/>
49100 Angers
</p>
<p>
<span class="bold">Numéro de téléphone :</span><br/>
02 41 86 48 77
</p>
<p>
<span class="bold">Horaires d'ouverture :</span><br/>
Du lundi au dimanche, de 9h30 à 18h30
</p>
</div>
</div>
</section>
<footer>
</footer>
</body>
</html>
Maintenant qu'on a notre code HTML, on va pouvoir mettre en page grâce à CSS.
Dans le sous-répertoire CSS, vous devez avoir un fichier "styles.css" : ouvrez-le dans votre éditeur.
Reste à lier la feuille de styles à notre fichier HTML.
Vous devez savoir faire, alors je vous regarde.
Mais je vous mets la solution ci-dessous :)
Il n'y a pas beaucoup de styles généreaux mais concrètement, voilà ce qu'on va éditer :
Dans le header, il y a deux éléments : une image et un titre.
On va d'abord mettre en forme notre bloc header : pas grand chose à faire si ce n'est mettre une marge haute de 20px pour que notre header ne se retrouve pas trop collé à la fenêtre du navigateur. On va aussi indiquer qu'on souhaite centrer le texte, ce qui aura pour effet de centrer l'image et le titre.
#main-header {
margin-top: 20px;
text-align: center;
}
Ensuite, on va mettre en forme notre image. Vous avez vu, elle est en noir et blanc alors que je vous l'ai donnée en couleurs, et ronde alors qu'elle est carré normalement. Pas besoin d'ouvrir Photoshop, vous allez voir.
On va dans un premier temps lui donner des dimensions : 200px de large et 200px de haut (ça ne devrait pas vous poser de problème).
La propriété "filter" est très puissante, puisqu'elle permet d'éditer certaines valeurs d'une image, comme sa luminosité, son contraste, sa netteté ou encore sa saturation.
Nous, on souhaite passer l'image en noir et blanc, on va donc utiliser la valeur "grayscale(1)", qui signifie que le niveau de gris sera au maximum, zéro indiquant qu'on souhaite les couleurs initiales.
#main-header img {
filter:grayscale(1);
}
Plus d'infos sur la propriété "filter"
Une autre fonctionnalité intéressante de CSS, c'est la possibilité de créer des bords arrondis. Parfois plus esthétiques qu'un angle droit classique, les bords arrondis sont très utilisés en CSS.
On peut détourner cette fonctionnalité pour arrondir complètement des images : il suffit de faire des bords arrondis assez grands pour qu'ils forment un cercle.
Ici, on a une image de 200px par 200px. Vu qu'elle a quatre bords, il faudra que chaque arrondi fasse au moins 100px pour former un rond. Je vous montre :
#main-header img {
filter:grayscale(1);
border-radius:100px;
}
Et voilà, notre image forme maintenant un cercle !
Reste à mettre le titre en forme. Voici les informations pour votre CSS :
Petite difficulté ici, surtout qu'on n'a pas vraiment vu comment faire. On pourrait très bien faire une div et la styler mais ce ne serait pas une très bonne solution. Ce qu'on veut, c'est qu'APRES chaque H1, cette barre de séparation apparaisse.
Si j'ai mis APRES en capitales, ce n'est pas pour rien, car nous utiliser le pseudo-élément ":after". Comme ceci :
h1:after {
...
}
Ensuite, il ne reste plus qu'à styler ce qu'on souhaite voir apparaître après notre titre, à savoir :
On continue avec l'intégration du menu principal. Plutôt simple normalement.
On a mis notre liste dans un élément <nav> mais pas besoin de le mettre en forme, on va directement passer à notre élément <ul>.
Comme tout élément block, on va pouvoir mettre en forme notre <ul> en lui donnant :
Pas grand chose à faire de ce côté, si ce n'est les aligner sur une seule ligne. Car par défaut les éléments de liste s'affichent les uns en dessous des autres.
Il faut donc juste changer leur mode d'affichage (display).
Rien de bien compliqué, je vous indique ce qui est attendu :
Très simple !
On veut une section avec un fond gris et une image dans un conteneur.
Cette section a un identifiant, ça tombe bien on va pouvoir l'utiliser pour la cibler en CSS.
On va juste indiquer deux choses :
Rappelez-vous, dans le HTML, on s'est dit qu'il fallait mettre un conteneur pour centrer tous les contenus de notre site. Il faut maintenant le mettre en forme, en indiquant :
Ha bah non, rien à faire :)
Là, on a un titre, puis deux blocs : un de texte et un tableau.
Il va falloir mettre en forme le titre, puis faire flotter les deux blocs côte à côte.
Pas besoin de toucher à la section, ni au conteneur qui est déjà mis en forme grâce à sa classe "content".
Le titre a la mise en forme suivante :
Pour rappel, notre bloc de texte a la classe "text". C'est elle que nous allons utiliser pour cibler notre élément dans le CSS.
Il aura pour propriétés :
Pour rappel, notre bloc "Fiche technique" a la classe "infos". C'est elle que nous allons utiliser pour cibler notre élément dans le CSS.
Il aura pour propriétés :
On va aussi mettre en forme le titre H3 de ce bloc :
Et c'est autour du tableau :
Pour cibler la première cellule de chaque ligne, il faudra utiliser le sélecteur :first-child.
Le plus difficile, sans être extrêmement complexe.
On a une section sur fond gris, un titre gris, et quatre actualités qui se partagent les 1000px de large.
Pas grand chose à faire sur la section, mais tout de même, on va lui ajouter :
La seule différence avec les autres titres H2, c'est la couleur. Il va donc falloir indiquer : "dans la section ayant l'ID "actualites", affiche moi un titre en gris.
Chaque bloc d'actualité est composé d'une image, un titre, et deux paragraphes. Le tout dans un bloc sur fond blanc.
Les blocs d'actus ont les propriétés suivantes :
On devrait déjà être pas mal, mais normalement, vous devriez vous retrouver avec trois actus sur la même ligne et la quatrième sur une deuxième ligne.
C'est normal : on a calculé pour que tout rentre dans les 1000px : 4 x 235px (largeur de la boite) + 3 x 20px (marge à droite) = 1000px.
Sauf que dans l'état actuel, on a une marge droite de trop, sur le dernier bloc. On va la supprimer sur ce dernier bloc en utilisant le sélecteur ":last-child" :
Et voilà ! On a bien nos quatre blocs côte à côte !
Reste à mettre le contenu des actualités en forme, mais comme vous devenez des experts, je vous laisse vous entrainer tout seul.
je vous mets de toute façon tout le CSS à dispo pour que vous puissiez le décortiquer en cas de besoin.
C'est simple, il faut dire que normalement c'est déjà quasiment fait. Pas besoin de s'étaler sur cette section :)
Champ libre ! N'hésitez pas à essayer d'aligner des listes de liens par exemple.
body {
font-size:1em;
font-family:Roboto;
font-weight:300;
color:#48585f;
margin:0;
padding:0;
}
#main-header {
text-align:center;
margin-top:20px;
}
#main-header img {
width:200px;
height:200px;
border-radius:100px;
filter:grayscale(100%);
}
h1 {
font-size:2.5em;
font-weight:normal;
font-family:Bree Serif;
color:#c8a517;
text-transform:uppercase;
}
h1:after {
width: 150px;
height: 5px;
content: " ";
background: #c8a517;
display: block;
margin: 20px auto;
}
h2 {
font-size:1.8em;
font-weight:normal;
font-family:Bree Serif;
color:#c8a517;
text-transform:uppercase;
display:block;
}
a {
color:#c8a517;
}
.bold {
font-weight:bold;
}
#main-nav ul {
width:1000px;
height:50px;
margin:0 auto;
padding:0;
text-align:center;
}
#main-nav ul li {
display:inline;
}
#main-nav ul li a {
font-size:1.2em;
font-weight:normal;
font-family:Bree Serif;
color:#48585f;
text-transform:uppercase;
text-decoration:none;
margin:0 10px;
}
.content {
width:1000px;
margin:auto;
text-align:justify;
}
.content p {
margin:0 0 20px;
}
.text {
width:600px;
float:left;
}
.infos {
width:350px;
float:right;
background:rgba(178,188,193,0.25);
padding:20px;
box-sizing:border-box;
}
.infos h3 {
text-align:center;
font-size:1.2em;
font-weight:normal;
font-family:Bree Serif;
color:#48585f;
text-transform:uppercase;
margin-top:0;
}
.infos table {
font-size:0.9em;
}
.infos table tr td {
width:50%;
}
.infos table tr td:first-child {
font-weight:bold;
}
#presentation {
height:350px;
background:rgba(178,188,193,0.5);
}
#actualites {
background:rgba(178,188,193,0.5);
clear:both;
padding:20px 0;
}
#actualites h2 {
color:#48585f;
}
#actualites h3 {
font-family:Bree Serif;
font-size:1.2em;
font-weight:normal;
}
#actualites .content {
overflow:auto;
}
#actualites .actu {
width:235px;
padding:10px;
margin-right:20px;
box-sizing:border-box;
background:#fff;
float:left;
text-align:left;
}
#actualites .actu:last-child {
margin:0px;
}
footer {
height:300px;
margin-top:50px;
background:rgba(178,188,193,0.5);
}