5. Développement Web - CSS Extra





5.1. Introduction

Nous allons voir dans ce chapitre des notions liées aux CSS mais qui ne sont pas à connaître pour le contrôle continu. Elles permettent d'agrémenter une page pour la rendre plus conviviale et attrayante.

Les notions traitées dans cette page sont étudiées afin de découvrir d'autres aspects des CSS.

5.2. Effets visuels simples

Il existe plusieurs propriétés qui permettent de créer des effets visuels qui peuvent s'appliquer à du texte, à des images, ou à tout autre élément grâce à l'utilisation de propriétés comme text-shadow, box-shadow, filter, click-path, mask-image.

5.2.1. L'opacité

L'opacité désigne le degré de transparence ou de visibilité d'un élément. Elle est contrôlée par la propriété opacity qui accepte une valeur numérique comprise entre 0 (complètement transparent) et 1 (complètement visible).

Voici un exemple avec plusieurs valeurs d'opacité appliquées à une image :

opacité de 0
motherboard
opacité de 0.2
motherboard
opacité de 0.4
motherboard
opacité de 0.6
motherboard
opacité de 0.8
motherboard
opacité de 1
motherboard

5.2.2. Décoration du texte

La propriété text-decoration permet de modifier l'apparence d'un texte en y ajoutant des effet simples comme underline, overline, line-through, blink :

Texte souligné ondulé : underline wavy red

Texte surligné en pointillés : overline dotted red

Texte barré avec tirets : line-through dashed green

La valeur blink ne fonctionne plus, il faut passer par une animation (voir plus loin sur cette page).

On peut également modifier la propriété text-decoration-thickness afin de moduler l'épaisseur de la ligne affichée. Dans les exemples ci-dessus elle est définie à 3px.

Consultez la documentation liée à cette propriété.

5.2.3. Ombre du texte

Il est possible de donner des effets d'ombre sur un texte. On utilise pour cela la propriété text-shadow qui demande plusieurs paramètres :

text-shadow: h-shadow v-shadow blur-radius color

Exemple avec un niveau d'ombrage :

  1. .shadow {
  2.     text-shadow: 6px 6px 0px rgba(0,0,0,0.2);
  3. }

Hello Jim !

Exemple avec deux niveaux d'ombrage :

  1. .shadow {
  2.     text-shadow: 4px 3px 0px #fff,
  3.         9px 8px 0px gray;
  4. }

Hello Jim !

Effet 3D :

  1. .shadow {
  2.     text-shadow: 0 1px 0 #ccc,
  3.         0 2px 0 #c9c9c9,
  4.         0 3px 0 #bbb,
  5.         0 4px 0 #b9b9b9,
  6.         0 5px 0 #aaa,
  7.         0 6px 1px rgba(0,0,0,.1),
  8.         0 0 5px rgba(0,0,0,.1),
  9.         0 1px 3px rgba(0,0,0,.3),
  10.         0 3px 5px rgba(0,0,0,.2),
  11.         0 5px 10px rgba(0,0,0,.25),
  12.         0 10px 10px rgba(0,0,0,.2),
  13.         0 20px 20px rgba(0,0,0,.15);}

Hello Jim !

Gravage :

  1. .shadow {
  2.     background-color: #666666;
  3.     -webkit-background-clip: text;
  4.     -moz-background-clip: text;
  5.     background-clip: text;
  6.     color: transparent;
  7.     text-shadow: rgba(255,255,255,0.5) 0px 3px 3px;
  8. }

Hello Jim !

Relief :

  1. .shadow {
  2.     color: rgba(0,0,0,0.6);
  3.     text-shadow: 2px 8px 6px rgba(0,0,0,0.2),
  4.         0px -5px 35px rgba(255,255,255,0.3);
  5. }

Hello Jim !

Veuillez consultez la documentation afin d'en savoir plus.

5.2.4. Boîte aux bords arrondis

La propriété border-radius permet de créer une boîte aux bords arrondis. Elle peut consister en une seule distance qui, plus elle est grande, arrondit plus les bords.

