--> Stage de programmation web
html / CSS / Javascript
1Logiciels utilisés et liens utiles Vous pourrez utiliser les logiciels suivants : Quelques liens utiles pour ceux qui voudraient en apprendre plus que ce que nous aborderons : 2Les balises html Exercice 1 Dans votre éditeur taper le texte ci-dessous, enregistrer votre programme dans le répertoire choisi en le nommant test_01.html. Ouvrir ensuite ce fichier avec un navigateur web.
Le résultat qui apparaît correspond aux caractères enregistrés mais sans passage à la ligne et sans aucun formatage.
Pour mieux organiser ce que l'on voit, il va falloir ajouter des instructions « codées » dans notre fichier test_01.html.
Remplacer le contenu du fichier précédent par ce qui suit et observer le résultat dans votre navigateur en rechargeant la page.
Chaque instruction entre les caractères < et > s'appelle une balise, et toutes ont un effet sur la structure de la page web. Nous allons apprendre le fonctionnement des plus communes dans ce tutoriel. Exercice 2 La zone de saisie ci-dessous simule l'utilisation d'un éditeur, et « l'écran » en dessous simule le résultat dans un navigateur. Cliquer sur « Exécuter » pour afficher le résultat du code.
Modifier ensuite le texte entre les balises body et insérer au milieu de celui-ci la balise <br />. Observer le résultat en cliquant sur « Exécuter ».
Exécuter
3Le CSS Exercice 3 On aimerait que le texte du fichier de l'exercice 1 soit écrit en rouge.
Voici trois méthodes pour faire cela. Nous verrons ensuite laquelle est la meilleure.

Dans la première, on modifie l'attribut css couleur du bloc <p>.
Pour la deuxième, on annonce le changement de couleur dans la partie <head> de notre document.
Dans la troisième méthode on se sert d'un fichier externe styles.css, on doit le signaler dans le <head> du document et on crée ensuite ce nouveau fichier (on veillera à l'enregistrer dans le même répertoire que test_01.html.

Nom du fichier : test_01.html

Nom du fichier : styles.css

Exercice 4 On souhaite maintenant écrire un paragraphe en rouge, l'autre, en blanc sur fond noir, et le troisième de la même manière que le premier.
Modifier vos fichiers avec les codes ci-dessous :

Nom du fichier : test_01.html

Nom du fichier : styles.css

Exercice 5 Compléter le code ci-dessous pour que la couleur de fond de la page soit rose, que la couleur d'écriture du premier paragraphe soit blanche, et du deuxième bleue.
Exécuter
Exercice 6 Chaque balise html peut avoir ses attributs css que l'on modifie pour obtenir un aspect différent. Il faut donc apprendre les balises html et les attributs css.
À l'aide de recherches expliquer le rôle des balises html et attributs css ci-dessous :
Exercice 7 Modifier le code ci-dessous pour que le rectangle blanc soit à la droite du disque bleu et non en dessous.
Exécuter
Exercice 8 Votre mission est de créer une page pour obtenir le résultat ci-dessous
Exécuter
4Les images Un site web se doit d'être agréable à l’œil. Il faut donc savoir y insérer des images. Cela n'est pas toujours aisé. Voici des problématiques auxquelles il va nous falloir répondre. 5Un exemple pas à pas Nous allons créer une page web, en partant de zéro, et en effectuant des ajouts, au fur et à mesure, pour bien se rendre compte de l'effet de chaque instruction.
Nous aurons besoin pour cela de créer un nouveau répertoire, dans lequel nous créerons, deux fichiers : page_web.html et mon_style.css. Pour la première étape le fichier mon_style.css sera vide.

Nom du fichier : page_web.html

Nom du fichier : mon_style.css

En faisant un clic droit sur l'image ci-dessous, on la sauvegardera dans le même répertoire que les deux fichiers précédents, et on la nommera fractale.png. Ce sera l'image qui nous servira d'image de fond pour notre page web.

fractale.png

• Étape 1
Ouvrir le fichier page_web.html dans votre navigateur.
Ouvrir le fichier page_web.html dans votre navigateur.
Une page blanche devrait apparaître, et c'est normal, car nous n'avons encore rien écrit entre les balises <body> et </body>.

• Étape 2
Nous allons modifier le fichier mon_style.css pour afficher l'image de fond.

Nom du fichier : mon_style.css

Vérifier le changement en actualisant la page web.

• Étape 3
Nous obtenons une image de fond qui se répète. Pour empêcher cela, nous allons à nouveau modifier le fichier de style.

