đŒ HTML & CSS avancĂ©#
Méta-données#
Les balises <meta>
sont situĂ©es dans lâĂ©lĂ©ment <head>
du document. Elles contiennent des mĂ©ta-donnĂ©es : des donnĂ©es sur le document lui-mĂȘme (littĂ©ralement, des « donnĂ©es Ă propos des donnĂ©es »).
meta charset="utf-8">
<meta name="description" content="apprenez plus de tours en HTML">
<meta name="author" content="Samy Delahaye">
<meta name="keywords" content="html web">
Le charset#
Cet attribut dĂ©clare lâencodage utilisĂ© par la page. Bien que le standard ne fixe pas dâencodage particulier, il recommande dâutiliser UTF-8
.
name#
Cet attribut dĂ©finit le nom dâun mĂ©tadonnĂ©e au niveau du document. Le nom de la mĂ©tadonnĂ©e document est associĂ© Ă une valeur contenue dans lâattribut content. Quelques noms possibles et la signification de leurs valeurs (contenues dans lâattribut content) sont:
application-name
dĂ©finit le nom de lâapplication web utilisĂ©e dans la page,author
le nom de lâauteur du document (pas de contrainte de format)description
contient un résumé concis et pertinent du contenu de la page. Plusieurs navigateurs, dont Firefox et Opera, utilisent cette métadonnée comme description de la page lorsque celle-ci est mise dans les favoris.generator
contient lâidentifiant du logiciel ayant gĂ©nĂ©rĂ© la page (pas de contrainte de format)keywords
contient une liste de mots-clés séparés par des virgules. Ces mots-clés sont pertinents et relatifs au contenu de la page.publisher
le nom de lâĂ©diteur du document (sans contrainte de format). Cela peut ĂȘtre le nom dâune institution.robots
dĂ©finit le comportement que les robots dâindexation devraient respecter.viewport
donne une indication quant à la taille du viewport (vue virtuelle). Cette information est utilisée par les terminaux mobiles uniquement.
Attention
A une Ă©poque pas si lointaine, le bourrage de la meta keywords afin dâamĂ©liorer son rĂ©fĂ©rencement Ă©tait monnaie courante. Depuis son utilisation nâest plus recommandĂ©e.
Robots#
Elle permet de dĂ©finir le comportement que les robots dâindexation devraient respecter. Câest une liste de valeurs sĂ©parĂ©es par des virgules. La liste qui suit dĂ©finit quelques-unes des valeurs que lâon peut utiliser :
index
Permet au robot dâindexer la pagenoindex
Interdit au robot dâindexer la pagefollow
Permet au robot de suivre les liens contenus dans la pagenofollow
Interdit au robot de suivre les liens contenus dans la pagenoarchive
EmpĂȘche le moteur de recherche de mettre en cache le contenu de la page
<meta name="robot" content="index, nofollow">
Attention
Seuls les robots « respectueux » suivront ces rÚgles. Il ne faut pas considérer cela comme une maniÚre efficace de blocage.
Indication
Selon les attributs qui sont renseignĂ©s, la mĂ©tadonnĂ©e peut ĂȘtre de diffĂ©rentes sortes :
si
name
est renseignĂ©, câest une mĂ©tadonnĂ©e de document sâappliquant Ă la page entiĂšre,si
http-equiv
est renseignĂ©, câest une information transmise au serveur web indiquant comment la page doit ĂȘtre servie (pragma directive en anglais),si
charset
est renseignĂ©, câest une dĂ©claration sur le jeu de caractĂšres.
Langue des méta-données#
Les mĂ©ta-donnĂ©es peuvent ĂȘtre fournies dans diffĂ©rentes langues, spĂ©cifiĂ©es dans lâattribut lang
Ă lâaide dâun code spĂ©cifiĂ© par BCP47.
Note
Lâattribut lang peut en fait ĂȘtre utilisĂ© sur nâimporte quelle balise, y compris dans le corps (<body
) du document.
<meta name="description" lang="en"
content="learn advanced tricks in HTML" />
<meta name="description" lang="fr"
content="apprenez plus de tours en HTML" />
Entités HTML#
Les caractÚres suivants ont une signification spéciale en HTML, donc il faut utiliser un code spécial (entité) pour les afficher :
Symbole |
Entités |
Signification |
---|---|---|
|
|
lower than |
|
|
greater than |
|
|
double quote |
|
|
simple quote |
|
|
ampersand (esperluette) |
Structure dâun tableau#
Un tableau (ou une table) permet dâorganiser des information sur deux dimensions. Une table (table) est composĂ©e de lignes (rows), elles-mĂȘmes composĂ©es de cellules (cells). On considĂšre deux sortes de cellules : les cellules dâen-tĂȘte (header cells) et les cellules de donnĂ©es (data cells).
<table>
<thead>
<tr>
<th></th>
<th>Medium</th>
<th>Large</th>
</tr>
</thead>
<tbody>
<tr>
<th>Americano</th>
<td>1.50âŹ</td>
<td>1.90âŹ</td>
</tr>
<tr>
<th>Latte</th>
<td>1.90âŹ</td>
<td>2.10âŹ</td>
</tr>
<tr>
<th>Cappucino</th>
<td>1.90âŹ</td>
<td>2.10âŹ</td>
</tr>
</tbody>
</table>
Une cellule peut sâĂ©tendre sur plusieurs lignes (vers le bas) et/ou colonnes (vers la droite) Ă lâaide des attributs rowspan
et colspan
.
Web Sémantique#

