(web.css1)= # 5. Introduction au CSS On ne va pas se mentir. Jusqu'ici, nos sites étaient plutôt moches. A partir de ce chapitre, nous allons pouvoir **styliser nos pages** grâce à un second langage fondateur du web: le CSS. ```{panels} :img-top: ../media/andreessen.jpg Mark Andreessen ^^^^^ ***Né en 1971*** L'informaticien américain [**Mark Andreessen**](https://fr.wikipedia.org/wiki/Marc_Andreessen) est l'un des créateurs du premier navigateur web (Mosaic) en 1993 ainsi que le fondateur de Netscape, la 1ère entreprise entièrement tournée vers Internet. Il n'est pas à proprement parler le créateur du CSS mais ses nombreuses innovations vont pousser d'autres ingénieurs à travailler dessus, notamment [**Håkon Wium Lie**](https://fr.wikipedia.org/wiki/H%C3%A5kon_Wium_Lie) qui sera le premier à proposer l'idée même du CSS. ---- :img-top: ../media/css.svg CSS3 ^^^^^ ***Créé en 1996*** Le [CSS](https://fr.wikipedia.org/wiki/Feuilles_de_style_en_cascade) (Cascading Style Sheets, aussi appelées feuilles de style) a pour rôle de gérer l'apparence de la page web (agencement, positionnement, décoration, couleurs, taille du texte…). Ce langage est venu compléter le HTML en 1996, et il est toujours au fondement même du style du Web de nos jours. ``` ````{admonition} L'art CSS :class: hint Certaines personnes se pasionnent à faire de l'art en pur CSS, vous pouvez jeter un oeil à cette artiste par exemple. Ce visage de Mario a été fait en pur CSS ! C'est inutile mais plutôt impressionnant... ```{image} ../media/mario_css.png ``` ```` ## Où écrire le CSS ? Il est possible d'écrire du code CSS directement dans des fichiers `.html` grâce aux balises ``. Cependant, cela rend le code difficile à lire et ce n'est pas la méthode que nous allons utiliser ici. Nous allons écrire tout notre code CSS dans un fichier `.css` puis le lier aux différentes pages `.html` de notre site. ````{admonition} Comment faire ? :class: note Pour lier les fichiers `.css` et `.html`, vous allez rajouter une ligne dans le fichier `.html` pour indiquer au navigateur d'aller chercher la feuille de style associée. Cette ligne s'ouvre avec la balise orpheline `` et on la place à l'intérieur de la balise ` `: ```{code-block} html Ma page ``` ```` ```{admonition} CodePen :class: hint Le site web CodePen est un éditeur en ligne permettant de tester très facilement du code HTML et CSS (et JS). ``` ## Appliquer une propriété CSS à une balise HTML Voici à quoi ressemble un bout de code CSS: ```{code-block} css p { color: blue; } ``` ````{admonition} Exercice 1 :class: note Rendez-vous sur CodePen. Vous devriez y voir un code HTML déjà tout prêt. Dans la partie CSS, copiez-y le bout de code donné ci-dessus. Pouvez-vous dire ce que fait le code CSS du fichier `style.css` ? ```{dropdown} Solution Le code CSS signifie en français: "Je veux que tous les paragraphes soient écrits en bleu". ``` ```` Le CSS fonctionne avec 3 éléments différents: 1. **Le sélecteur**: ici on écrit les noms des balises HTML dont on veut modifier l'apparence. Par exemple, si je veux modifier l'apparence de tous les paragraphes `

`, je dois écrire `p` (sans les chevrons). 2. **La ou les propriétés CSS**: les effets de style sont listés via des propriétés. Par exemple, `color` permet d'indiquer la couleur du texte, `font-size` permet d'indiquer la taille du texte, etc. Il existe **BEAUCOUP** de propriétés CSS ! Mais rassurez-vous, vous n’avez pas besoin de les connaître toutes par cœur. 3. **…et leurs valeurs**: pour chaque propriété CSS, on doit indiquer une valeur. Par exemple, pour la propriété `color`, il faut indiquer le nom de la couleur. Pour font-size, il faut indiquer quelle taille on veut, etc. ```{image} ../media/structure_css.jpg ``` ```{admonition} Accolades sur le clavier Sur mac, vous utilisez: - les touches `option ⌥` + `(` pour faire l'accolade ouvrante; - et les touches `option ⌥` + `)` pour faire l'accolade fermante; ``` `````{admonition} Exercice 2 :class: note Modifiez le code CSS de l'exercice précédent (pizza) pour changer tous les titres principaux (`h1`) en rouge et tous les éléments de liste (`li`) en vert. ````{dropdown} Solution ```{code-block} css p { color: blue; } h1 { color: red; } li { color: green; } ``` ```` ````` ## Appliquer une propriété CSS à plusieurs balises HTML Et si je veux appliquer la couleur bleue aux paragraphes et aux titres ? Il suffit de donner la liste des balises qui seront affectées par ce changement de propriété (séparées par des `,`): ```{code-block} css p, h1 { color: blue; } ``` ```{image} ../media/css_bleu.png ``` ```{question} Faire dans la nuance D'accord maintenant TOUS les paragraphes du site sont bleus. Est-il quand même possible de changer la couleur de quelques paragraphes ? Si oui, comment d'après vous ? * {f}`Non, c'est impossible. Ils resteront bleus.` * {f}`Oui c'est possible, en ajoutant une autre couleur dans la propriété CSS.` * {v}`Oui c'est possible, en ajoutant un attribut aux paragraphes que l'on veut d'une autre couleur.` * {f}`Oui c'est possible, par magie ?` === Eh oui c'est possible ! Et heureusement ! Vous allez voir que les attributs `class` et `id` permettent d'appliquer des propriétés CSS de manière plus précise qu'en ciblant directement des balises. ``` ## Appliquer un style à une classe d'éléments Imaginez que vous voulez appliquer la couleur violette à certains éléments de votre page, indépendemment de leur type (titre, paragraphe, liens, etc). Pour ce faire, vous allez commencer par créer une classe CSS: ```{code-block} css .ma-classe { color: purple; } ``` Ce code définit une classe nommée `ma-classe` et demande à ce que tous les éléments qui en font partie soient écrits en violet (purple en anglais). Notez qu'il faut mettre un `.` avant le nom de la classe. Maintenant, il faut spécifier quels éléments HTML doivent faire partie de `ma-classe`. Cela se fait en spécifiant l'attribut `class` d'un élément HTML: ```{code-block} html