Nom du fichier : mon_style.css



• Étape 4
L'image ne se répète plus, mais la couleur de fond ne correspond pas. Nous décidons de plus de placer l'image en haut à droite et non à gauche.

Nom du fichier : mon_style.css



• Étape 5
Nous allons maintenant organiser le corps de notre fichier html.
Nous y mettrons une bannière pour le titre et un conteneur central, pour le texte principal, qui sera découpé en plusieurs paragraphes.

Nom du fichier : page_web.html

Pour l'instant, ces derniers changements ne sont pas encore visible car aucun contenu n'a été ajouté à l'intérieur de ces balises.

• Étape 6
Ajoutons du texte en latin (c'est une pratique courante chez les développeurs web durant la conception d'un site).

Nom du fichier : page_web.html

Et nous allons, mettre un fond blanc dans la bannière et le conteneur centrale.

Nom du fichier : mon_style.css



• Étape 7 : la bannière
Nous allons modifier la largeur de la bannière pour qu'elle occupe 70% de la largeur de l'écran. Ensuite, nous écrirons au centre de la div avec une police de 2em, et nous demanderons à ce qu'il y ait une marge interne de 10 pixels en haut et en bas.

Nom du fichier : mon_style.css
Lignes modifiées : ligne 9 à 13.

Nous allons maintenant écrire le titre de la bannière en gras, et avec une ombre en gris.
Nous demandons également à ce que les coins de la bannière soient arrondis.

Nom du fichier : mon_style.css
Lignes modifiées : ligne 14 à 16.

Ajoutons maintenant une image à gauche dans la bannière. Cette image, à télécharger ci-dessous (clic droit + enregistrer-sous), à une hauteur de 100 pixels. Il faut donc donner cette même hauteur à notre bannière, et dire que la ligne d'écriture fait également 100 pixels, si on veut que le texte soit centré verticalement.

Nom du fichier : julia.png

Nom du fichier : mon_style.css
Lignes modifiées : ligne 17 à 21.



• Étape 8 : le conteneur central
Nous allons tout d'abord, établir une marge avec la bannière, pour ne pas que les div soient collées.
Ensuite, nous allons éloigner le texte des bords hauts et bas de la div, c'est-à-dire augmenter les marges internes, puis définir une largeur égale à celle de la bannière.
Et pour finir, nous arrondirons les coins de la div.

Nom du fichier : mon_style.css
Lignes modifiées : ligne 25 à 29.



• Étape 9 : les paragraphes
Pour l'instant les paragraphes occupent 100% de la largeur du conteneur central. Nous allons réduire cela, et demander de centrer les div.

Nom du fichier : mon_style.css
Lignes modifiées : ligne 31 à 34.

Pour les titres (balises h2), nous allons ajouter à gauche une image de fond (à télécharger ci-dessous), et donc devoir décaler l'écriture pour que le texte ne se superpose pas à l'image.
Pour que le texte soit centré verticalement, nous allons définir la hauteur de la balise et donner la même valeur pour la hauteur de ligne.

Nom du fichier : vign_2.jpg

Nom du fichier : mon_style.css
Lignes modifiées : ligne 35 à 42.



• Étape 10 : ajout d'une image
Pour terminer, nous allons ajouter une image (à télécharger ci-dessous), dans le corps du fichier html.

Nom du fichier : fractale.jpg

Nom du fichier : page_web.html
Ligne modifiée : 33.

Et il nous reste à définir le style pour cette image dans le fichier css.
Nous allons définir sa taille, et à la place de demander à la centrer, nous allons définir une position flottante à droite, ce qui aura pour effet que l'image sera placée à droite, et que le texte s'y adaptera.
Et pour des raisons esthétiques, nous allons ajouter une bordure arrondie autour de cette image.

Nom du fichier : mon_style.css
Lignes modifiées : ligne 43 à 48.

6Un concours Voici deux fichiers composant une page web : une page html et un fichier de style css.
La règle du concours et de ne jamais modifier la page html, mais par contre de faire preuve d'imagination sur le fichier css, pour que la page web soit la plus belle possible !

Nom du fichier : concours.html

Nom du fichier : concours_style.html

7Le Javascript Le JavaScript est un langage qui comme le css peut s'insérer dans une page web. Il permet de créer une interaction entre l'utilisateur et le site : modification des couleurs ou de la position d'une div, menu déroulant, déplacement d'éléments au clavier ou à la souris, etc.
Le Javascript est un langage de programmation, c'est à dire qu'il gère des variables et peut donc effectuer des opérations et calculs. Ce langage s'éxécute dans le navigateur de la personne qui visite la page web et non pas sur le serveur où est située cette dernière (dans le cas d'un site distant).

