Sélecteurs avancés et images CSS

Licence Informatique, semestre 6

Alexandre NiveauJean-Marc Lecarpentier — Judith Jeyafreeda Andrew

Enseignement des technologies du Web

 

Sélecteurs avancés et images CSS

Notes de cours

Travail personnel

Objectifs

  • Comprendre les sélecteurs avancés
  • Continuer à pratiquer la mise en page CSS, en prenant de bonnes habitudes

Exercice 1 (optionnel) — CSS Diner #

Cet exercice est optionnel. Si vous avez l'impression qu'il vous embrouille plus qu'il ne vous aide, passez à la suite.

Essayer le jeu CSS Diner, qui vise à apprendre les sélecteurs CSS, des plus basiques au plus complexes. Chaque niveau est une sorte de leçon sur un sélecteur particulier (les informations sont données dans l'encadré de droite), l'objectif étant d'arriver à sélectionner les bons objets en entrant un sélecteur CSS. Attention : vos sélecteurs ne doivent pas mentionner la table, ça ne fonctionnera pas (c'est un bug). Par exemple, la solution du premier niveau est le sélecteur plate, le sélecteur .table plate ne marchera pas.

Avec ce qui a été vu en cours, vous pouvez aller jusqu'au niveau 15. Passez ensuite en priorité à l'exercice suivant, surtout si vous êtes débutant·e. À noter que, malheureusement, à partir du niveau 19 les exercices ne sont pas toujours très pertinents, mais ça reste intéressant.

Bonne chance !

Exercice 2 — Application des sélecteurs avancés #

Un corrigé de cet exercice est disponible (lien vers le CSS commenté ; archive).

