📗 Chapitre 26 : Sélecteurs CSS de niveau 4
126 Focus visible :focus-visible
📖 Définition : Sélectionne un élément quand il reçoit le focus visible (navigation clavier uniquement).
button:focus-visible {
outline: 3px solid #3498db;
outline-offset: 2px;
}
input:focus-visible {
box-shadow: 0 0 0 3px rgba(52,152,219,0.3);
}
127 Focus à l'intérieur :focus-within
📖 Définition : Sélectionne un élément lorsqu'un de ses enfants a le focus.
form:focus-within {
background: #e8f4fd;
padding: 15px;
border-radius: 8px;
transition: all 0.3s;
}
div:focus-within {
border-left: 3px solid #3498db;
}
128 Invalide après interaction :user-invalid
📖 Définition : Sélectionne les champs invalides après interaction utilisateur.
input:user-invalid {
border-color: #e74c3c;
background: #fdebd0;
}
textarea:user-invalid {
box-shadow: 0 0 0 2px #e74c3c;
}
129 Valide après interaction :user-valid
📖 Définition : Sélectionne les champs valides après interaction utilisateur.
input:user-valid {
border-color: #2ecc71;
background: #d5f5e3;
}
input:user-valid::after {
content: "✓";
color: #2ecc71;
}
130 État indéterminé :indeterminate
📖 Définition : Sélectionne les cases à cocher dans un état indéterminé.
input:indeterminate {
outline: 2px solid #f39c12;
accent-color: #f39c12;
}
progress:indeterminate {
opacity: 0.5;
}
element.indeterminate = true.📘 Chapitre 27 : Sélecteurs logiques modernes
131 Parent contenant :has()
📖 Définition : Sélectionne un élément parent qui contient un certain enfant (parent selector).
article:has(img) {
background: #e8f4fd;
padding: 15px;
border-radius: 8px;
}
li:has(ul) {
font-weight: bold;
color: #2c3e66;
}
132 Regroupement :is()
📖 Définition : Regroupe plusieurs sélecteurs avec la spécificité la plus haute.
:is(header, main, footer) p {
margin: 1em 0;
line-height: 1.5;
}
:is(.card, .article) :is(h2, h3) {
color: #2c3e66;
border-bottom: 2px solid #3498db;
}
Titre dans une carte
133 Regroupement sans spécificité :where()
📖 Définition : Similaire à :is() mais avec une spécificité nulle.
:where(.reset, .base) p {
margin: 0;
padding: 0;
}
:where(article, section) h2 {
font-size: 1.5em;
}
Paragraphe sans marges (spécificité nulle)
134 Négation :not()
📖 Définition : Sélectionne les éléments qui ne correspondent pas au sélecteur.
button:not(.primary) {
background: #95a5a6;
}
input:not([type="submit"]) {
border: 1px solid #ccc;
}
li:not(:first-child) {
border-top: 1px solid #ddd;
}
135 Portée :scope
📖 Définition : Représente l'élément qui sert de portée/référence pour les sélecteurs.
.parent :scope {
border-left: 3px solid #3498db;
padding-left: 10px;
}
:scope > p {
font-weight: bold;
}
📙 Chapitre 28 : Pseudo-éléments modernes
136 Bouton de fichier ::file-selector-button
📖 Définition : Style le bouton "Parcourir" des champs de type file.
input::file-selector-button {
background: #2c3e66;
color: white;
border: none;
padding: 8px 16px;
border-radius: 6px;
cursor: pointer;
transition: all 0.3s;
}
input::file-selector-button:hover {
background: #1a2a4a;
}
137 Placeholder stylisé ::placeholder
📖 Définition : Style le texte indicatif (placeholder) dans les champs.
input::placeholder {
color: #e74c3c;
font-style: italic;
font-size: 0.9em;
}
textarea::placeholder {
color: #3498db;
letter-spacing: 1px;
}
138 Sous-titres ::cue
📖 Définition : Style les sous-titres (WebVTT) dans les balises vidéo.
video::cue {
background: rgba(0,0,0,0.7);
color: #f1c40f;
font-size: 1.2em;
}
video::cue(.speaker1) {
color: #3498db;
}
139 Partie de composant ::part()
📖 Définition : Style des parties exposées d'un Web Component.
custom-element::part(button) {
background: #3498db;
border-radius: 8px;
padding: 8px 16px;
}
custom-element::part(header) {
font-size: 1.2em;
}
140 Élément distribué ::slotted()
📖 Définition : Style les éléments distribués dans un slot d'un Web Component.
::slotted(p) {
color: #3498db;
font-weight: bold;
}
::slotted(.important) {
background: #f9e79f;
padding: 5px;
}
📒 Chapitre 29 : Pseudo-classes de temps et médias
141 Élément courant :current()
📖 Définition : Sélectionne l'élément en cours de lecture/d'annotation.
:current(slide) {
background: #f9e79f;
border-left: 4px solid #f1c40f;
}
:current(p) {
font-weight: bold;
}
Diapositive actuellement affichée
142 Élément passé :past
📖 Définition : Sélectionne les éléments déjà passés (dans une chronologie).
:past {
opacity: 0.5;
filter: grayscale(0.5);
}
:past slide {
transform: scale(0.95);
}
143 Élément futur :future
📖 Définition : Sélectionne les éléments à venir (dans une chronologie).
:future {
opacity: 0.3;
}
:future slide {
transform: scale(0.9);
}
144 En lecture :playing
📖 Définition : Sélectionne les éléments multimédia en cours de lecture.
video:playing {
border: 2px solid #2ecc71;
box-shadow: 0 0 10px rgba(46,204,113,0.5);
}
audio:playing {
background: #d5f5e3;
}
145 En pause :paused
📖 Définition : Sélectionne les éléments multimédia en pause.
video:paused {
opacity: 0.8;
filter: brightness(0.9);
}
audio:paused {
background: #fdebd0;
}
📕 Chapitre 30 : Sélecteurs expérimentaux
146 État personnalisé :state()
📖 Définition : Sélectionne les éléments personnalisés en fonction de leurs états internes.
toggle-switch:state(checked) {
background: #2ecc71;
}
accordion-item:state(expanded) {
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
147 Popover ouvert :popover-open
📖 Définition : Sélectionne les éléments popover lorsqu'ils sont ouverts.
.popover-content:popover-open {
animation: fadeIn 0.3s ease;
border: none;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
@keyframes fadeIn {
from { opacity: 0; transform: scale(0.9); }
to { opacity: 1; transform: scale(1); }
}
148 Slot distribué :has-slotted
📖 Définition : Sélectionne les composants contenant des éléments distribués dans un slot.
component:has-slotted(img) {
border: 2px solid #3498db;
}
component:has-slotted(.important) {
background: #f9e79f;
}
149 Élément modal :modal
📖 Définition : Sélectionne un élément lorsqu'il est dans un état modal (dialog ouvert).
dialog:modal {
border: none;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
:modal {
backdrop-filter: blur(4px);
}
150 Fond d'écran ::backdrop
📖 Définition : Style l'arrière-plan des éléments modaux ou en plein écran.
dialog::backdrop {
background: linear-gradient(135deg, rgba(0,0,0,0.7), rgba(0,0,0,0.9));
backdrop-filter: blur(5px);
}
video:fullscreen::backdrop {
background: black;
}