En programmation, la sĂ©mantique fait rĂ©fĂ©rence au sens dâune partie de code â par exemple « quel effet aura lâexĂ©cution de cette ligne de code ? », ou « quel est le rĂŽle ou le but de cet Ă©lĂ©ment HTML » (plutĂŽt que « à quoi ressemble-t-il ? »).
Par exemple, lâĂ©lĂ©ment <h1>
est un Ă©lĂ©ment sĂ©mantique qui donne au texte quâil contient le rĂŽle (ou le sens) de « titre de premier niveau de votre page ».
Un web sémantique#
Il sâagit dâune extension du Web standardisĂ©e par le W3C qui recommande lâuttilisation de formats de donnĂ©es et de protocoles dâĂ©change normĂ©s. Cela est dĂ©crit au sein du RDF (Resource Description Framework) qui nous fournit un format de base des donnĂ©es.
En informatique il existe deux catĂ©gories de fichiers: les documents lisibles par lâhomme et les donnĂ©es lisibles par la machine.
Les pages web sont conçues pour ĂȘtre lues uniquement par des personnes et non par des machines. Le web sĂ©mantique vise Ă atteindre une vision de lâinformation qui permet dâĂȘtre lisible par les humains et par les machines.
Les éléments sémantiques#
Lâutilisation du balisage HTML visant Ă renforcer le sĂ©mantisme (la signification) des informations contenues dans les pages web, câest-Ă -dire leur sens, plutĂŽt que de se borner Ă dĂ©finir leur prĂ©sentation (ou apparence).
Quelques éléments sémantiques:
|
|
|
|
Avant pour représenter un article nous utilisions un marquage équivalent:
<!-- ceci est un article -->
<div>
<h2>The Last Jedi trailer is out !</h2>
<ul>
<li>Written by Samy Delahaye</li>
<li>On Thurday 21, sept. 2017</li>
</ul>
<p>Insert some fanboy text here !</p>
<a href=".." title="..">Read more !</a>
</div>
Voici la mĂȘme chose en HTML5:
<article>
<h2>The Last Jedi trailer is out !</h2>
<dl>
<dt>Author</dt>
<dd>
Written by <a href="https://ugaritic.fr" rel="author">Samy Delahaye</a>
</dd>
<dt><time datetime="2017-09-21">On Thurday 21, sept. 2017</time></dt>
</dl>
<p>Insert some fanboy text here !</p>
<a href=".." title="..">Read more !</a>
</article>
Nous utilisons des balises plus structurantes et ayant un sens une fois combinées entre elles.
section#
LâĂ©lĂ©ment HTML section
reprĂ©sente une section gĂ©nĂ©rique dâun document, par exemple un groupe de contenu thĂ©matique. Une section commence gĂ©nĂ©ralement avec un titre.
Ainsi, un menu de navigation devrait ĂȘtre dĂ©limitĂ© par un Ă©lĂ©ment nav
mais une liste de rĂ©sultat de recherche, qui ne dispose pas dâĂ©lĂ©ment spĂ©cifique pour ĂȘtre reprĂ©sentĂ©e, pourrait ĂȘtre englobĂ©e dans un Ă©lĂ©ment section
.
article#
LâĂ©lĂ©ment HTML article
reprĂ©sente du contenu autonome dans un document, une page, une application, ou un site. Ceci peut ĂȘtre un message sur un forum, un article de journal ou de magazine, une parution sur un blog, un commentaire dâutilisateur ou tout autre Ă©lĂ©ment de contenu indĂ©pendant. Ce contenu est prĂ©vu pour ĂȘtre distribuĂ© ou rĂ©utilisĂ© indĂ©pendamment.
aside#
LâĂ©lĂ©ment HTML aside
(en anglais, « aparté ») reprĂ©sente une partie dâun document dont le contenu nâa quâun rapport indirect avec le contenu principal du document. Les apartĂ©s sont frĂ©quemment prĂ©sents sous la forme dâencadrĂ©s ou de boĂźtes de lĂ©gende.
<!DOCTYPE html>
<html>
<head>
<title>Hello HtmlWORLD!</title>
<meta charset='UTF-8' />
</head>
<body>
<header>
<h1>HelloHtml5</h1>
<a href="..">..</a>
<a href="..">..</a>
</header>
<main>
<section>
<h2>Latest news</h2>
<article>
<h3>..</h3>
</article>
<article>
<h3>..</h3>
</article>
</section>
<aside>
<a href="..">..</a>
</aside>
</main>
<footer>
<p>© Gandalf 2019</p>
</footer>
</body>
</html>
Pseudo-classes#
Note
Une pseudo-classe est un mot-clĂ© qui peut ĂȘtre ajoutĂ© Ă un sĂ©lecteur afin dâindiquer lâĂ©tat spĂ©cifique dans lequel lâĂ©lĂ©ment doit ĂȘtre pour ĂȘtre ciblĂ© par la dĂ©claration.
Syntaxe
sélecteur:pseudo-classe {
propriété: valeur;
}
Les pseudo-classes permettent dâappliquer un style Ă un Ă©lĂ©ment non seulement en fonction de son contenu dans lâarbre du document mais aussi en fonction de facteurs externes (lâhistorique de navigation par exemple avec :visited
; le statut du contenu avec :checked
; la position de la souris :hover
).
:link{}
:visited{}
:active{}
:focus{}
:hover{}
:target{}
Active#
La pseudo-classe :active
permet de cibler un Ă©lĂ©ment lorsque celui-ci est activĂ© par lâutilisateur. Elle permet de fournir un feedback indiquant que lâactivation a bien Ă©tĂ© dĂ©tectĂ©e par le navigateur. Lorsquâon a une interaction avec un pointeur, il sâagit gĂ©nĂ©ralement du moment entre lâappui sur le pointeur et le relĂąchement de celui-ci.
first-child#
La pseudo-classe :first-child
permet de cibler un élément qui est le premier élément fils par rapport à son élément parent.
Cible |
Sélecteurs |
---|---|
p:first-child {
color: lime;
background-color: black;
padding: 5px;
}
|
<div>
<p>Ce paragraphe est mis en forme car c'est un élément
p ET que c'est le premier fils de l'élément div.</p>
<p>En revanche, ce paragraphe n'est pas mis en forme
car ce n'est pas le premier !</p>
</div>
<div>
<h2>Ce titre h2 n'est pas mis en forme car ce n'est pas
un paragraphe.</h2>
<p>Et ce paragraphe n'est pas mis en forme car ce n'est pas
le premier fils !</p>
</div>
|
focus#
La pseudo-classe :focus
permet de cibler un Ă©lĂ©ment lorsque celui-ci reçoit le focus (soit il est sĂ©lectionnĂ© Ă lâaide du clavier, soit il est activĂ© avec la souris comme par exemple le champ dâun formulaire).
hover#
La pseudo-classe :hover
permet de spĂ©cifier lâapparence dâun Ă©lĂ©ment au moment oĂč lâutilisateur le survole avec le pointeur, sans nĂ©cessairement lâactiver.
link#
La pseudo-classe :link
permet de sĂ©lectionner les liens Ă lâintĂ©rieur dâĂ©lĂ©ments. Elle sĂ©lectionnera tout lien nâayant pas Ă©tĂ© visitĂ©.
nth-child#
La pseudo-classe :nth-child(an+b)
permet de cibler un Ă©lĂ©ment qui possĂšde \(an+b-1\) Ă©lĂ©ments voisins (au mĂȘme niveau) avant lui dans lâarbre du document pour des valeurs entiĂšres \(n\) et qui possĂšde un Ă©lĂ©ment parent. Autrement dit, un sĂ©lecteur utilisant cette pseudo-classe permettra de cibler les Ă©lĂ©ments fils dâun Ă©lĂ©ment dont les positions correspondent au motif \(an+b\).
/* Cible les éléments en fonction de leur position dans */
/* le document : ici le 4e, 8e, 16e, 20e, etc. quel que */
/* soit le type de l'élément */
body :nth-child(4n) {
background-color: lime;
}
On peut également utiliser les valeurs avec un mot-clé:
odd
Représente les éléments dont la position est impaire par rapport à leurs voisins.even
Représente les éléments dont la position est paire par rapport à leurs voisins.
target#
La pseudo-classe :target
permet de cibler lâunique Ă©lĂ©ment (sâil existe) dont lâattribut id correspond au fragment dâidentifiant de lâURI du document.
visited#
La pseudo-classe :visited
permet de modifier lâaspect dâun lien aprĂšs que lâutilisateur lâa visitĂ©. Pour des raisons relatives Ă la vie privĂ©e, les propriĂ©tĂ©s qui peuvent ĂȘtre utilisĂ©es sont restreintes.
Pseudo-éléments#
Note
Un pseudo-Ă©lĂ©ment est un mot-clĂ© ajoutĂ© Ă un sĂ©lecteur qui permet de mettre en forme certaines parties de lâĂ©lĂ©ment ciblĂ© par la rĂšgle.
Syntaxe
sélecteur::pseudo-élément {
propriété: valeur;
}
::first-letter
::first-line
::before
::after
After#
En CSS, ::after
crĂ©e un pseudo-Ă©lĂ©ment qui sera le dernier enfant de lâĂ©lĂ©ment sĂ©lectionnĂ©. Il est souvent utilisĂ© pour ajouter du contenu cosmĂ©tique Ă un Ă©lĂ©ment, en utilisant la propriĂ©tĂ© CSS content. Par dĂ©faut, ce contenu est de type « en ligne ».
/* Ajoute une flĂšche aprĂšs les liens */
a:after {
content: "â";
}
Before#
::before
crĂ©e un pseudo-Ă©lĂ©ment qui sera le premier enfant de lâĂ©lĂ©ment ciblĂ©. GĂ©nĂ©ralement utilisĂ© pour ajouter du contenu esthĂ©tique Ă un Ă©lĂ©ment via la propriĂ©tĂ© CSS content. Par dĂ©faut, lâĂ©lĂ©ment créé est de type en-ligne (inline).
/* On ajoute un coeur avant les liens */
a:before {
content: "â„";
}
first-letter#
Le pseudo-élément ::first-letter
sĂ©lectionne la premiĂšre lettre de la premiĂšre ligne dâun bloc, si elle nâest pas prĂ©cĂ©dĂ©e par un quelconque autre contenu (comme une image ou un tableau en ligne) sur sa ligne.
/* Sélectionne la premiÚre lettre */
/* des éléments <p> */
p::first-letter {
color: red;
font-size: 130%;
}
first-line#
Le pseudo-élément ::first-line
applique la dĂ©coration Ă la premiĂšre ligne dâun Ă©lĂ©ment. La quantitĂ© de texte sur la premiĂšre ligne dĂ©pend de nombreux facteurs, comme la largeur des Ă©lĂ©ments ou du document, mais aussi de la taille du texte. Comme tous les pseudo-Ă©lĂ©ments, les sĂ©lecteurs contenant ::first-line
ne ciblent pas un élément HTML réel.
/* Sélectionne la premiÚre ligne */
/* des éléments <p> */
::first-line {
color: red;
text-transform: uppercase;
}
Position#
Note
La propriété position
définit la façon dont un élément est positionné dans un document. Les propriétés top
, right
, bottom
et left
dĂ©terminent lâemplacement final de lâĂ©lĂ©ment positionnĂ©.
Un élément positionné est un élément dont la propriété de position calculée est relative
, absolute
, fixed
ou sticky
. Par défaut tout élément est positionné en static
.
Relative#
Un élément positionné de façon relative est un élément dont la propriété de position calculée est relative
. Dans ce cas, les propriétés top
ou bottom
indiquent le décalage vertical à appliquer et left
ou right
indiquent le décalage horizontal.
Absolue#
Un élément positionné de façon absolue est un élément dont la propriété de position calculée est absolute
ou fixed
. Dans ce cas, les propriétés top
, bottom
, right
et left
indiquent les distances entre les bords de lâĂ©lĂ©ment et les bords du bloc englobant (câest-Ă -dire lâancĂȘtre par rapport auquel lâĂ©lĂ©ment est positionnĂ©). Si lâĂ©lĂ©ment possĂšde des marges, elles sont ajoutĂ©es aux dĂ©calages.
Adhérence#
Un élément positionné en adhérence est un élément dont la propriété de position calculée vaut sticky
. Un tel Ă©lĂ©ment se comporte comme un Ă©lĂ©ment positionnĂ© de façon relative jusquâĂ ce que son bloc englobant dĂ©passe un seuil donnĂ© (par exemple fourni par la valeur de top) au sein du conteneur puis il se comporte ensuite comme un Ă©lĂ©ment fixe jusquâĂ atteindre le bord opposĂ© du bloc englobant.
Ombrage des boĂźtes#
La propriété box-shadow
ajoute des ombres Ă la boĂźte dâun Ă©lĂ©ment via une liste dâombres sĂ©parĂ©es par des virgules. Une boĂźte dâombre est dĂ©finie avec des dĂ©calages horizontal et vertical par rapport Ă lâĂ©lĂ©ment, avec des rayons de flou et dâĂ©talement et avec une couleur.
/* offset-x | offset-y | color */
box-shadow: 60px -16px teal;
/* offset-x | offset-y | blur-radius | color */
box-shadow: 10px 5px 5px black;
/* offset-x | offset-y | blur-radius | spread-radius | color */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);
Ombrage des textes#
La propriété text-shadow
ajoute des ombres au texte. Elle accepte une liste dâombres Ă appliquer au texte et aux dĂ©corations de lâĂ©lĂ©ment. Chaque ombre est dĂ©crite par une certaine combinaison de dĂ©calages X et Y de lâĂ©lĂ©ment, de rayon de flou et de couleur.
/* offset-x | offset-y | blur-radius | color */
text-shadow: 1px 1px 2px black;
/* color | offset-x | offset-y | blur-radius */
text-shadow: #fc0 1px 0 10px;
/* offset-x | offset-y | color */
text-shadow: 5px 5px #558abb;
/* color | offset-x | offset-y */
text-shadow: white 2px 5px;
Reset CSS#
Note
Technique qui consiste Ă rĂ©initialiser Ă zĂ©ro la valeur de certains Ă©lĂ©ments HTML afin dâĂ©viter une partie des diffĂ©rences dâaffichage sur les divers navigateurs.
Avertissement
Il sâagit dâun fichier css Ă tĂ©lĂ©charger et Ă inclure dans votre page ! Vous ne devez en choisir quâun seul !
Adaptation au média#
La rĂšgle @media
permet dâassocier un ensemble dâinstructions imbriquĂ©es (dĂ©limitĂ© par des accolades) avec une condition dĂ©finie par une requĂȘte mĂ©dia.
Les requĂȘtes mĂ©dia (media queries) permet de modifier lâapparence dâun site ou dâune application en fonction du type dâappareil (impression ou Ă©cran par exemple) et de ses caractĂ©ristiques (la rĂ©solution dâĂ©cran ou la largeur de la zone dâaffichage (viewport) par exemple).
@media (max-width: 600px) {
.sidebar {
display: none;
}
}
Une requĂȘte mĂ©dia (type <media-query>
) est composĂ©e dâun type de mĂ©dia (optionnel) et/ou de diffĂ©rentes caractĂ©ristiques relatives au mĂ©dia.
@media screen and (min-width: 900px) {
article {
padding: 1rem 3rem;
}
}
@media print {
body { font-size: 10pt }
}
@media screen {
body { font-size: 13px }
}
@media screen, print {
body { line-height: 1.2 }
}
@media only screen
and (min-width: 320px)
and (max-width: 480px)
and (-webkit-min-device-pixel-ratio: 2) {
body { line-height: 1.4 }
}
Intervalle#
@media (height > 600px) {
body { line-height: 1.4; }
}
@media (400px <= width <= 700px) {
body { line-height: 1.4; }
}
Viewport#
Les appareils mobiles (smartphones notament) « trichent » en simulant un Ă©cran plus grand que la rĂ©alitĂ©, afin dâafficher sans (trop de) problĂšme les pages non responsive. Il est possible (et souhaitable) de dĂ©sactiver ce comportement, lorsquâon souhaite avoir un meilleur contrĂŽle de lâaffichage sur ces appareils.
La balise suivante force le navigateur Ă utiliser la largeur rĂ©elle de lâappareil.
<meta name="viewport" content="width=device-width">
On peut également limiter le niveau de zoom,
<meta name="viewport" content="width=device-width, minimum-scale=0.5, maximum-scale=2">
voire empĂȘcher totalement lâutilisateur de zoomer.
<meta name="viewport" content="width=device-width, user-scalable=no">
Grille CSS#
Note
Une grille est un ensemble de lignes horizontales et verticales qui se croisent â les premiĂšres dĂ©finissant les rangĂ©es, et les secondes les colonnes. Les Ă©lĂ©ments sont placĂ©s sur la grille en fonction de ces rangĂ©es et colonnes.
La plupart des sites Internet ont un gabarit « gĂ©nĂ©rique ». Par exemple, un blog va avoir un corps et une barre latĂ©rale. Une grille CSS va vous permettre de gĂ©rer ce gabarit trĂšs facilement. LâidĂ©e câest de partager votre site en un nombre dĂ©fini de colonnes. Le gabarit de votre site sera dĂ©fini en fonction de ces colonnes.
Deux possibilité pour utiliser les grilles CSS:
Les « librairies » CSS qui fournissent une grille comme Simple Grid
ou encore mieux, le module
CSS Grid layout
.
Grid layout#
Le module CSS Grid layout (modĂšle de disposition en grille) est un module de la spĂ©cification CSS qui permet de crĂ©er des mises en page en divisant lâespace dâaffichage en rĂ©gions utilisables par une application ou en dĂ©finissant des relations de taille, position et dâempilement entre les Ă©lĂ©ments HTML.
Quâest ce quâune grille ?
Comme les tableaux, la grille permet dâaligner des Ă©lĂ©ments sous forme de colonnes et de lignes mais Ă la diffĂ©rence des tableaux, la grille nâa pas de structure de contenu. Ainsi, on peut crĂ©er de nombreuses mises en page qui nâauraient pas Ă©tĂ© possibles avec les tableaux. Ainsi, les Ă©lĂ©ments fils dâun conteneur en grille peuvent ĂȘtre positionnĂ©s afin quâils se chevauchent ou quâils se comportent comme des Ă©lĂ©ments positionnĂ©s.
On peut créer une grille avec des pistes à taille fixes en utilisant une unité comme le pixel. Pour les pistes à taille variable on peut utiliser le pourcentage ou la nouvelle unité fr créée à cet effet.
Pour placer les Ă©lĂ©ments sur la grille, on peut utiliser le numĂ©ro ou le nom dâune ligne, ou cibler une zone particuliĂšre. La grille contient aussi un algorithme pour placer les Ă©lĂ©ments qui nâont pas Ă©tĂ© placĂ©s explicitement.
Lorsquâune grille explicite nâest pas dĂ©finie, la spĂ©cification prend en charge le contenu dĂ©fini en dehors dâune grille en ajoutant des colonnes et des rangĂ©es. Cela comprend des fonctionnalitĂ©s telles quâ « ajouter autant de colonnes que possible dans le conteneur ».
On peut contrĂŽler lâalignement des Ă©lĂ©ments dans une zone de la grille, ainsi que celui de lâensemble de la grille.
Le conteneur#
Ă partir du moment oĂč on crĂ©e un conteneur en dĂ©clarant la propriĂ©tĂ© display: grid
ou display: inline-grid
sur un élément, tous les enfants directs de cet élément deviennet des éléments de grille.
Cet exemple montre une section avec une classe .wrapper
et cinq éléments enfants.
<section class="wrapper">
<article>Un</article>
<article>Deux</article>
<article>Trois</article>
<article>Quatre</article>
<article>Cinq</article>
</section>
|
.wrapper {
display: grid;
}
|
Tous les enfants directs sont maintenant des Ă©lĂ©ments de grille. On ne voit pas la diffĂ©rence dans un navigateur, car la grille nâa quâune seule colonne. Vous trouverez sans doute utile de travailler avec Firefox, qui propose un inspecteur de grille dans les outils de dĂ©veloppement.
En inspectant la grille dans Firefox, vous pouvez voir une petite icĂŽne Ă cĂŽtĂ© de la valeur grid. Un clic dessus permet dâafficher la grille correspondante dans le navigateur.
Les pistes#
Les propriétés grid-template-columns
et grid-template-rows
permettent de dĂ©finir des colonnes et des rangĂ©es. Celles-ci dĂ©finissent les pistes. Une piste est lâespace entre deux lignes dâune grille.
On peut ajouter la propriété grid-template-columns
à notre exemple précédent, pour définir la taille des colonnes.
Nous avons créé une grille avec trois pistes de 200 pixels de large. Chaque Ă©lĂ©ment sera disposĂ© dans lâune des cellules de la grille.
.wrapper {
display: grid;
grid-template-columns: 200px 200px 200px;
}
LâunitĂ© fr#
Les pistes peuvent ĂȘtre dĂ©finies Ă lâaide de nâimporte quelle unitĂ© de mesure. Les grilles proposent aussi une nouvelle unitĂ© de mesure pour aider Ă la crĂ©ation de pistes flexibles. Cette unitĂ©, fr
, reprĂ©sente une fraction de lâespace disponible dans le conteneur de la grille. Le code suivant crĂ©e trois colonnes Ă©gales qui se redimensionnent en fonction de lâespace disponible.
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
Lâexemple suivant crĂ©e une grille avec une colonne de 2fr, et deux colonnes de 1fr. Lâespace disponible est divisĂ© en quatre. Les deux premiĂšres fractions sont allouĂ©es Ă la premiĂšre colonne, et chacune des colonnes suivante dispose dâune fraction.
.wrapper {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
}
Utiliser la notation repeat() pour définir les pistes#
Pour les grilles comprenant de nombreuses pistes on peut utiliser la notation repeat()
pour répéter toute ou une partie des pistes définies. Par exemple la définition de grille :
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
peut Ă©galement sâĂ©crire :
.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
Grille implicite et grille explicite#
Dans ces exemples nous avons dĂ©fini nos colonnes Ă lâaide de la propriĂ©tĂ© grid-template-columns
, et nous avons laissé la grille créer les rangées. Ces rangées font partie de la grille implicite.
La grille explicite est constituée des pistes définies par les propriétés grid-template-columns
et grid-template-rows
. Si un Ă©lĂ©ment est placĂ© en dehors de la grille ainsi dĂ©finie, ou que la quantitĂ© de contenu nĂ©cessite dâĂ©tendre la grille, alors la grille ajoute implicitement des colonnes et rangĂ©es. Les dimensions de ces pistes auront par dĂ©faut la valeur auto, câest-Ă dire quâelles sâajusteront Ă leur contenu.
On peut définir une taille pour les pistes de la grille implicite grùce aux propriéts grid-auto-rows
et grid-auto-columns
.
Dans lâexemple ci-aprĂšs nous utilisons grid-auto-rows
pour que les rangées de la grille implicite fassent 200 pixels de haut.
.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 200px;
}
Dimensionner une piste avec minmax#
Que lâon crĂ©e une grille explicite, ou que lâon dĂ©finisse la taille des pistes créées implicitement, il peut ĂȘtre utile dâassigner une taille minimum, qui sâagrandit pour sâadapter au contenu. Par exemple on peut souhaiter que les rangĂ©es ne soient jamais moins hautes que 100 pixels, mais quâelles aillent jusquâĂ 300 pixels de haut si le contenu le nĂ©cessite.
La fonction minmax()
permet ce comportement. Dans lâexemple suivant nous utilisons minmax()
comme valeur de la propriété grid-auto-rows
. Les rangĂ©es créées automatiquement feront un minimum de 100 pixels, et un maximum de auto, ce qui signifie que la taille sâadaptera Ă la hauteur du contenu.
.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(100px, auto);
}
Les cellules#
Une cellule est la plus petite unitĂ© sur une grille, conceptuellement similaire Ă une cellule de tableau. Comme nous lâavons vu lorsquâune grille est dĂ©finie sur un Ă©lĂ©ment ses enfants viennent se positionner chacun dans lâune des cellules de la grille.
Il est possible de changer la position dâune cellule dans la grille.
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.first-article {
grid-column: 2; /* Take place on second column */
grid-row: 3; /* Take place on third row */
}
.second-article {
grid-row: 1;
grid-column: 1/3; /* Take place on first and second column */
grid-column: 1 / span 2; /* Make exactly the same as above */
}
Les gouttiĂšres#
Les gouttiĂšres entre les cellules sont dĂ©finies Ă lâaide des propriĂ©tĂ©s grid-column-gap
et grid-row-gap
, ou de la propriété raccourcie grid-gap
. Dans lâexemple ci-dessous nous crĂ©ons une gouttiĂšre de dix pixels de large entre les colonnes, et une gouttiĂšre de 1em de hauteur entre les rangĂ©es.
.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-column-gap: 10px;
grid-row-gap: 1em;
}
Dans un exercice lointain, ..#
Note
Cet exercice a pour but de rĂ©capituler lâensemble des notions vues ensemble. Nous allons ainsi revoir les structures HTML vus ensemble et les bases de CSS.
Lâobjectif est de crĂ©er une page dâaccueil listant lâensemble des Ă©pisodes cinĂ©matographique de la saga Star Wars et une page dĂ©diĂ©e pour chaque Ă©pisode.
Nous pouvons adopter la structuration suivante:
tp5/
âââ episodes
âââ imgs
âââ index.html
âââ styles
Ă faire
- Au sein de notre page dâaccueil nous allons crĂ©er un listing des diffĂ©rents films de la saga.
Est-il utile de rappeler quâil faut toujours commencer par le squelette HTML5 ?
- Créer une section contenant:
Un titre de niveau 1 contenant cette image
- Pour chaque épisode une section contenant:
un titre de niveau 2 avec comme texte le titre de lâĂ©pisode prĂ©cĂ©dĂ© de son numĂ©ro en chiffre latin
lâaffiche du film
un lien vers la page dédiée du film
- Pour chaque épisode créer un document html dédié sous la forme
episodes/episodex.html
: chaque document sera une page détaillée de chaque film,
contenant une liste descriptive avec les informations listées ci-dessous, le synopsis du film, le poster et un lien vers le film suivant et/ou précédent selon les cas
- Pour chaque épisode créer un document html dédié sous la forme
Indication
Voici un lien vers les posters
et les informations pour chaque film:
Titre |
Synopsis |
Directeur |
Scénario |
Producteurs |
Durée |
Date de sortie |
---|---|---|---|---|---|---|
The Phantom Menace |
After a millennia, an ancient evil returns seeking revenge. Meanwhile, Jedi Knight Qui-Gon Jinn discovers Anakin Skywalker: a young slave boy unusually strong with the Force. |
George Lucas |
George Lucas |
Lucasfilm |
136 |
1996 |
Attack of the Clones |
Following an assassination attempt on Senator Padmé Amidala, Jedi Knights Anakin Skywalker and Obi-Wan Kenobi investigate a mysterious plot that could change the galaxy forever. |
George Lucas |
George Lucas |
Lucasfilm |
142 |
2002 |
Revenge of the Sith |
The evil Darth Sidious enacts his final plan for unlimited power â and the heroic Jedi Anakin Skywalker must choose a side. |
George Lucas |
George Lucas |
Lucasfilm |
140 |
2005 |
Solo |
Board the Millennium Falcon and journey to a galaxy far, far away in Solo: A Star Wars Story, an all-new adventure with the most beloved scoundrel in the galaxy. Through a series of daring escapades deep within a dark and dangerous criminal underworld, Han Solo meets his mighty future copilot Chewbacca and encounters the notorious gambler Lando Calrissian, in a journey that will set the course of one of the Star Wars sagaâs most unlikely heroes. |
Ron Howard |
Lawrence Kasdan, Jon Kasdan |
Lucasfilm |
135 |
2018 |
Rogue One |
From Lucasfilm comes the first of the Star Wars standalone films, âRogue One: A Star Wars Story,â an all-new epic adventure. In a time of conflict, a group of unlikely heroes band together on a mission to steal the plans to the Death Star, the Empireâs ultimate weapon of destruction. This key event in the Star Wars timeline brings together ordinary people who choose to do extraordinary things, and in doing so, become part of something greater than themselves. |
Gareth Edwards |
Chris Weitz, Tony Gilroy |
Lucasfilm |
133 |
2016 |
A New Hope |
With the planet-destroying power of the Death Star, the Empire looks to cement its grip on the galaxy. Meanwhile, farm boy Luke Skywalker rises to face his destiny. |
George Lucas |
George Lucas |
Lucasfilm |
125 |
1977 |
The Empire Strikes Back |
While the Death Star has been destroyed, the battle between the Empire and the Rebel Alliance rages onâŠand the evil Darth Vader continues his relentless search for Luke Skywalker. |
George Lucas |
George Lucas |
Lucasfilm |
127 |
1980 |
Return of the Jedi |
Luke Skywalker leads a mission to rescue his friend Han Solo from the clutches of Jabba the Hutt, while the Emperor seeks to destroy the Rebellion once and for all with a second dreaded Death Star. |
George Lucas |
George Lucas |
Lucasfilm |
135 |
1983 |
The Force Awakens |
Thirty years after the Battle of Endor, a new threat has risen in the form of the First Order and the villainous Kylo Ren. Meanwhile, Rey, a young scavenger, discovers powers that will change her life â and possibly save the galaxy. |
|
|
Lucasfilm |
135 |
2015 |
The Last Jedi |
Rey has found the legendary Luke Skywalker, hoping to be trained in the ways of the Force. Meanwhile, the First Order seeks to destroy the remnants of the Resistance and rule the galaxy unopposed. |
Rian Johnson |
Rian Johnson |
Lucasfilm |
152 |
2017 |
Mon premier formulaire HTML#
Note
Dans cet exercice, nous allons concevoir un formulaire de contact simple.
Notre formulaire contiendra trois champs de texte et un bouton. Nous demandons simplement Ă notre utilisateur son nom, son adresse Ă©lectronique et le message quâil souhaite envoyer. En appuyant sur le bouton, le message sera envoyĂ© au serveur web.
Indication
Avant de passer au code, il est souhaitable de prendre un peu de recul et accorder quelques instants de rĂ©flexion Ă votre formulaire. Dessiner un rapide croquis vous permettra de dĂ©finir les informations que vous souhaitez demander Ă lâutilisateur.
Du point de vue de lâexpĂ©rience utilisateur, il est important de garder Ă lâesprit que plus vous demandez dâinformations, plus vous risquez que votre utilisateur sâen aille. Restez simple et ne perdez pas votre objectif de vue : ne demandez que ce dont vous avez absolument besoin.
La conception de formulaires est une phase importante de la construction dâun site internet ou dâune application.
Votre croquis est réalisé ? Vous pouvez passer à la suite.
Croquis de notre premier formulaire#
Ă faire
Créer un squelette HTML5 de base,
Au sein de ce squelette en vous basant sur les éléments vus en cours, créer votre formulaire grùce aux éléments HTML suivant:
<form>
,<label>
,<input>
,<textarea>
et<button>
,Encapsuler chaque couple
label:input
et le bouton dans undiv
,Les noms des champs seront
user_name
,user_mail
etuser_msg
,Lâattribut action de notre formulaire prendra comme url https://ingen.ugaritic.fr/form/contact/.
Nous avons dĂ©sormais notre formulaire HTML, et si vous le regardez dans votre navigateur prĂ©fĂ©rĂ©, vous verrez quâil est plutĂŽt laid.
Ă faire
CrĂ©er une feuille de style (au sein dâun rĂ©pertoire style) pour mettre en forme votre formulaire.
Ajouter le code ci-dessous Ă votre feuille de style:
form {
/* Uniquement centrer le formulaire sur la page */
margin: 0 auto;
width: 400px;
/* Encadré pour voir les limites du formulaire */
padding: 1em;
border: 1px solid #CCC;
border-radius: 1em;
}
form div + div {
margin-top: 1em;
}
label {
/* Pour ĂȘtre sĂ»rs que toutes les Ă©tiquettes ont mĂȘme taille et sont correctement alignĂ©es */
display: inline-block;
width: 90px;
text-align: right;
}
input, textarea {
/* Pour s'assurer que tous les champs texte ont la mĂȘme police.
Par défaut, les textarea ont une police monospace */
font: 1em sans-serif;
/* Pour que tous les champs texte aient la mĂȘme dimension */
width: 300px;
box-sizing: border-box;
/* Pour harmoniser le look & feel des bordures des champs texte */
border: 1px solid #999;
}
input:focus, textarea:focus {
/* Pour souligner légÚrement les éléments actifs */
border-color: #000;
}
textarea {
/* Pour aligner les champs texte multi-ligne avec leur étiquette */
vertical-align: top;
/* Pour donner assez de place pour écrire du texte */
height: 5em;
}
.button {
/* Pour placer le bouton Ă la mĂȘme position que les champs texte */
padding-left: 90px; /* mĂȘme taille que les Ă©tiquettes */
}
button {
/* Cette marge supplĂ©mentaire reprĂ©sente grosso modo le mĂȘme espace que celui
entre les étiquettes et les champs texte */
margin-left: .5em;
}
Notre formulaire devrait avoir meilleure allure désormais. Essayez donc de changer la couleur du texte des champs ou encore de leurs bordures et pourquoi pas celle de notre bouton ?
Comme dit auparavant, un formulaire HTML est une maniĂšre pratique de demander de lâinformation Ă un utilisateur et de les adresser Ă un serveur web.
LâĂ©lĂ©ment <form>
dĂ©finit oĂč et comment les donnĂ©es sont envoyĂ©es, merci aux attributs action et method.
Mais ce nâest pas tout. Nous avons aussi besoin de donner un nom Ă nos donnĂ©es. Ces noms sont importants pour deux raisons. Du cĂŽtĂ© du navigateur, cela sert Ă dĂ©finir le nom de chaque Ă©lĂ©ment de donnĂ©e. Du cĂŽtĂ© du serveur, chaque information doit avoir un nom pour ĂȘtre manipulĂ©e correctement.
Pour nommer vos donnĂ©es vous devez utiliser lâattribut name
pour identifier bien prĂ©cisĂ©ment lâĂ©lĂ©ment dâinformation collectĂ© par chacun des widgets.
Ă faire
Ajouter les attributs name Ă chaque champs du formulaire
Ajouter les attributs for à chaque libellé
Et si nous soumettions notre formulaire à présent ?
Félicitations vous venez de découvrir les bases des formulaires.
Formulaire de commande de pizza#
Ă faire
- Dans un nouveau document, créer un formulaire en méthode
GET
pour commander des pizzas en expérimentant les différents types de champs: text
password
range
date
color
checkbox
radio
number
time
email
etc.
Astuce
Vous pouvez (devez?) utiliser le processeur fourni Ă cette adresse (en valeur de lâattribut action de votre formulaire) pour tester les diffĂ©rents types de champs.
- Dans un nouveau document, créer un formulaire en méthode
- Que constatez vous lors de la soumission du formulaire ?
- Rappel de code HTML#
<form method="GET" action="url_action"> </form>
Formulaire de commande de pizza II#
Dans votre document créer un second formulaire en méthode POST
en utilisant toujours le processeur fourni Ă cette adresse.
Que constatez vous lors de la soumission du formulaire ?
Avec les notions vu sur CSS essayez de mettre en forme vos formulaires pour les rendre plus attrayant.
Attention
Pensez Ă la validation W3C pour vos documents HTML et aussi pour vos feuilles de style.
Un peu de web sémantique#
Note
Le HTML sĂ©mantique est lâutilisation du balisage HTML visant Ă renforcer le sĂ©mantisme (la signification) des informations contenues dans les pages web, câest-Ă -dire leur sens, plutĂŽt que de se borner Ă dĂ©finir leur prĂ©sentation (ou apparence).
<!DOCTYPE html>
<html>
<head>
<title>..</title>
<meta charset='utf-8' />
</head>
<body>
<header>
</header>
<main>
</main>
<footer>
</footer>
</body>
</html>
Quel est lâutilitĂ© de la balise header, main et footer ?
Que signifient-elles ?
Dans la balise header rajoutez le code suivant:
<h1>HELLO WORLD!</h1> <nav> <a href=".." title="..">Home</a> <a href=".." title="..">Contact</a> </nav>
Que signifie la balise nav ?
Quel est lâintĂ©rĂȘt de placer une balise h1 ici ?
<article>
<h2>Useless title</h2>
<time>04/05/1977</time>
<p></p>
<img src=".." alt=".." />
<a href="http://google.fr" title="Jump to google.fr">Google</a>
</article>
Que signifie la balise article ?
Que signifie la balise time ?
Pourquoi utiliser un h2 dans lâarticle ?
Sémantiquement les balises p, img et a correspondent à ?
Voici le code dâun listing dâarticles avec une sidebar:
<main>
<section>
<h2></h2>
<article></article>
<article></article>
</section>
<aside>
<p>..</p>
</aside>
</main>
Que signifie la balise section dans ce cas ?
Que signifie la balise aside ?
Il y a bien longtemps, dans une galaxie lointaine, trĂšs lointaine âŠ#
Ă faire
En reprenant vos fichiers de lâexercice sur la saga star wars, modifiez la structure de vos fichier HTML pour obtenir une page dâaccueil et des pages pour chaque film sĂ©mantiquement correct.
Page dâactualitĂ©s#
Ă faire
- En utilisant vos connaissance en HTML sĂ©mantique, crĂ©er une page dâactualitĂ©s que nous nommerons GlobalNewsNetwork et qui listera quelques actualitĂ©s. Chacune contenant Ă minima les informations suivantes:
Un titre,
Une date de publication,
Un auteur,
Une description,
Une image dâillustration.
Tableaux HTML#
Note
Un tableau est un ensemble structurĂ© de donnĂ©es (table de donnĂ©es) prĂ©sentĂ©es en lignes et colonnes. Un tableau vous permet de retrouver rapidement et facilement des valeurs au croisement entre diffĂ©rents types de donnĂ©es, par exemple : une personne et son Ăąge, ou un jour et la semaine, ou les horaires dâouverture de la piscine du quartier.
Lâavantage du tableau tient dans sa rigueur. Lâinformation est facilement interprĂ©tĂ©e par des associations visuelles entre les entĂȘtes de lignes et colonnes. Lorsque cela est fait correctement, mĂȘme les personnes malvoyantes peuvent interprĂ©ter des donnĂ©es tabulaires dans un tableau HTML â un tableau HTML rĂ©ussi doit permettre la perception des donnĂ©es Ă des utilisateurs dĂ©ficients visuels ou malvoyants.
Avertissement
Les tableaux HTML ne doivent ĂȘtre utilisĂ©s que pour des donnĂ©es tabulaires â câest pour cela quâils sont conçus. Malheureusement, beaucoup de gens ont utilisĂ© les tableaux HTML pour organiser des pages Web, par exemple : une ligne pour contenir lâen-tĂȘte, une ligne pour les colonnes de contenu, une ligne pour le pied de page, etc.
Attention
Ne vous faites pas dâillusions ; pour obtenir un tableau avec un certain effet sur le web, vous devez fournir un minimum dâinformations de style avec CSS, ainsi quâune structure solide avec HTML.
Mon premier tableau#
Ă faire
Avant tout, créer un squelette de document HTML5 et lier le avec le css ci-dessous.
- Le contenu de chaque tableau est encadré par ces deux balises
<table></table>
. Ajoutez-les dans le corps de votre HTML.
- Le contenu de chaque tableau est encadré par ces deux balises
- Le plus petit conteneur dâun tableau est la cellule; elle est créée avec lâĂ©lĂ©ment
<td>
(« td » comme « table data »). Ajoutez une premiÚre cellule.
- Le plus petit conteneur dâun tableau est la cellule; elle est créée avec lâĂ©lĂ©ment
Observez le résultat dans un navigateur puis continuez à ajouter trois cellules.
Astuce
html { font-family: sans-serif; } table { border-collapse: collapse; border: 2px solid rgb(200,200,200); letter-spacing: 1px; font-size: 0.8rem; } td, th { border: 1px solid rgb(190,190,190); padding: 10px 20px; } th { background-color: rgb(235,235,235); } td { text-align: center; } tr:nth-child(even) td { background-color: rgb(250,250,250); } tr:nth-child(odd) td { background-color: rgb(245,245,245); } caption { padding: 10px; }
Note
Les cellules ne sont pas placĂ©es les unes en dessous des autres, mais elles sont automatiquement affichĂ©es dans une mĂȘme ligne. chaque Ă©lĂ©ment
<td>
crĂ©e une cellule simple et ensemble elles forment la premiĂšre ligne. Toutes les cellules que nous ajoutons allongent la ligne.Pour empĂȘcher cette ligne de croĂźtre et commencer Ă placer les cellules suivantes sur une deuxiĂšme ligne, nous devons utiliser la balise
<tr>
(« tr » comme « table row »). Ătudions cela maintenant.Placez les quatre cellules que vous avez créées entre deux balises
<tr>
,Maintenant, vous avez fait une ligne, faites en encore une ou deux â chaque ligne doit ĂȘtre encadrĂ©e de
<tr>
, et comprend chaque cellule encadrée par<td>
.
Ajouter des en-tĂȘtes Ă nos tableaux#
IntĂ©ressons-nous maintenant aux en-tĂȘtes du tableau â cellules spĂ©ciales qui dĂ©butent une ligne ou une colonne et dĂ©finissent le type de donnĂ©es que contiennent la rangĂ©e ou la colonne. Pour comprendre pourquoi ils sont utiles, regardez lâexemple du tableau suivant. Tout dâabord, le code source :
<table>
<tr>
<td> </td>
<td>Knocky</td>
<td>Flor</td>
<td>Ella</td>
<td>Juan</td>
</tr>
<tr>
<td>Race</td>
<td>Jack Russell</td>
<td>Poodle</td>
<td>Streetdog</td>
<td>Cocker Spaniel</td>
</tr>
<tr>
<td>Age</td>
<td>16</td>
<td>9</td>
<td>10</td>
<td>5</td>
</tr>
<tr>
<td>Propriétaire</td>
<td>Belle-mĂšre</td>
<td>Moi</td>
<td>Moi</td>
<td>Belle-soeur</td>
</tr>
<tr>
<td>Habitudes alimentaires</td>
<td>Mange tous les restes</td>
<td>Grignotte la nourriture</td>
<td>Mange copieusement</td>
<td>Mange jusqu'à ce qu'il éclate</td>
</tr>
</table>
Maintenant, le rendu du tableau réel :
Knocky | Flor | Ella | Juan | |
Race | Jack Russell | Poodle | Streetdog | Cocker Spaniel |
Age | 16 | 9 | 10 | 5 |
Propriétaire | Belle-mÚre | Moi | Moi | Belle-soeur |
Habitudes alimentaires | Mange tous les restes | Grignotte la nourriture | Mange copieusement | Mange jusqu'à ce qu'il éclate |
Le problĂšme ici câest que, bien que vous puissiez comprendre le tableau, il nâest pas aussi facile de croiser les donnĂ©es que cela pourrait ĂȘtre. Si les en-tĂȘtes de colonnes et de lignes se dĂ©marquaient dâune maniĂšre ou dâune autre, ce serait mieux.
Ă faire
En premier lieu, faites une copie des fichiers du code source du tableau ci-dessus et du css présent plus haut dans un nouveau répertoire sur votre ordinateur.
- Pour reconnaĂźtre les en-tĂȘtes de tableu en tant quâen-tĂȘtes, visuellement et sĂ©mantiquement, vous pouvez utiliser la balise
<th>
(« th » comme « table header » ou en-tĂȘte de tableau). Il fonctionne exactement comme la balise
<td>
, Ă ceci prĂšs quâil indique un en-tĂȘte et non une cellule normale. - Allez dans le code HTML, et remplacez tous les<td>
par des<th>
.
- Pour reconnaĂźtre les en-tĂȘtes de tableu en tant quâen-tĂȘtes, visuellement et sĂ©mantiquement, vous pouvez utiliser la balise
Enregistrez votre HTML et chargez-le dans un navigateur. Vous devriez voir que les en-tĂȘtes ressemblent maintenant Ă des en-tĂȘtes.
Pourquoi les en-tĂȘtes sont-ils utiles ?
Nous avons dĂ©jĂ partiellement rĂ©pondu Ă cette question â il vous est plus facile de trouver les donnĂ©es que vous cherchez quand les en-tĂȘtes sont marquĂ©s clairement, et la conception globale du tableau paraĂźt meilleure.
Les en-tĂȘtes de tableau ont un autre avantage â avec lâattribut scope
, ils rendent les tableaux plus accessibles en associant chaque en-tĂȘte Ă toutes les donnĂ©es des cellules dâune ligne ou dâune colonne. Les lecteurs dâĂ©cran peuvent alors lire toute une ligne ou une colonne de donnĂ©es, ce qui peut ĂȘtre trĂšs utile.
Ătendre des cellules sur plusieurs lignes ou colonnes#
Parfois, nous voulons quâune cellule couvre plusieurs lignes ou colonnes. Prenez lâexemple simple suivant, qui montre le nom dâanimaux communs. Dans certains cas, nous voulons montrer les noms du mĂąle et de la femelle Ă cĂŽtĂ© du nom gĂ©nĂ©rique de lâanimal. Parfois nous ne le faisons pas, et nous voulons alors que le nom gĂ©nĂ©rique de lâanimal sâĂ©tende sur toute la largeur du tableau.
Le code initial ressemble Ă cela :
<table>
<tr>
<th>Animaux</th>
</tr>
<tr>
<th>Hippopotame</th>
</tr>
<tr>
<th>Cheval</th>
<td>Jument</td>
</tr>
<tr>
<td>Ătalon</td>
</tr>
<tr>
<th>Crocodile</th>
</tr>
<tr>
<th>Poulet</th>
<td>Coq</td>
</tr>
<tr>
<td>Coq</td>
</tr>
</table>
Mais le rĂ©sultat ne nous donne pas ce que nous voulions, nous avons besoin dâun moyen pour Ă©tendre « Animaux », « Hippopotame » et « Crocodile » sur deux colonnes, « Cheval » et « Poulet » sur deux lignes. Heureusement, les en-tĂȘtes de tableau et les cellules ont les attributs colspan et rowspan, ce qui nous permet justement de faire cela. Les deux acceptent une valeur numĂ©rique correspondant au nombre de colonnes ou de lignes Ă couvrir. Par exemple, colspan="2"
génÚre une cellule sur deux colonnes.
Utilisons colspan et rowspan pour améliorer ce tableau.
Ă faire
Tout dâabord, faites une copie locale du tableau ci-dessus et du code css dans un nouveau rĂ©pertoire sur votre ordinateur.
Ensuite, utilisez colspan pour mettre « Animaux », « Hippopotame » et « Crocodile » sur deux colonnes.
Enfin, utilisez rowspan pour mettre « Cheval » et « Poulet » sur deux lignes.
Enregistrez et ouvrez votre code sur un navigateur pour voir lâamĂ©lioration.
Contenu audio et vidéo#
Maintenant que nous sommes Ă lâaise pour ajouter de simples images dans une page web, nous passons Ă lâĂ©tape suivante : ajouter de la vidĂ©o et un lecteur audio Ă vos documents HTML. Dans ce tp, nous nous contenterons de le faire avec les Ă©lĂ©ments <video>
et <audio>
.
Les dĂ©veloppeurs ont toujours voulu utiliser la vidĂ©o et lâaudio sur le web et ce, dĂšs le dĂ©but des annĂ©es 2000, quand nous avons commencĂ© Ă disposer dâune bande passante suffisamment rapide pour supporter toutes sortes de vidĂ©os (les fichiers vidĂ©o Ă©tant beaucoup plus lourds que du texte ou des images).
Au dĂ©part, les technologies embarquĂ©es telles que HTML nâavaient pas la capacitĂ© dâintĂ©grer de la vidĂ©o ou de lâaudio, donc, les solutions « propriĂ©taires » (ou basĂ©es sur des greffons) comme Flash (puis, plus tard, Silverlight ) sont devenues trĂšs populaires pour gĂ©rer ce type de contenu. Ces technologies fonctionnaient bien mais avaient de nombreux inconvĂ©nients, comme une relation alĂ©atoire avec les fonctionnalitĂ©s HTML/CSS, des problĂšmes de sĂ©curitĂ© et dâaccessibilitĂ©.
Fichiers videos en HTML#
Note
LâĂ©lĂ©ment <video>
vous permet dâintĂ©grer de la vidĂ©o trĂšs facilement. En voici un exemple :
<video src="video/stacraft_ii_trailer_1080p.webm" controls>
<p>Votre navigateur ne prend pas en charge les vidéos HTML5. Voici, à la place, un <a href="video/stacraft_ii_trailer_1080p.webm">lien vers la vidéo</a>.</p>
</video>
Les fonctionnalités de ce code sont :
src
, de la mĂȘme maniĂšre que pour lâĂ©lĂ©ment<img>
, lâattribut src (source) contient le chemin vers la vidĂ©o que vous voulez intĂ©grer.controls
, Les utilisateurs doivent avoir un contrĂŽle sur la lecture de la vidĂ©o ou de lâaudio. (câest particuliĂšrement crucial pour les gens ayant de lâĂ©pilepsie.)- Le paragraphe dans la balise
<video>
est une solution de repli ou contenu de secours (fallback content) si le navigateur accĂ©dant Ă la page ne supporte pas lâĂ©lĂ©ment
<video>
,cela offre un texte alternatif qui peut ĂȘtre ce que vous voulez; dans ce cas nous avons mis un lien direct au fichier vidĂ©o, afin que lâutilisateur puisse au moins y accĂ©der sans avoir Ă se soucier du navigateur quâil utilise.
- Le paragraphe dans la balise
Ă faire
Faites un essai de cet exemple.
Important
Il y a un problĂšme avec lâexemple au-dessus que vous avez dĂ» rencontrer si vous avez accĂ©dĂ© au Ă votre document avec un navigateur comme Safari ou Internet Explorer. La vidĂ©o ne se lancera pas ! Ceci parce que les navigateurs acceptent des formats diffĂ©rents de video et dâaudio.
Note
Les formats comme le MP3, MP4 et le WebM sont appelĂ©s des formats conteneurs. Ils contiennent plusieurs parties qui, ensemble, donnent lâintĂ©gralitĂ© de la chanson ou de la vidĂ©o â comme une piste audio, une piste vidĂ©o et les mĂ©tadonnĂ©es qui dĂ©crivent le mĂ©dia qui est lu.
Les pistes audio et vidéo sont aussi de différents formats, par exemple :
Un conteneur WebM empaquette de lâaudio Ogg Vorbis avec de la vidĂ©o VP8/VP9. Firefox et Chrome, en particulier, assurent sa prise en charge.
Un conteneur MP4 assemble de lâaudio AAC ou MP3 en audio avec de la vidĂ©o H.264. Internet Explorer et Safari, principalement, le prennent en charge.
Lâancien conteneur Ogg rassemblait de lâaudio OggVorbis et de la vidĂ©o OggTheora. Il Ă©tait essentiellement pris en charge par Firefox and Chrome, mais il a Ă©tĂ© supplantĂ© par le format WebM qui est de meilleure qualitĂ©.
Un lecteur audio peut jouer directement une piste audio, par ex. un fichier MP3 ou Ogg. Elles ne nécessitent pas de conteneur.
Astuce
Les formats ci-dessus ont Ă©tĂ© créés pour compresser la vidĂ©o et lâaudio dans des fichiers gĂ©rables (les fichiers vidĂ©o et audio bruts sont trĂšs volumineux). Les navigateurs contiennent diffĂ©rents Codecs, comme Vorbis ou H.264, utilisĂ©s pour convertir le son et la vidĂ©o compressĂ©s en binaire et inversement. Comme indiquĂ© ci-dessus, les navigateurs ne supportent malheureusement pas tous les mĂȘmes codecs, vous devrez donc fournir plusieurs fichiers pour chaque production de mĂ©dia. Sâil vous manque le bon codec pour dĂ©coder le mĂ©dia, il ne pourra pas ĂȘtre lu.
Alors, comment faire ? Jetez un coup dâĆil Ă lâexemple qui suit, mis Ă jour:
<video controls>
<source src="video/stacraft_ii_trailer_1080p.mp4" type="video/mp4">
<source src="video/stacraft_ii_trailer_1080p.webm" type="video/webm">
<p>Votre navigateur ne prend pas en charge les vidéos HTML5. Voici, à la place, un <a href="video/stacraft_ii_trailer_1080p.mp4">lien sur la vidéo</a>.</p>
</video>
Ici, nous avons retirĂ© lâattribut src de la balise <video>
et inclus des éléments source
séparés qui pointent vers des sources appropriées. Dans ce cas, le navigateur parcourra les éléments source
et jouera le premier dont il peut prendre en charge le codec. Inclure des sources WebM et MP4 devraient suffire pour lire votre vidéo sur la plupart des plateformes et navigateurs de nos jours.
Chaque élément source
possĂšde Ă©galement un attribut de type. Câest facultatif, mais il est conseillĂ© de les inclure â ils contiennent le type MIME des fichiers vidĂ©o, et les navigateurs peuvent le lire et sauter immĂ©diatement les vidĂ©os quâils ne comprennent pas. Si le type nâest pas indiquĂ©, le navigateur va charger et essayer de lire chaque fichier jusquâĂ ce quâil en trouve un quâil prenne en charge, ce qui demande du temps et des ressources.
<video controls autoplay loop muted poster="img/stacraft_ii_poster.png">
<source src="video/stacraft_ii_trailer_1080p.mp4" type="video/mp4">
<source src="video/stacraft_ii_trailer_1080p.webm" type="video/webm">
<p>Votre navigateur ne prend pas en charge les vidéos HTML5. Voici, à la place, un <a href="video/stacraft_ii_trailer_1080p.mp4">lien vers la vidéo</a>.</p>
</video>
Voici les nouvelles fonctionnalités:
autoplay
Cet attribut permet de lancer immĂ©diatement la lecture de lâaudio ou de la vidĂ©o pendant que le reste de la page se charge. Nous vous dĂ©conseillons dâutiliser la lecture automatique de vidĂ©os (ou audio) sur vos sites, car les utilisateurs peuvent trouver cela vraiment ennuyeux.loop
Cet attribut permet de relancer en boucle la lecture de la vidĂ©o (ou de lâaudio). Cette façon de procĂ©der pouvant ĂȘtre mal perçue, ne lâutilisez que si câest vraiment nĂ©cessaire.muted
Cet attribut coupe le son de la vidéo par défaut.poster
Cet attribut prend comme valeur lâURL dâune image affichĂ©e avant la lecture de la vidĂ©o. Il sâutilise en tant que logo de dĂ©marrage ou de publicitĂ©.preload
Cet attribut sâutilise pour mettre en tampon les gros fichiers.- Il peut prendre 3 valeurs:
none
: ne pas mettre le fichier dans un tampon,auto
: mettre le fichier média dans un tamponmetadata
: ne mettre que les métadonnées dans le tampon
Notez que nous nâavons pas insĂ©rĂ© lâattribut autoplay
dans la version en direct - si la vidéo débute dÚs le chargement de la page, vous ne pourrez pas voir le poster!
Fichiers audio en HTML#
LâĂ©lĂ©ment <audio>
fonctionne exactement de la mĂȘme maniĂšre que lâĂ©lĂ©ment <video>
, mais avec quelques menues différences décrites plus bas. Un exemple classique ressemble à ceci:
<audio controls>
<source src="audio/stacraft_main_menu.mp3" type="audio/mp3">
<source src="audio/stacraft_main_menu.ogg" type="audio/ogg">
<p>Votre navigateur ne prend pas en charge l'audio HTML5. Voici, Ă la place, un <a href="audio/stacraft_main_menu.mp3">lien vers l'audio</a>.</p>
</audio>
Cela prend moins de place quâune vidĂ©o, et il nây a pas de composante visuelle â il est juste nĂ©cessaire dâafficher les contrĂŽles de lecture de lâaudio. Il ne prend pas en charge non plus lâattribut poster â toujours pas de composant visuel.
Excepté ce qui précéde, <audio>
accepte les mĂȘmes fonctionnalitĂ©s que <video>
- revoyez les sections ci-desssus pour plus dâinformations Ă ce propos.
Ă faire
AprÚs avoir testé les différents éléments précédent, créer un site basique qui listera les trois jeux suivants de la saga StarCraft:
StarCraft,
StarCraft Ghost (RIP)
et StarCraft II.
Il vous faudra :
TĂ©lĂ©charger les fichiers audio et vidĂ©o dans un nouveau dossier sur votre ordinateur depuis lâurl suivante.
CrĂ©er un nouveau fichier HTML dans le mĂȘme rĂ©pertoire nommĂ© :
index.html
qui listera les documents dédié à chaque jeu.Ajouter des éléments
<audio>
et <video> dans chaque page; faire en sorte quâils affichent les contrĂŽles par dĂ©faut du navigateur.Leur attribuer (aux deux) des Ă©lĂ©ments
<source>
que le navigateur puisse trouver le meilleur format audio et le charger. Nâoubliez pas dâinclure les attributs type.Donner Ă lâĂ©lĂ©ment <video> une image qui sera affichĂ©e avant que la vidĂ©o ne dĂ©marre.
- En bonus, vous pouvez chercher des images et des textes à intégrer comme celui-ci pour StarCraft :
In the distant future, a small group of human exiles have been doomed to fight for survival on the edge of the galaxy. Through military strength, espionage, and deceit, a unified Terran government has maintained an uneasy peace. But as resources and fuel run short, the Confederate nations find themselves looking towards the rich worlds of their alien neighbors, the enigmatic Protoss. To further complicate matters, it seems that a previously unknown speciesâ the Zergâ has entered Protoss space and is destroying everything in its path. The time for war has come.
La technique du reset CSS#
Comme nous lâavons dĂ©jĂ vu prĂ©cĂ©demment chaque moteur de rendu embarque ses propres styles css de base, ce qui nous arrange peu pour obtenir le mĂȘme rendu sur toutes les plateformes. Il convient pour ce faire dâutiliser un reset CSS.
Ă faire
En reprenant le code sur la saga Star Wars :
Ouvrez le votre document
index.html
dans plusieurs navigateurs (chrome, firefox, ie) et constatez la diffĂ©rence entre les styles de basesTĂ©lĂ©chargez un reset CSS ( Normalize.css ou celui dâEric Meyer par exemple), intĂ©grez-le et constatez les modifications.
Astuce
Un reset CSS est un simple fichier CSS, il convient de le tĂ©lĂ©charger puis de lâintĂ©grer (tout comme nâimporte quel style) dans notre document. Attention celui-ci doit lâĂȘtre avant nos propres styles.
Si besoin modifiez votre style css pour prendre en compte les modifications induites par le reset CSS.
CDN#
Note
Un content delivery network (CDN), ou rĂ©seau de diffusion de contenu, est constituĂ© dâordinateurs reliĂ©s en rĂ©seau Ă travers Internet et qui coopĂšrent afin de mettre Ă disposition du contenu ou des donnĂ©es Ă des utilisateurs.
Le plus courant des CDN utilisĂ© pour les police dâĂ©criture est Google Fonts. Pour incorporer vos polices copiez le code obtenu dans lâentĂȘte de votre document HTML.
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
font-family: 'Roboto', sans-serif;
Ă faire
En reprenant votre code sur la saga Star Wars, ajoutez des polices dâĂ©criture issue de GoogleFonts pour rendre votre design plus agrĂ©able Ă lâoeil.
Un exercice de Grille CSS#
Nous allons utiliser les images issues de cette archive
représentant les skeksis du film/série télé Dark Crystal.
Ă faire
Créer un document HTML contenant le squelette de base de tout document HTML5,
Au sein de la balise
main
ajouter une baliseimg
pour chaque image contenue dans lâarchiveAjouter un reset CSS Ă ce document
Ajouter un fichier de mise en forme css Ă ce document contenant les rĂšgles ci-dessous:
main {
max-width: 1024px;
margin: 0 auto;
}
img {
display: block;
margin: 0 auto;
max-width: 100%
}
Nos images devraient sâafficher les unes en dessous des autres et ĂȘtre centrĂ©es horizontalement dans notre document.
Nous allons créer une grille pour mettre les images les unes à cÎté des autres, notre grille devra contenir 5 colonnes par lignes.
Dans un premier temps nous allons appliquer la grille sur notre balise main
:
main {
max-width: 1024px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(5, 1fr);
}
Que constatez-vous ?
Notre document prĂ©cĂ©dent nâest pas sĂ©mantiquement correct, il nous faut corriger cela !
Ă faire
Commenter le css qui Ă transformer notre balise
main
en grillePour chaque image créer un
article
qui contiendra en plus de lâimage le nom du Skeksis (vous pouvez le retrouver Ă partir du nom de lâimage)Nos articles devront ĂȘtre dans une balise
section
Créer une grille de 5 colonnes pour afficher les articles.
En reprenant le document prĂ©cĂ©dent, servez-vous de la disposition des grilles pour placer les articles pairs sur 3 colonnes et les articles impairs sur 2 colonnes. Attention a bien gĂ©rĂ© les lignes oĂč seront affichĂ©s les Ă©lĂ©ments.
En reprenant le code sur la saga Star Wars afficher les films de la page dâaccueil dans une grille de 3 colonnes.
BatĂźssons un template#
Nous allons crĂ©er une page dâactualitĂ©s des plus simple. Voici un exemple de rĂ©sultat attendu de votre part:

Ă faire
Créer fichier index.html encodé en:code:UTF-8
Créer le squelette de base de tout fichier HTML5 dans celui-ci
Créer un menu de navigation au sein du header principal
- CrĂ©er un listing dâactualitĂ©s sĂ©mantiquement correct
nb: les liens présents dans le fichier pointeront sur cette page (à savoir index.html)
Astuce
Inclure un reset CSS
Inclure une grille de mise en forme (simple grid par exemple ou le module GridLayout de CSS3)
Mettre en forme le listing dâactualitĂ©s via votre grille de mise en forme
- Terminer le design de votre template en utilisant les propriétés et sélecteurs CSS vus en cours
nb: le style de lâexemple fait (en dehors du reset css et de la grille) un peu moins de 100 lignes de CSS en utilisant 26 sĂ©lecteurs CSS et trois types de sĂ©lecteurs diffĂ©rents
Media queries#
Note
?ous avons créé un template basique mais fonctionnel dâun site web dâactualitĂ©. Nous allons devoir adapter notre site Ă diffĂ©rents terminaux. Nous allons donc transformer notre template en template responsive.
Nous avons créé un template qui sâaffiche parfaitement sur grand Ă©cran (supĂ©rieur Ă 960px). Il convient de modifier notre CSS pour le faire sâafficher convenablement sur des Ă©crans plus petits.
Note
Les requĂȘtes mĂ©dia (media queries) permettent de modifier lâapparence dâun site ou dâune application en fonction du type dâappareil (impression ou Ă©cran par exemple) et de ses caractĂ©ristiques (la rĂ©solution dâĂ©cran ou la largeur de la zone dâaffichage (viewport) par exemple).
Les requĂȘtes mĂ©dia sont utilisĂ©es afin :
Dâappliquer certains styles de façon conditionnelle grĂące aux rĂšgles
@media
et@import
.De cibler certains média pour les éléments
<style>
,<link>
,<source>
et dâautres Ă©lĂ©ments HTML grĂące Ă lâattributmedia=
.
Ajoutez ce code CSS Ă la fin de votre fichier de style
@media screen and (max-width: 600px) {
body {
color: red;
}
}
En utilisant lâoutil prĂ©sentĂ© ci-dessus, modifier le viewport (la taille de lâĂ©cran) pour voir la modification de la media queries sâappliquer.
Ă faire
En reprenant le template précédent, modifier votre style css pour rendre votre site responsive. Voici quelques pistes qui peuvent vous aider:
La grille passe de plusieurs colonnes à une seule ou les éléments sont placés les uns en dessous des autres,
Le menu place ses éléments également les uns en dessous des autres et les centres la plupart du temps.
Projet plateforme de Streaming#
Note
Lâobjectif de votre projet est de produire, en binĂŽme, une maquette de site de diffusion de contenu lĂ©gal (streaming). Ce sera une maquette dans le sens oĂč les fonctionnalitĂ©s cotĂ© serveur (recherche, ajout dans les favoris, etc.) seront simulĂ©es.
Voici la liste des pages que votre maquette devra, au minimum, comporter :
une page dâaccueil, affichant un message de bienvenue, les nouveautĂ©s et les recommandations en cours, et offrant un champs de recherche ;
une page simulant un rĂ©sultat de recherche, affichant une liste dâarticles menant vers chaque sĂ©rie tĂ©lĂ©;
une page dĂ©taillĂ©e de la sĂ©rie, incluant une description, la possibilitĂ© de laisser un commentaire, et dâajouter la sĂ©rie Ă ses favoris;
une page de visualisation dâun Ă©pisode;
une page âQui sommes-nous ?â prĂ©sentant le site.
Votre site doit ĂȘtre responsive: il doit sâadapter Ă la largeur de lâĂ©cran, afin de prĂ©senter une ergonomie diffĂ©rente (et appropriĂ©e) sur un Ă©cran dâordinateur et sur un smartphone.
Indication
Votre maquette utilisera exclusivement du HTML et du CSS (pas de Javascript ou de PHP).
Vous pouvez utiliser des extraits de HTML ou de CSS trouvĂ©s sur le Web, Ă condition de citer vous sources (URL dâorigine en commentaire).
Pensez-bien Ă utiliser les valideurs du W3C pour le code HTML et CSS ; un site ne passant pas le valideur (sans erreur ni warning) recevra une note en dessous de la moyenne !
Comme tout site de streaming, votre projet devra avoir un aspect uniforme dâune page Ă lâautre.
Les pages que vous crĂ©ez doivent ĂȘtre liĂ©es les unes aux autres de maniĂšre Ă simuler de maniĂšre cohĂ©rente la navigation Ă lâintĂ©rieur du site. Notez que, mĂȘme si certaines pages (page de garde, rĂ©sultat de recherche) contiennent des liens vers des articles diffĂ©rents, tous ces liens peuvent pointer vers lâunique page dĂ©taillĂ©e dâune sĂ©rie que lâon vous demande dâĂ©crire.
Lâorganisation des fichiers de votre site doit respecter les bonnes pratiques vues en cours.
Pour simuler un formulaire, il suffit dâutiliser lâadresse de la page rĂ©sultat comme attribut action de la balise
<form>
.Si vous travaillez seulâ e, vous ĂȘtes dispensĂ©â e de rĂ©aliser la page ârĂ©sultat de rechercheâ et la page âqui sommes-nous ?â.
Projet maquette de site marchand#
Note
âobjectif de votre projet est de produire, en binĂŽme, une maquette de site marchand. Ce sera une maquette dans le sens oĂč les fonctionnalitĂ©s cotĂ© serveur (recherche, passage de commande) seront simulĂ©es.
Voici la liste des pages que votre maquette devra, au minimum, comporter :
une page dâaccueil, affichant un message de bienvenue et les promotions en cours, et offrant un champs de recherche ;
une page simulant un rĂ©sultat de recherche, affichant une liste dâarticles ;
une page dĂ©taillĂ©e dâarticle, incluant une description, la possibilitĂ© de laisser un commentaire, et dâajouter lâarticle Ă son panier ;
une page de validation de commande, permettant de saisir les coordonnées de livraison ;
une page âQui sommes-nous ?â prĂ©sentant le site.
Votre site doit ĂȘtre responsive: il doit sâadapter Ă la largeur de lâĂ©cran, afin de prĂ©senter une ergonomie diffĂ©rente (et appropriĂ©e) sur un Ă©cran dâordinateur et sur un smartphone.
Indication
Votre maquette utilisera exclusivement du HTML et du CSS (pas de Javascript ou de PHP).
Vous pouvez utiliser des extraits de HTML ou de CSS trouvĂ©s sur le Web, Ă condition de citer vous sources (URL dâorigine en commentaire).
Pensez-bien Ă utiliser les valideurs du W3C pour le code HTML et CSS ; un site ne passant pas le valideur (sans erreur ni warning) recevra une note en dessous de la moyenne !
Comme tout site marchand, votre projet devra avoir un aspect uniforme dâune page Ă lâautre.
Les pages que vous crĂ©ez doivent ĂȘtre liĂ©es les unes aux autres de maniĂšre Ă simuler de maniĂšre cohĂ©rente la navigation Ă lâintĂ©rieur du site. Notez que, mĂȘme si certaines pages (page de garde, rĂ©sultat de recherche) contiennent des liens vers des articles diffĂ©rents, tous ces liens peuvent pointer vers lâunique page dĂ©taillĂ©e dâarticle que lâon vous demande dâĂ©crire.
Lâorganisation des fichiers de votre site doit respecter les bonnes pratiques vues en cours.
Pour simuler un formulaire, il suffit dâutiliser lâadresse de la page rĂ©sultat comme attribut action de la balise
<form>
.Si vous travaillez seulâ e, vous ĂȘtes dispensĂ©â e de rĂ©aliser la page ârĂ©sultat de rechercheâ et la page âqui sommes-nous ?â.
Comment tester notre site sur différents terminaux.
Il est compliquĂ© de tester notre site sur diffĂ©rents terminaux, notamment lorsque celui-ci est en dĂ©veloppement. Fort heureusement les navigateurs nous proposent un outil au sein de lâinspecteur permettant de tester cela:
Grùce à cette fonctionnalité nous pouvons tester notre site web en mode responsive.