Voici un fichier html sans Javascript dans un premier temps qui affiche trois div de couleurs différentes.

Nom du fichier : js_01.html

Remarque : nous avons créer les styles dans la partie head car il n'y avait que très peu d'attributs, pour un fichier plus volumineux nous aurions préféré le faire dans un fichier externe comme précédemment.

Nous allons ajouter maintenant de l'interaction.
Quand nous allons cliquer sur l'une des trois div un message différent va apparaître dans une boite de dialogue. On modifie le fichier js_01.html, au niveau des lignes 40, 44 et 49, de la sorte :

Nom du fichier : js_01.html

L'instruction onclick="...", à l'intérieur d'une balise, permet d'exécuter une action lorsque l'utilisateur clique sur l'objet créer par la balise.
L'action exécutée correspond à l'instruction qui a été écrite entre les guillemets. Ici on demande d'ouvrir une boite de dialogue grâce à l'instruction alert('...'), et le navigateur affichera le message inscrit entre les guillemets ' '.

Voici une autre manière de faire la même chose, mais qui une fois comprise nous permettra par la suite de faire des pages web bien plus complexes.

Nom du fichier : js_01.html

Décryptons les nouveautés.
À la fin de la page nous avons créé une sous-partie de script et à l'intérieur nous avons écrit du Javascript.
<script>
...
</script>

Tout ce qui est en pointillets sera une zone où l'on pourra écrire du Javascript. Ici nous avons défini une fonction javascript :
function boite(texte) {
	alert(texte);
	}

Cette fonction s'appelle boite et prend un paramètre qui se nomme texte. Entre les accolades nous voyons ce qu'exécute cette fonction.
Ici rien de compliqué : elle affiche une boite de dialogue (grâce à alert) dont le message sera ce que contiendra la variable texte.
Il faut bien comprendre que cette suite d'instruction est simplement la définition de la fonction. On ne l'a pas encore exécutée.
Elle le sera justement quand on cliquera sur l'une des trois div. Par exemple :
<div class="noir" onclick="boite('Noir');">
nous dit que si l'utilisateur clique sur cette div on exécute la fonction boite avec comme paramètre 'Noir'. La variable texte de la fonction devient donc 'Noir'.

Pour montrer ce qu'apporte cette manière de faire, voici une modification de ce fichier.

Nom du fichier : js_01.html

Nous travaillons ici avec trois variables : i, texte et phrase.

Concernant i : l'instruction
var i = 0;
fait que lorsque le navigateur crée la page web, il va créé également une variable i qui aura la valeur 0. Nous aurions pu mettre bien sûr une autre valeur. Le navigateur comprend de lui-même que cette variable est de type entier. Et à chaque fois, que la fonction boite sera exécutée, l'instruction
i = i+1;
fera augmenter la variable i de 1.

Concernant la variable phrase : l'instruction
phrase = "Vous avez cliqué "+i+" fois.\n Et vous aimez la boite "+texte;
permet de créer une chaîne de caractères qui commence par "Vous avez cliqué " et ensuite nous voulons ajouter le nombre de clics qui se sont produits. C'est la variable i qui le contient. Mais si nous avions écris i entre les guillemets, le navigateur aurait afficher la lettre i et non pas le contenu de la variable i. C'est pour cela qu'on ajoute le +i+ après les guillemets.
Quand on utilise le + entre deux chaînes de caractères cela va créer une nouvelle chaîne de caractère composée des deux à la suite. On parle de concaténation.
Les sympboles \n dans " fois.\n Et vous aimez la boite " ajoute un retour chariot (on passe à la ligne).
Nous voyons enfin que le +texte de la fin permet de concaténer la valeur de la variable texte à la fin de la chaîne de caractères. La boite de dialogue affichée contient donc un message personnalisé en fonction de la div où on clique.

L'affiche des boites de dialogue n'est pas très conviviale. Nous allons plutôt afficher les messages dans une quatrième div prévue à cet effet.

Nom du fichier : js_01.html