border-radius: 5px;

border-radius: 15px;

On peut également utiliser deux valeurs :

border-radius: 35px 5px;

voire quatre valeurs :

border-radius: 35px 5px 25px 65px

border-radius: 35px 65px 15px 45px

On peut aussi créer un effet elliptique :

border-radius: 30% 70% 70% 30% / 30% 58% 42% 70%;

Consultez la documentation officielle pour de plus amples informations.

5.2.5. Ombre de boîte

La propriété box-shadow permet de donner un effet d'ombre à une boîte :

  1. .shadow {
  2.     width: 200px;
  3.     height: 100px;
  4.     background: lightblue;
  5.     box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);
  6. }

une ombre floutée
box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);

On fixe :

une autre ombre sans flou
box-shadow: 6px 6px 0px rgba(0, 0, 0);

5.2.6. Filtrer les images

La propriété filter permet d'appliquer des effets visuels comme des flous, des ajustements de couleur, ou des déformations sur un élément telle une image. On peut utiliser

image initiale
motherboard
image avec effet sepia (aspect vieilli) 70%
motherboard
image floutée blur de 2px
motherboard
image floutée blur de 5px
motherboard
image avec contraste de 150%
motherboard
image avec contraste de 50%
motherboard
image avec effet invert 70%
motherboard
image avec effet invert(70%), sepia(75%), contrast(110%)
motherboard
image avec effet grayscale(40%)
motherboard
image avec effet grayscale(90%)
motherboard

5.2.7. Mélange de calques d'arrière-plan

On peut définir un fond avec :

puis mixer (blend) les deux avec la propriété background-blend-mode :

image initiale
linear-gradient(to bottom, red, yellow)
blend : multiply
linear-gradient(to top, silver, cyan), multiply
blend : hard-light
blend : difference

Voir la documentation pour en savoir plus.

5.2.8. Masque d'image

On est susceptible d'ajouter un masque à un élément, en utilisant des images ou des dégradés pour contrôler la visibilité comme sur cet exemple :

  1. .mixed {
  2.     background: url('img/mobo.jpg');
  3.     mask-image: linear-gradient(to bottom, black, transparent);
  4.     /* pour la compatibilité */
  5.     -webkit-mask-image: linear-gradient(to bottom, black, transparent);
  6. }
mask-image: linear-gradient(to bottom, black, transparent)

5.2.9. Découpe

Grâce à la propriété clip-path on peut découper un élément en une forme définie par des points en pourcentage (x% y%).

On peut par exemple utiliser un cercle : clip-path: circle(50% at center); qui extrait un cercle d'une boîte de carrée de 200px :

  1. .clip_circle {
  2.     width: 200px;
  3.     height: 200px;
  4.     background: linear-gradient(to bottom, violet, coral);
  5.     clip-path: circle(50% at center);
  6. }

