Podcast CSS – 017: Shadows
Disons qu'on vous a envoyé un design pour qu'il contienne une image de t-shirt, avec une ombre projetée. Le concepteur vous indique que l'image du produit est dynamique et peuvent être mises à jour via le système de gestion de contenu, donc l'ombre projetée doit aussi être dynamique. Au lieu d'un t-shirt, il peut s'agir d'une visière, d'un short ou de tout autre élément. Comment faire avec CSS ?
Le CSS propose
box-shadow
et
propriétés text-shadow
mais l'image n'est pas du texte. Vous ne pouvez donc pas utiliser text-shadow
.
Si vous utilisez box-shadow
, l'ombre se trouve sur le cadre environnant,
pas autour du T-shirt.
Heureusement, il existe une autre option :
Filtre drop-shadow()
.
Cela vous permet de faire exactement ce que le concepteur a demandé.
Il existe de nombreuses options pour
les ombres en CSS,
chacune étant conçue pour
un cas d'utilisation différent.
Ombre de la case
Navigateurs pris en charge
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
La propriété box-shadow
permet d'ajouter des ombres à la zone d'un élément HTML.
Elle s'applique aux éléments de bloc et aux éléments intégrés.
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
Les valeurs de box-shadow
sont classées dans l'ordre suivant:
- Décalage horizontal: un nombre positif le pousse de gauche à droite et un nombre négatif le pousse de droite à gauche.
- Décalage vertical: un nombre positif le pousse vers le bas du haut, et un nombre négatif le pousse vers le haut à partir du bas.
- Rayon du flou: un plus grand nombre produit une ombre plus floue, tandis qu'un faible nombre produit une ombre plus nette.
- Rayon de propagation (facultatif): un nombre plus élevé augmente la taille de l'ombre et un nombre plus faible la diminue. en lui attribuant la même taille que le rayon de flou s'il est défini sur 0.
- Couleur: Toute valeur de couleur valide. Si cette valeur n'est pas définie, la couleur du texte calculée est utilisée.
Pour transformer une ombre de boîte en ombre intérieure,
plutôt que l'ombre externe par défaut,
ajouter un mot clé inset
avant les autres propriétés.
/* Outer shadow */
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
/* Inner shadow */
.my-element {
box-shadow: inset 5px 5px 20px 5px #000;
}
Ombres multiples
Vous pouvez ajouter autant d'ombres que vous le souhaitez avec box-shadow
.
Pour ce faire, ajoutez une collection d'ensembles de valeurs séparés par une virgule:
.my-element {
box-shadow: 5px 5px 20px 5px darkslateblue, -5px -5px 20px 5px dodgerblue,
inset 0px 0px 10px 2px darkslategray, inset 0px 0px 20px 10px steelblue;
}
Propriétés affectant l'ombre en zone
L'ajout d'un border-radius
à votre boîte modifie également la forme de son ombre.
En effet, le CSS crée une ombre basée sur la forme de la zone.
comme si la lumière pointe vers elle.
.my-element {
box-shadow: 0px 0px 20px 5px darkslateblue;
border-radius: 25px;
}
Si la boîte contenant box-shadow
se trouve dans un conteneur qui contient overflow: hidden
,
l'ombre ne sortira pas non plus de ce débordement.
<div class="my-parent">
<div class="my-shadow">My shadow is hidden by my parent.</div>
</div>
.my-parent,
.my-shadow {
width: 250px;
height: 250px;
}
.my-shadow {
box-shadow: 0px 0px 20px 5px darkslateblue;
}
.my-parent {
overflow: hidden;
}
Ombre du texte
Navigateurs pris en charge
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
La propriété text-shadow
est très semblable à la propriété box-shadow
.
Elle ne fonctionne que sur les nœuds de texte.
.my-element {
text-shadow: 3px 3px 3px hotpink;
}
Les valeurs de text-shadow
sont les mêmes que pour box-shadow
et dans le même ordre.
La seule différence est que text-shadow
n'a ni valeur spread
, ni mot clé inset
.
Lorsque vous ajoutez un box-shadow
, il est rogné à la forme de votre boîte.
mais text-shadow
ne présente aucun rognage.
Cela signifie que si votre texte
est entièrement ou semi-transparent,
l'ombre est visible à travers.
.my-element {
text-shadow: 3px 3px 3px gold;
color: rgb(0 0 0 / 70%);
}
Ombres multiples
Vous pouvez ajouter autant d'ombres que vous le souhaitez avec text-shadow
.
comme avec box-shadow
.
Ajoutez une collection de jeux de valeurs séparés par une virgule,
et créer des effets de texte intéressants, comme du texte en 3D.
.my-element {
text-shadow: 1px 1px 0px white,
2px 2px 0px firebrick;
color: darkslategray;
}
Ombre projetée
Pour obtenir une ombre projetée qui suit les courbes potentielles d'une image,
utilisez le filtre CSS drop-shadow
.
Cette ombre est appliquée à un masque alpha, ce qui la rend très utile pour ajouter une ombre à une image découpée,
comme dans l'introduction de ce module.
.my-image {
filter: drop-shadow(0px 0px 10px rgba(0 0 0 / 30%))
}
Le filtre drop-shadow
a les mêmes valeurs que box-shadow
, mais le mot clé inset
et la valeur spread
ne sont pas autorisés. Vous pouvez ajouter autant d'ombres que vous le souhaitez,
en ajoutant plusieurs instances de valeurs drop-shadow
à la propriété filter
.
Chaque ombre utilisera la dernière ombre comme point de référence de positionnement.
Testez vos connaissances
Testez vos connaissances sur les ombres
Quelle valeur d'ombre ci-dessous est propre à box-shadow
?
inset
Seules 13 ombres de boîte sont autorisées sur un élément à la fois.