Nous avons donc créé une nouvelle div dont l'id est "message". Il est très important ici que la div porte une id, c'est-à-dire une identité unique, car nous voulons en modifier des attributs à l'aide de Javascript, il faut donc que nous puissions y faire référence.
Dans la fonction Javascript boite qui est appelée à chaque clic nous avons l'instruction suivante :
var elt_mes = document.getElementById("message");
La variable elt_mes est un objet que l'on trouve dans le "document" (on peut dire dans la page web) et qui porte l'id "message". Ainsi, on pourra utiliser elt_mes pour interagir avec la div "message".
L'instruction
elt_mes.innerHTML = phrase;
permet justement de modifier le contenu html de la div "message". On le remplace par la chaîne de caractère phrase. C'est d'ailleurs pour cela que nous avons remplacer "\n" par "<br />" car en html le retour chariot "\n" n'est pas reconnu par tous les navigateurs, alors que la balise "<br />" oui. Exercice 9 Modifier la fonction affiche() pour qu'apparaisse dans la div grise non pas la table de 3, mais la table de 5 décallée de une unité. C'est-à-dire : 1 ; 6 ; 11 ; 16 ; 21 etc.
Ajouter une interaction avec la div bleue pour qu'au clic la table se réinitialise.
Exécuter
8Le DOM Pour pouvoir aller plus loin dans nos interactions avec une page web, il va falloir un peu mieux comprendre ce qu'il se passe lorsqu'un navigateur charge un fichier html.
Au chargement d'une page le navigateur utilisé crée un objet appelé DOM pour Document Object Model qui est une sorte « d'arbre » contenant tous les éléments de la page web.
Le langage javascript permet d'agir sur le DOM et donc de modifier les éléments de la page web. Dans la dernière page js_01.html lorsqu'on écrivait
document.getElementById("message");
on récupérait en fait l'élément message dans le DOM.
Mais pour pouvoir faire cela il faut que le DOM soit créé, et ceci n'a lieu qu'une fois que la page a été complètement chargée et les attributs css d'un objet du DOM que l'on souhaite modifier doivent auparavant avoir été définis pour le DOM. C'est pour cela que la balise script a été ajoutée au bas de la page, pour que les objets du DOM sur lesquels portent des instructions existent déjà.
Cependant, le chargement d'une page web peut être assez long, surtout si on fait appel à des librairies externes que l'on charge dans la partie head et qui exécutent des instructions sur la page. Nous ne serons alors pas certains que tous les objets du DOM seront créés même lorsque le navigateur lit les dernières instructions au bas de la page.
Pour cela on va utiliser l'instruction Javascriptonload(...) qui exécute les instructions écrites entre parenthèses une fois la page chargée.
Dans l'exemple ci-dessous, on change la couleur de la « balle » une fois la page chargée :

Nom du fichier : js_02.html

Le fait d'appeler une fonction une fois que la page est chargée est fondamentale pour de nombreuses pages web utilisant javascript, et encore plus lorsque nous voudrons programmer des jeux, notamment ceux dont les éléments graphiques doivent s'adapter à la taille de l'écran de l'utilisateur. Exercice 10 Expliquer les instructions Javascript de la page web suivante.

Nom du fichier : js_03.html

Exercice 11 Après avoir testé le fichier ci-dessous, ajouter deux autres div pour le bleu et le vert, ainsi que le + et -, pour pouvoir faire tous les mélanges de couleur que l'on souhaite.
Exécuter
Exercice 12 Remplaçons les clics sur les + et - de l'exercice précédent par des curseurs. Compléter le code ci-dessous pour ajouter le bleu.
Exécuter
9Le clic s'est bien, mais les touches s'est mieux !

Nom du fichier : js_04.html