Pour obtenir un pentagone, on utilise clip-path: polygon(...): :

  1. .clip-shape {
  2.       width: 300px;
  3.       height: 300px;
  4.       background: linear-gradient(135deg, #ff7e5f, #feb47b);
  5.       clip-path: polygon(50% 0%, 100% 25%, 80% 100%, 20% 100%, 0% 25%);
  6.       margin: 20px auto;
  7.     }

5.3. Rotation, translation, mise à l'échelle

On dispose de la possibilité de modifier la disposition des éléments en appliquant des opérations géométriques comme la translation, la rotation ou la mise à l'échelle.

5.3.1. Rotation

On utilise la propriété transform dont la valeur est rotate en spécifiant entre parenthèses le nombre de degrés de la rotation

5.3.2. Mise à l'échelle

On utilise la propriété transform dont la valeur est scale en spécifiant entre parenthèses le ratio pour le changement.

5.3.3. Translation

On utilise la propriété transform dont la valeur est translateX et/ou translateY en spécifiant entre parenthèses le nombre de pixels pour le déplacement.

5.3.4. Transition

La propriété transition dans le container permet de définir comment va être réalisée une transformation (rotation, mise à l'échelle, translation). Elle utilise différentes valeurs :

transition: [property] [duration] [timing-function] [delay];

Voir la documentation afin de comprendre les changements de type ease, linear, ease-in, ease-out.

5.4. Animations

5.4.1. Animation simple

Les animations sont enregistrées dans une structure appelée keyframes. Il s'agit de décrire l'évolution des propriétés d'un objet au cours du temps comme dans l'exemple suivant pour lequel on fait apparaître et disparaître un carré.

Pour cela on change l'opacité (on pourrait également jouer sur la propriété display) :

L'animation :

5.4.2. Animation plus complexe

Dans cet exemple on déplace deux carrés suivant la même animation mais l'animation du second carré commence 2s après la première :

5.4.3. Animation complexe

Voici deux exemples avec des flocons de neige :

Le premier utilise des cercles et une image de fond: snowflake_css1.html.

Le second utilise une image de flocon et un fond avec gradient : snowflake_css2.html.

Voir d'autres animations de ce genre sur le site https://freefrontend.com.

Voici quelques animations ou effets CSS en particulier :

5.5. Dernier point

Dernier point qui n'a rien à voir avec CSS mais concerne le TP4. Comment faire pour calculer la moyenne des notes avec leurs coefficients dans la page resultats.html.

Les notions ci-après seront vues en L2 et L3.

Il est impossible de faire le calcul directement en HTML ou CSS, ces deux langages ne sont pas des langages de programmation mais des langages de description de données.

Il faut pour cela utiliser un langage spécifique comme PHP ou Javascript:

5.5.1. Première solution : PHP

Un code PHP à l'intérieur de la page génère les lignes de la table et réalise les calculs.

Matière Note Coef.
Français122
Mathématiques146
Physique164
Total : 14.33
  1. <table class="table_notes">
  2.     <tr>
  3.         <td>Matière</td> <td>Note</td> <td>Coef.</td>
  4.     </tr>
  1. $matieres = array("Français", "Mathématiques", "Physique");
  2. $notes = array( 12, 14, 16);
  3. $coefficients = array(2, 6, 4);
  4.  
  5. $somme_notes = 0;
  6. $somme_coefs = 0;
  7. for ($i = 0; $i < count($notes); ++$i) {
  8.     echo "<tr><td>". $matieres[$i] ."</td>";
  9.     echo "<td class=\"right\">". $notes[$i] ."</td>";
  10.     echo "<td class=\"right\">". $coefficients[$i] ."</td></tr>";
  11.     $somme_notes += $notes[$i] * $coefficients[$i];
  12.     $somme_coefs += $coefficients[$i];
  13. }
  14. $moyenne = $somme_notes / $somme_coefs;
  15. $moyenne = round($moyenne * 100) / 100.0;
  16. echo "<tr><td>Total :</td><td  colspan=\"2\" class=\"right\"> $moyenne </td></tr>";
  17.  

Au final, PHP génèrera :

  1. <tr>
  2.     <td>Français</td> <td class="right">12</td> <td class="right">2</td>
  3. </tr>
  4. <tr>
  5.     <td>Mathématiques</td><td class="right">14</td><td class="right">6</td>
  6. </tr>
  7. <tr>
  8.     <td>Physique</td><td class="right">16</td><td class="right">4</td>
  9. </tr>
  10. <tr>
  11.     <td>Total :</td><td  colspan="2" class="right"> 14.33 </td>
  12. </tr>

5.5.2. Deuxième solution : Javascript

La table est féjà générer au format HTML mais ne contient pas la moyenne. Celle-ci est calculée au chargement de la page. Il suffit pour cela de donner aux cellules qui contiennent des données, une classe, par exemple node.

Grâce à Javascript on récupère les notes et on réalise le calcul.

L'exemple qui suit est à adapter en ajoutant une colonne pour les coefficients.






<< CSS