đŸ–Œ 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 page

  • noindex Interdit au robot d’indexer la page

  • follow Permet au robot de suivre les liens contenus dans la page

  • nofollow Interdit au robot de suivre les liens contenus dans la page

  • noarchive 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

<

&lt;

lower than

>

&gt;

greater than

"

&quote;

double quote

'

&apos;

simple quote

&

&amp;

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#

../../_images/semantique.png

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:

  • <article>

  • <aside>

  • <details>

  • <figcaption>

  • <figure>

  • <footer>

  • <header>

  • <main>

  • <mark>

  • <nav>

  • <section>

  • <summary>

  • <time>

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>&copy; 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.

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;
    }
}
Exemple#
@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:

  1. Les « librairies » CSS qui fournissent une grille comme Simple Grid

  2. 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

  1. 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 ?

  2. 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

  3. 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

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.

    1. Abrams

    1. Abrams

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

  1. Mettez en forme votre document HTML via CSS pour obtenir un site vitrine de la saga.
    starwars example

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.

https://www.plantuml.com/plantuml/svg/SoWkIImgAStDuN80iueJSqgughMv580Wj3YrA2ynDnN4hb5GAaLmbS3ohhc9cJaA402KXx8WShwfnSM9wQbeSWZvwA3KujIIMAXyT71fKcvcIInNBPT3QbuAs15W5j1X00==

Croquis de notre premier formulaire#

À faire

  1. Créer un squelette HTML5 de base,

  2. 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>,

  3. Encapsuler chaque couple label:input et le bouton dans un div,

  4. Les noms des champs seront user_name, user_mail et user_msg,

  5. 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.

center

À faire

  1. CrĂ©er une feuille de style (au sein d’un rĂ©pertoire style) pour mettre en forme votre formulaire.

  2. 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

  1. Ajouter les attributs name Ă  chaque champs du formulaire

  2. Ajouter les attributs for à chaque libellé

  3. 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

  1. 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.

  2. 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).

Squelette de base HTML5#
<!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 ?

Exemple d’article HTML5#
<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

  1. 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

  1. Avant tout, créer un squelette de document HTML5 et lier le avec le css ci-dessous.

  2. Le contenu de chaque tableau est encadré par ces deux balises<table></table>.
    • Ajoutez-les dans le corps de votre HTML.

  3. 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.

  4. 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.

  5. Placez les quatre cellules que vous avez créées entre deux balises <tr>,

  6. 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>&nbsp;</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

  1. 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.

  2. 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>.

  3. 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

  1. Tout d’abord, faites une copie locale du tableau ci-dessus et du code css dans un nouveau rĂ©pertoire sur votre ordinateur.

  2. Ensuite, utilisez colspan pour mettre « Animaux », « Hippopotame » et « Crocodile » sur deux colonnes.

  3. Enfin, utilisez rowspan pour mettre « Cheval » et « Poulet » sur deux lignes.

  4. 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.

À 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:
      1. none: ne pas mettre le fichier dans un tampon,

      2. auto: mettre le fichier média dans un tampon

      3. metadata: 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:

  1. StarCraft,

  2. StarCraft Ghost (RIP)

  3. 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 bases

  • TĂ©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

  1. Créer un document HTML contenant le squelette de base de tout document HTML5,

  2. Au sein de la balise main ajouter une balise img pour chaque image contenue dans l’archive

  3. Ajouter un reset CSS Ă  ce document

  4. 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

  1. Commenter le css qui Ă  transformer notre balise main en grille

  2. Pour 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)

  3. Nos articles devront ĂȘtre dans une balise section

  4. Créer une grille de 5 colonnes pour afficher les articles.

  5. 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.

  6. En reprenant votre grille dans un nouveau fichier, retirer les titres de niveau 2 au sein de vos articles puis ajouter l’image suivante dans un nouvel article:
  7. Et placer les différents articles au sein de la grille pour obtenir le résultat suivant:
  8. 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:

Exemple de résultat attendu

À 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.

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.

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’attribut media=.

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 ?”.