Exercice 13 Améliorer le fichier précédent en : 10Conception de mini jeux en Javascript 10.1Principes Nous allons ici décrire une manière de concevoir une page web contenant un petit jeu de telle sorte que l'on puisse généraliser la pratique.
Partons de la base suivante :
Nous allons faire le choix de ne pas utiliser de fichier css et js externe, donc nous utiliserons les balises de style et de script dans la partie head de la sorte :
L'autre choix que nous faisons est de concevoir un jeu basé sur des balises div, c'est un dans un premier temps plus simple que d'utiliser la balise canvas.
Il faut imaginer ensuite le jeu, les balises à placer dans la partie body et le css associé.
Certaines de ces balises auront des propriétés css qui devront être modifiées. Par exemple, une div représentant un personnage qui doit bouger, aura ses propriétés css top et left qui changeront de valeur. Et pour que cela se fasse sans difficulté il va falloir définir ses propriétés css, non pas dans la partie style, mais en Javascript. Nous verrons comment un peu plus loin.
Cependant, pour modifier en Javascript une propriété css d'un élément de la page, il faut que celui-ci soit créé, et et pour être sûr de cela, il faut le faire à l'aide d'une fonction Javascript qui ne se lance qu'une fois la page chargée.
On ajoute pour cela à la balise <body> l'attribut onload="", où entre les guillemets on écrira le nom de la fonction Javascript qui modifiera les propriétés css. Cette fonction Javascript étant écrite entre les balises script.
Toutes les autres fonctions Javascript nécessaires au jeu seront également placées entre les balises script : on peut avoir besoin par exemple d'une fonction qui gère un chronomètre, une qui gère les mouvements, soit en attendant qu'il y ait un clic, soit en se déclenchant lorsqu'on enfonce une touche, une autre fonction qui se déclenche à la fin de la partie, ou encore d'autres fonctions pour gérer les mouvements des « méchants », l'évolution du score etc. 10.2Un exemple pas à pas Nous allons ici créer un jeu où le personnage principal est un crabe qui se déplace de gauche à droite, avec pour but de survivre le plus longtemps possible sans se faire toucher par les noix de cocos qui tombent du ciel.
Il nous faut donc créer un répertoire spécifique à ce jeu et y sauvegarder les images suivantes :
plage
noix de coco
crabe
Créons maintenant le fichier html du jeu en commençant par la base html et css.
Exercice 14
  1. Pourquoi ne voit-on qu'un écran noir avec un texte ?
  2. Pourquoi, à ce stade du jeu ne voit-on aucune noix de coco ?
  3. Pourquoi #beach a-t-elle un z-index à 1000 alors que #crabe et .coco à 2000 ?


Ajoutons la gestion du clic sur la page noire (lignes 69 à 73 et ligne 93).
Exercice 15 Expliquer les derniers ajouts dans le code.

Il va nous falloir maintenant, lors de l’exécution de cette fonction initialise que les objets et les variables du jeu se définissent (ligne 74 à 134).
Par contre les variables utilisées dans le jeu devront être tout d'abord déclarées à l'extérieur de toute fonction pour qu'elles soient bien définies de manière globale et donc que nous puissions les utiliser dans toutes les parties du code (ligne 70).
Nous allons donc définir ici les propriétés css du crabe, des dix noix de coco, de la position du chronomètre et également de son lancement.
Ici a donc été ajouté la variable time qui correspond au temps qui s'écoule lors de la partie. Il va s'incrémenter de 1 à chaque seconde. Ce sera la fonction chrono() qui s'en chargera. D'ailleurs celle-ci a va se déclencher à intervalle régulier grâce à l'instruction chronoTime = setInterval( function (){chrono();},1000);. L'intervalle d’exécution sera de 1000 millisecondes soit bien d'une seconde.
La variable chronotime sert donc à établir cette exécution répétée de la fonction chrono().
La dernière variable définie de manière globale est collision. Elle permettra de savoir si une noix de coco a touché le crabe ou non.
Nous voyons de plus dans ces ajouts de code l'instruction setTimeout( function () { tombeCoco(n);},1000 ); . Le nombre n de tombeCoco(n) correspondant au numéro du crabe. Elle permet d'exécuter la fonction tombeCoco(n) après un temps en milliseconde. Dans notre exemple c'est au bout de 1000 millisecondes. La fonction tombeCoco(n) permettra de faire chuter les noix de coco, et nous remarquons donc que nous n'allons pas toutes les faire tomber en même temps, mais les une après les autres.
Il nous reste alors à définir les fonctions chrono et tombeCoco (lignes 137 à 163).
Exercice 16
  1. Expliquez les ajouts.
  2. Quelle fonction exécutée dans chute(n) n'a pas encore été définie ?


Il nous reste maintenant à animer le crabe à l'aide du clavier, à regarder si une noix de coco touche le crabe, et dans ce cas gérer la fin du jeu. Et puisqu' à la fin du jeu nous allons recharger la page, il va falloir qu'au chargement de celle-ci l'écran noir redevienne visible (lignes 165 à 201 et ligne 207).
Exercice 17
  1. Quelle instruction permet de détecter que le jeu doit s'arréter ?
  2. Comment la page web s'est-elle qu'il faut « écouter » l'appuie de touches sur le clavier ?
  3. Quelle partie du code gère le mouvement vers la gauche du crabe ?
11D'autres mini-jeux Voici trois autres mini-jeux conçus de la même façon. Pour analyser le code il vous faudra faire un clic droit et choisir « afficher le code source de la page ».