Survoler un élément avec la souris
Cours
En CSS, il existe de très nombreux pseudo-éléments. Dans les exercices précédents, les pseudo-éléments
:first-of-type, :last-of-type et :nth-of-type ont permis d'identifier des éléments en fonction de leur numéro
dans un conteneur. Le pseudo-élément :hover permet, quant à lui, de modifier l'affichage de l'élément ciblé au
passage de la souris.
Bac à sable : Survol d'un élément
Ci-contre, on peut choisir quels seront l'image d'arrière-plan de cette boîte ainsi que l'apparence du texte, l'épaisseur et la couleur de la bordure lors du survol de la boîte par la souris.
p:hover { /* Mise en forme lors du survol */
background-image: url();
border: 1px solid #000000;
font-weight: normal;
text-decoration: none;
}
Exercices
Exercice n°1
Les styles CSS permettent de mettre des effets whaou avec peu de lignes. Modifier le code ci-dessous afin d'obtenir le même effet que le survol de l'image ci-dessus.
<!-- Partie html à ne pas modifier -->
<img id="rire" src="rire.jpg" alt="stromae" >
/* Partie css modifiable */
#rire {
width: 80px;
height: 80px;
margin: 0 auto;
padding: 5px;
border: 1px dashed #163c99;
border-radius: 4px;
}
#rire:hover {
width: 90px;
}
Une piste ?
Dans les cas suivants, X doit être remplacé par un nombre :
- Le paramètre
transform: rotate(Xdeg);permet d'afficher un conteneur en lui faisant subir une rotation deXdegrés autour de son centre. - Le paramètre
transition: Xs;applique les modifications de style enXsecondes au lieu de les appliquer instantanément.
Exercice n°2
Modifier le code CSS suivant afin d'obtenir l'affichage ci-dessus. Passer la souris sur ce paragraphe pour comprendre l'effet réalisé.
<!-- Partie html à ne pas modifier -->
<p>
<span id="banane">J'apprends, je suis content !</span>
<img id="rire" src="rire.jpg" alt="stromae" >
</p>
/* Partie css modifiable */
#banane { /* Le texte */
color: darkgreen;
font-weight: bold;
}
#rire { /* L'image */
width: 80px;
height: 80px;
margin: 0 auto;
border-radius: 4px;
}
p { /* Le paragraphe */
width: 100px;
height: 80px;
border: 2px solid darkgreen;
text-align: center;
}
Une piste ?
- La propriété
display: none;permet de ne pas afficher un conteneur à l'écran,display: block;transforme l'élément en contenur de type bloc. - Pour affecter un élément inclut dans un conteneur il suffit de déclarer les sélecteurs en les séparant par un
espace. Par exemple,
p strong {...}affecte uniquement la mise en forme des élémentsstrongcontenus dans des paragraphesp(et pas ceux inclus dans des listes ou autre...).
Exercice n°3 : Son propre menu
Cet exercice est assez difficile, mais il montre tout le potentiel contenu à l'intérieur d'une relation HTML/CSS bien pensée. La liste ci-dessous est destinée à être un menu avec un sous-niveau.
Apporter les modifications nécessaires pour que le rendu soit similaire à celui ci-dessus.
<!-- Partie html à ne pas modifier -->
<ul class="horizontal">
<li> <a href="#">Menu 1</a>
<ul class="vertical">
<li> <a href="#">Lien 1.1</a>
<li> <a href="#">Lien 1.2</a>
<li> <a href="#">Lien 1.3</a>
</ul>
</li>
<li> <a href="#">Menu 2</a>
<ul class="vertical">
<li> <a href="#">Lien 2.1</a>
<li> <a href="#">Lien 2.2</a>
<li> <a href="#">Lien 2.3</a>
</ul>
</li>
<li> <a href="#">Lien 3</a> </li>
<li> <a href="#">Menu 4</a>
<ul class="vertical">
<li> <a href="#">Lien 4.1</a>
<li> <a href="#">Lien 4.2</a>
<li> <a href="#">Lien 4.3</a>
<li> <a href="#">Lien 4.4</a>
</ul>
</li>
<li> <a href="#">Lien 5</a> </li>
</ul>
/* Partie css modifiable */
ul {
list-style-type: none; /* disparition des puces */
margin: 0;
}
li {
width: 100px;
margin: 0;
padding: 3px; /* espace intérieur */
border: 1px solid orange;
height: 20px;
line-height: 20px; /* centrage vertical */
background-color: white;
}
a {
text-decoration: none;
color: orange;
}
Une piste ?
Il est nécessaire de pouvoir positionner des blocs enfants par rapport à leur parent.
La documentation officielle se trouve ici.