Récupérer cette page HTML (archive) et l'utiliser pour tester les différents sélecteurs avancés en répondant aux questions suivantes, sans changer le code HTML.

  1. Pour commencer, réduire la largeur du body, par exemple à 40 em, ce qui permet d'avoir des lignes d'environ 80 caractères quelle que soit la taille de la police.
  2. Mettre en valeur la première lettre de chaque paragraphe, soit en modifiant sa taille ou sa couleur, soit en en faisant une lettrine (drop cap).
    1. Mettre en italique la première ligne de chaque paragraphe.
    2. Modifier votre règle pour que seule la première ligne du premier paragraphe de chaque partie soit en italique.
  3. Faire en sorte que l'alignement des titres soit alterné, une fois à gauche, une fois à droite. Les paragraphes doivent rester en place.
  4. À cause de la question précédente, la séparation entre les parties n'est pas évidente : ajouter une bordure autour (ou au-dessous) de chaque titre pour bien séparer les parties.
  5. Le dernier paragraphe contient uniquement une formule consacrée.
    1. Le mettre en valeur comme vous le voulez (centré, gras…).
    2. Est-ce que la méthode que vous avez employée vous semble correcte (c'est-à-dire propre, robuste, sémantique…) ? Si vous aviez le droit de modifier le HTML, auriez-vous choisi la même solution ?
  6. Ajouter le caractère de décoration suivant : « ❦ » au début et à la fin de chaque titre de partie. (NB : vous pouvez le copier tel quel dans le CSS, c'est un caractère comme un autre.)
  7. Mettre ce caractère de décoration en rouge.
  8. Faire en sorte qu'au survol d'un paragraphe, ce paragraphe change de couleur de fond.
  9. Même question, mais cette fois le paragraphe survolé et le paragraphe suivant (dans la même partie) doivent changer de couleur de fond.
  10. En n'utilisant qu'une seule règle CSS, faire en sorte que tous les titres apparaissent en petites capitales, sauf lorsqu'ils sont survolés.
  11. Faire en sorte qu'au survol d'un titre, les paragraphes de cette partie changent de couleurs de texte et de fond, mais pas les autres. Attention, la solution est simple, mais pas évidente à trouver ; ne pas hésiter à demander de l'aide. (Indice : ce n'est pas faisable avec une seule règle.)

Exercice 3 — Site des recettes #

Un corrigé de cet exercice est disponible (archive du code commenté)

Télécharger et extraire l'archive contenant l'« architecture » du site, reproduite ci-dessous :

./
|-- img/
|   |-- dindePanee.jpg
|   `-- logoSite.png
|-- index.html
`-- skin/
    |-- img/
    |   |-- boissons_hover.png
    |   |-- boissons.png
    |   |-- desserts_hover.png
    |   |-- desserts.png
    |   |-- entrees_hover.png
    |   |-- entrees.png
    |   |-- iconeCommentaires.png
    |   |-- iconePrix.png
    |   |-- iconeTemps.png
    |   |-- logoCC-by-nc-sa.png
    |   |-- logoFirefox.png
    |   |-- logoUbuntu.png
    |   |-- logoW3C.png
    |   |-- plats_hover.png
    |   `-- plats.png
    `-- screen.css

Les fichiers index.html et screen.css sont vides. Il va falloir les compléter, sans changer l'organisation des fichiers.

Pour commencer, examiner la hiérarchie des répertoires ; pourquoi y a-t-il deux répertoires « img » ? À quoi servent chacun d'eux ?

  1. Ajouter du contenu à la page HTML. Elle contiendra pour l'instant
    • la bannière du site, avec son titre (par exemple « Recettes à manger »)
    • un article intitulé « Escalopes de dinde panées » avec du « faux-texte » lorem ipsum (ou une variante)
    • un menu avec des liens vers « Entrées », « Plats », « Desserts » et « Boissons »
    • un pied de page contenant deux sections ; la première, « Notice légale », indique « Code HTML et CSS en licence CC-by-nc-sa », tandis que la seconde, « Partenaires », liste le W3C, Firefox et Ubuntu.
    Vous devriez obtenir quelque chose qui ressemble à la figure suivante.
    Modèle de HTML
  2. On va ajouter deux images dans le HTML : le logo du site et l'illustration de la recette. Le résultat pourra ressembler à la figure suivante.
    Modèle de HTML
  3. À présent, on commence à compléter le fichier screen.css, après l'avoir lié depuis la page HTML. On va tout d'abord placer les gros blocs dans la page.
    • Faire en sorte que le logo apparaisse à gauche du titre du site dans la bannière.
    • Le menu doit faire 400 pixels de largeur et apparaître à gauche de l'article.
    • Réduire la largeur de l'ensemble de la page, pour que le texte de l'article ne s'étale pas trop en largeur.
    • Les deux sections du pied de page doivent apparaître côte à côte.
    On devrait obtenir quelque chose de similaire à la figure suivante.
    Modèle avec HTML et organisation des zones
  4. Modifier le CSS pour que la page ressemble au modèle suivant. On a amélioré l'affichage du titre, décalé le menu, encadré l'article, et modifié le pied de page.
    Modèle avec quelques améliorations
  5. Ajouter les logos de la licence et des partenaires depuis le CSS pour que le pied de page ressemble au modèle suivant.
    Modèle de pied de page
  6. Modifier le CSS de l'article et de son contenu pour obtenir le rendu suivant. NB : on a ajouté des coins arrondis et une ombre au cadre. NB2 : penser à aller voir les différents types de bordure avant de se compliquer la vie.
    Modèle de pied de page
  7. Copier le code suivant dans l'article, entre le titre et le contenu, sans le modifier :
    		<aside class="infos">
    			<div class="icone prix">Chère</div>
    			<div class="icone temps">Rapide</div>
    			<div class="icone commentaires">34 commentaires</div>
    		</aside>
    
    Modifier le CSS pour que l'article ressemble au modèle suivant.
    Modèle de pied de page
  8. Pour finir, utiliser une des techniques de remplacement d'image (voir ces notes de cours) pour remplacer les textes du menu par les images fournies, de manière à obtenir le modèle suivant. On fera en sorte que l'image change au survol des items du menu. Note : les images du menu ont été bricolées à partir de la police Kitchen Kapers II.

Exercice 4 (optionnel) — Reproduction d’un modèle moins simple #

On vous donne une image d'une page web, version très simplifiée d'une page du site du fabricant d'instruments de musique Fender.

Capture d'écran de la page Fender Stratocaster
Capture d'écran de la page à reproduire

On vous demande de créer le code HTML et CSS permettant de reproduire ce modèle, en portant une attention particulière à la catégorisation des images : quelles sont celles qui font partie du contenu (et vont donc dans le HTML) celles qui sont purement présentationnelles (et vont donc dans le CSS), et celles pour qui c'est ambigu (et vous avez donc le choix) ?

N.B. : les choix faits sur la page originale ne sont pas forcément les bons choix ! (En l'occurrence, le code n'étant à première vue pas de toute première qualité, il est particulièrement déconseillé de s'en inspirer…)

Les images nécessaires et les textes sont dans cette archive. Informations complémentaires :

  • La colonne principale fait 970 pixels de largeur.
  • La couleur du texte est #333, sauf dans le pied de page où c'est #999.
  • Les bordures sont toutes de couleur #e5e5e5.
  • La couleur de fond des colonnes de détails est #f5f5f5, et elles font 180 pixels de largeur.
  • L'image de fond de la page est GlobalBackground.gif.

Il est recommandé d'utiliser l'architecture de fichiers suivante, qui permet de bien séparer le contenu et la présentation tout en restant pratique d'utilisation :

--./
  |--index.html
  |--images/
  |  |-- …
  |  `-- …
  `--skin/
     |--screen.css
     `--images/
        |-- …
        `-- …

Efforcez-vous d'écrire du code propre, c'est-à-dire bien structuré et sémantique. D'autre part, la priorité est d'obtenir un résultat fonctionnel minimal, c'est-à-dire d'avoir une page lisible même si tous les détails de la présentation ne sont pas mis en place.