{ "cells": [ { "cell_type": "markdown", "id": "b2bf992d", "metadata": {}, "source": [ "# CSS avancée \n", "Reprenons et précisons quelques règles CSS. Dans ce chapitre nous allons pousser un peu le fonctionement des rêgles CSS pour voir que l'on peut allre très loin dans la mise en forme d'un site HTML." ] }, { "cell_type": "markdown", "id": "483057d7", "metadata": {}, "source": [ " \n", "\n", "# I. Introduction au CSS\n", "\n", "## 1) Qu'est-ce ?\n", "Le CSS : Cascading Style Sheets (Feuille de style en cascade) est le langage permettant la mise en forme (le style) du contenu HTML. En fait, le CSS s'applique également à d'autres langages fondés sur ce principe de balises, comme le SVG (exemple ici) ou le XML.\n", "\n", "\n", "## 2) Où l'écrit-on ?\n", "Les **règles CSS** peuvent être : \n", "* regroupées dans **un ou plusieurs fichiers textes externes**, d'extension .css, qui seront liés à nos pages HTML. **C'est la solution à favoriser**. La déclaration du chemin de ces feuilles se fait au moyen d'un élément HTML <link> situé dans la section <head> de la page. Par exemple, si la feuille est dans le dossier `styles` situé au même endroit que la page actuelle : on écrira :\n", " ```HTML\n", " \n", " ...\n", " \n", " \n", " ...\n", " \n", " ```\n", "\n", "\n", "\n", "\n", "* **écrites dans un élément HTML <style> figurant dans l'élément** <head> **de la page HTML** (on parle alors de **feuille de style interne**). Cette feuille de style a alors la priorité sur des feuilles de style. Notre fichier HTML a alors cette structure :\n", " ```HTML\n", " \n", " ...\n", " \n", " \n", " \n", " ```\n", " \n", "* **dans un attribut `style` d'un élément HTML à mettre en forme**, dans la section `` de la page. Cette solution est plus difficile à maintenir, elle est donc à éviter. Mais dans les codes sources de sites anciens, vous pouvez trouver des choses comme : \n", " ```HTML\n", " \n", " ...\n", " \n", "

texte en gras

\n", " ...\n", " \n", " ```" ] }, { "cell_type": "markdown", "id": "a2683c88", "metadata": {}, "source": [ "## 3) A quoi ressemble du code CSS ?" ] }, { "cell_type": "markdown", "id": "9003d266", "metadata": {}, "source": [ "
\n", " \n", "```css\n", "/* Exemple de fichier css */ \n", " \n", "body {\n", " max-width: 400px;\n", " margin: 5px auto;\n", "}\n", "\n", "h1 {\n", " font-size: 1.5em;\n", " color: rgb(255, 0, 255);\n", " background-color: #ffffaa;\n", "}\n", "\n", "p {\n", " font-size: 2em;\n", " font-family: \"Brush Script MT\";\n", "}\n", "```\n", "\n", "
" ] }, { "cell_type": "markdown", "id": "5869f7a2", "metadata": {}, "source": [ "* La première règle appliquée à l'élément HTML `` indique que le contenu de l'élément ne pourra dépasser 400 pixels.\n", "* La seconde spécifie une marge haute et basse de 5 pixels et une marge droite et gauche calculées automatiquement à partir de la taille de fenêtre de façon à centrer le contenu du `` (sans dépasser 400 pixels, donc).\n", "* Les trois règles suivantes concernent tous les titres `

` et spécifient sa police (*font* en anglais) avec une taille 1,5 fois égale à la taille qui serait normalement utilisée, une couleur de texte donnée par ses trois composantes RGB (R:255, G:0 et B:255) et une couleur de fond donnée par ses trois composantes RGB mais exprimées en hexadécimal : R:ff (donc 255), G:ff (255) et B:aa (170)\n", "* Enfin les deux dernières règles concernent le contenu des éléments HTML `

`: une taille de police doublée et une police \"Brush Script MT\".\n", "\n" ] }, { "cell_type": "markdown", "id": "658f0182", "metadata": {}, "source": [ "## Syntaxe d'une règle CSS\n", "\n", "La syntaxe générale d'une règle CSS prend la forme : " ] }, { "cell_type": "markdown", "id": "fdb13542", "metadata": {}, "source": [ "

\n", " \n", "\n", "```css\n", "/* Syntaxe d'une règle CSS */ \n", "\n", "selecteur {\n", " propriete: valeur;\n", "}\n", "``` " ] }, { "cell_type": "markdown", "id": "d59270b5", "metadata": {}, "source": [ "
\n", " \n", "**Important** : Toute règle mal écrite sera ignorée, et potentiellement les suivantes aussi, typiquement :\n", "* un oubli de `;`, \n", "* un `=` à la place d'un `:`, \n", "* une paire d'accolades mal refermées.\n", "* une propriété qui ne s'applique pas au bon élément (mais à un élément parent), ou mal orthographiée. En CSS, les propriétés sont toujours des **mots anglais** (~couleur~ $\\rightarrow$ color).\n", " \n", "Une règle CSS qui ne fonctionne pas est peut-être le signe d'une erreur antérieure, souvent dans le même bloc de règles (bloc délimité par des accolades).\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "4fe03829", "metadata": {}, "source": [ "## 4) Documentation et exemples" ] }, { "cell_type": "markdown", "id": "71304dd0", "metadata": {}, "source": [ "Il existe **ENORMEMENT** de règles CSS possibles, certaines règles permettant des effets d'animation très sophistiqués mais finalement se décrivant très simplement avec du texte.\n", "Voici une documentation complète de ces propriétés. \n", "\n", "Le site CSS Zen Garden propose une page web mise en forme avec différentes feuilles de style. Le contenu de la page (les textes, les listes, les titres) est rigoureusement le même quelque soit le style choisi, mais on a l'impression d'être sur des sites différents, tant le rendu change.\n", "\n", "Ne pas hésiter à consulter les codes des feuilles CSS proposées en téléchargement, si les thèmes vous plaisent." ] }, { "cell_type": "markdown", "id": "e2df3ffd", "metadata": {}, "source": [ "# II. Les sélecteurs CSS" ] }, { "cell_type": "markdown", "id": "b9f2e9da", "metadata": {}, "source": [ "## 1) Sélecteur d'élément HTML" ] }, { "cell_type": "markdown", "id": "ce7e2563", "metadata": {}, "source": [ "Le sélecteur est le nom de l'élément HTML. Sur l'exemple ci-dessous, **tous les éléments `

` de notre page** vont être mis en forme." ] }, { "cell_type": "markdown", "id": "1e35f5a1", "metadata": {}, "source": [ "
\n", "\n", "```css\n", "/* Selecteur de type élement HTML */ \n", " \n", "h2 {\n", " font-size: 1.5em;\n", "}\n", "```\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "efeec0aa", "metadata": {}, "source": [ "Beaucoup de propriétés peuvent s'appliquer à plusieurs sélecteurs, comme `width`, `color` ou `font-size`. \n", "On peut factoriser de telles déclarations en les **séparant les sélecteurs par une virgule** :" ] }, { "cell_type": "markdown", "id": "9e0bd388", "metadata": {}, "source": [ "
\n", "\n", "```css\n", "/* déclaration à plusieurs sélecteurs */\n", " \n", "h2, p, ul, ol {\n", " font-size: 1.5em;\n", "}\n", "```\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "dc2e81e8", "metadata": {}, "source": [ "La règle ci-dessus multiplie par 1.5 la taille de la police pour les éléments `h2`, `p`, `ul` et `ol`." ] }, { "cell_type": "markdown", "id": "fc9c7911", "metadata": {}, "source": [ "
Exercice 1\n", " \n", "1. Créez vous un site web : `\"mes_tests_css\"`, comprenant :\n", " * une page html standard\n", " * un dossier pour le css. \n", " * un fichier `main.css`\n", " On pourra reprendre le modèle suivant pour la page html, ou copier coller votre précédent site web.\n", " \n", " ```html\n", " \n", " \n", " \n", " mon titre \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " ```\n", "\n", "2. Ecrivez le code css dans votre fichier `main.css` permettant d'obtenir un fond jaune (propriéte `background-color`) aux titres h1 et h2 de votre page. Mettez la couleur des paragraphes en violet, ainsi que celle des listes numérotées et non numérotées. La valeur de couleur peut être donnée : \n", " * en utilisant [un des 140 noms de couleurs html prédéfinies](),\n", " * en utilisant leur code RGB hexadécimal composé de 6 chiffres. Les deux premiers codent le rouge (rouge vif : #ff0000), les deux du milieu le vert (vert vif : #00ff00) et les deux derniers le bleu (bleu vif: #0000ff). \n", " * en utilisant la fonction `rgb(x, y, z)` avec , x, y, z entiers compris entre 0 et 255.\n", "\n" ] }, { "cell_type": "markdown", "id": "28e9fb41", "metadata": {}, "source": [ "## 2) Sélecteur de classe" ] }, { "cell_type": "markdown", "id": "fff3691f", "metadata": {}, "source": [ "La méthode précédente cible *tous* éléments HTML du type spécifié et leur applique la règle CSS. Mais vous pourriez vouloir ne cibler que certains éléments de votre page web et leur appliquer un style commun. Pour ce faire, vous pouvez définir une **classe CSS** : \n", "\n", "* Dans le fichier CSS: **le sélecteur est le nom de la classe préfixée par un '.'**\n", "* Dans le fichier HTML: vous spécifiez pour chaque élément HTML concerné un **attribut `class`** égal au nom de la classe, sans le '.'" ] }, { "cell_type": "markdown", "id": "be6a1199", "metadata": {}, "source": [ "
\n", "\n", "```css\n", "/* Fichier CSS : \n", " cible les éléments HTML ayant l'attribut class=\"special\" */\n", ".special {\n", " color: red;\n", " background-color: yellow;\n", "}\n", "```\n", "\n", "```html\n", "\n", "

titre normal

\n", "

paragraphe normal

\n", "

Titre rouge sur fond jaune

\n", "

paragraphe rouge sur fond jaune

\n", "\n", "```\n", "
" ] }, { "cell_type": "markdown", "id": "99ca25c5", "metadata": {}, "source": [ "On peut affecteur plusieurs classes à un même élément en les séparant par une espace après l'attribut `class`, sur le modèle :\n", "```html\n", "...\n", "```\n", "et on cible les éléments ayant les deux classe avec la syntaxe suivante :" ] }, { "cell_type": "markdown", "id": "3e10ad32", "metadata": {}, "source": [ "
\n", "\n", "```css\n", "/* Fichier CSS : \n", " cible les éléments appartenant aux deux classes 1 et 2 */\n", "classe1.classe2 {\n", " Regles-CSS;\n", "}\n", "```\n", "
" ] }, { "cell_type": "markdown", "id": "7a914665", "metadata": {}, "source": [ "Dans une classe donnée, on peut vouloir cibler un type d'élement particulier. Par exemple, si la classe `special` concerne des éléments `

`, `

`, `