Ceci est un titre qui fait partie de ma-classe

Ceci est un paragraphe qui fait partie de ma-classe

Ceci est un second paragraphe

``` ```{admonition} Testez par vous-même :class: note N'hésitez pas à tester ces exemples dans CodePen. ``` `````{admonition} Exercice 3 :class: note Modifiez le code CSS de l'exercice précédent (pizza) pour mettre les éléments de la liste d'ingrédients qui contiennent de la tomate (1er et 3ème) en rouge. Pour ce faire, créez une classe CSS et ajoutez les attributs HTML correspondants. ````{dropdown} Solution Voici le code CSS: ```{code-block} css p { color: blue; } h1 { color: red; } li { color: green; } .classe-rouge { color: red; } ``` Et voici la liste HTML modifiée: ```{code-block} html ``` ```` ````` ```{admonition} A retenir :class: note Les propriétés CSS définies avec des classes ont la priorité sur les propriétés plus générales définies au niveau des balises. ``` ## Appliquer un style à un élément unique Si l'attribut `class` permet de créer une classe d'éléments partageant un style commun, l'attribut `id` permet de définir un style pour un UNIQUE élément en particulier. ```{code-block} html

Ceci est un titre qui fait partie de ma-classe

Ceci est un paragraphe qui fait partie de ma-classe

Ceci est un second paragraphe avec un identifiant unique

``` On définit les propriétés de cet élément unique en commençant par un dièse `#`: ```{code-block} css .ma-classe { color: purple; } #mon-id { background-color: yellow; /* Cette propriété définit la couleur de fond */ } ``` ```{admonition} A retenir :class: note L'attribut `id` a la priorité sur tout le reste, mais il faut l'utiliser avec parcimonie car il crée plein d'éléments uniques rendant le code plus difficile à maintenir. ``` ## Les balises universelles `span` et `div` Tout ça c'est très bien mais comment appliquer un style à un mot particulier qui n'est pas entouré par une balise ? Par exemple, comment écrire en rouge `automatique` et `information` dans le paragraphe suivant: ```{code-block} html

L'informatique est la science du traitement automatique de l'information !

``` Cela serait facile si ces deux mots étaient entourés par des balises... Eh bien on a inventé des balises qui ne servent à rien, exactement dans ce but ! Il s'agit de: - ` ` - et `
` Leur unique utilité est de regrouper du contenu HTML afin de pouvoir appliquer un style CSS. ```{admonition} Inline ou block :class: note Petite différence entre ces deux balises: ` ` est une balise qui ne provoque pas de retour à la ligne (comme les balises ` `, ` `, etc). On dit que ce sont des balises de type **inline**. De l'autre côté, `
` provoque un retour à la ligne (comme `

`, `

`, etc). On dit que ce sont des balises de type **block**. ``` ```{question} Pour mettre en couleur `automatique` et `information` dans le paragraphe ci-dessus. Utiliseriez-vous plutôt `` ou `
` ? * {v}` ` * {f}`
` === Il vaut mieux utiliser ` ` pour éviter de créer un retour à la ligne après chacun des mots. La balise `
` sert plutôt à définir un bloc et est beaucoup utilisée dans la construction de la mise en page (nous verrons ça bientôt). ``` `````{admonition} Exercice 4 :class: note Rendez-vous sur CodePen et mettez les mots `automatique` et `information` en rouge dans le paragraphe donné en début de section. Il vous faut donc définir une classe CSS et l'appliquer à vos balises ``. ````{dropdown} Solution Code CSS: ```{code-block} css .classe-rouge { color: red; } ``` Code HTML: ```{code-block} html

L'informatique est la science du traitement automatique de l'information !

``` ```` ````` ```{admonition} Refaire la face de Mario Vous vous souvenez du Mario du début de chapitre ? Voici le lien pour voir comment ça a été fait (n'hésitez pas à essayer de modifier la couleur de sa moustache si vous vous en sentez capable !). ``` ## Exercice récapitulatif 5 ```{admonition} Exercice récapitulatif 5 :class: note Il est temps d'ajouter un peu de style à votre site de photographe ! Reprenez votre dossier `photographie` des exercices récapitulatifs précédents. Créez-y un fichier `style.css`, puis, dans chacun de vos fichiers `.html`, ajoutez le lien vers la feuille de style `style.css` comme expliqué au début de ce chapitre. Faites les améliorations suivantes: - Appliquez la couleur noire (black) à tous vos liens. - Appliquez une couleur et une couleur de fond à votre nom (titre principal de la page d'accueil). - Appliquez le style `color: #A5B4FC;` à 2 mots **séparés** de votre paragraphe auto-biographique. - Dans votre page galerie, appliquez une couleur de fond à un bloc regroupant toute vos photos. Déposez votre dossier compressé sur Moodle à l'endroit prévu. ```