logo hsb.horse
← Retour à l’index des snippets

Snippets

Sélecteurs d'attribut CSS pour href

Un snippet CSS utilisant des sélecteurs d'attribut sur l'attribut href des éléments a, avec correspondance de préfixe, de suffixe et partielle.

Publié: Mis à jour:

Exemple HTML

<ul>
<li><a href="#top">TOP</a></li>
<li><a href="https://developer.mozilla.org">mozilla</a></li>
<li><a href="https://example.com">example</a></li>
<li><a href="https://www.yahoo.co.jp">yahoo</a></li>
</ul>

Sélecteurs d’attribut de base

/* Préfixe : commence par "#" */
a[href^="#"] {
color: fuchsia;
}
/* Suffixe : se termine par ".org" */
a[href$=".org"] {
color: orange;
}
/* Correspondance partielle : contient "example" */
a[href*="example"] {
color: red;
}
/* Condition combinée : commence par "https" et se termine par ".jp" */
a[href^="https"][href$=".jp"] {
color: green;
}

Liste des sélecteurs

SélecteurSignification
[attr]L’attribut existe
[attr="value"]Correspondance exacte avec value
[attr^="value"]Commence par value
[attr$="value"]Se termine par value
[attr*="value"]Contient value

Ignorer la casse (flag i)

Ajouter i à la fin pour ne pas distinguer majuscules et minuscules.

/* Correspond à ".pdf" comme à ".PDF" */
a[href$=".pdf" i]::after {
content: " (PDF)";
}

Combinaison avec :not()

/* Cible uniquement les liens externes (http/https) */
a[href^="http"]::after {
content: " ↗";
}
/* Exclut les liens internes (#) */
a[href^="http"]:not([href*="example.com"])::after {
content: " ↗";
}

Exemple pratique : icônes par type de fichier

/* Ajouter un libellé aux liens PDF */
a[href$=".pdf" i]::after {
content: " [PDF]";
font-size: 0.75em;
color: #c00;
}
/* Icône flèche pour les liens externes */
a[href^="https://"]:not([href^="https://example.com"])::after {
content: " ↗";
}
/* Pas de style pour les liens d'ancrage */
a[href^="#"] {
text-decoration: none;
}

Spécificité

La spécificité d’un sélecteur d’attribut est identique à celle d’un sélecteur de classe : (0, 1, 0).

a[href^="#"] { } /* (0, 1, 0) — équivalent à une classe */
a.internal { } /* (0, 1, 1) — classe + élément, celui-ci l'emporte */

Note pratique

Ce snippet convient bien quand on ne veut pas réécrire la même opération ou la même vérification autour de css, selector, html. Le garder sous la forme d’un petit utilitaire rend l’intention plus lisible côté appelant.

En revanche, si les branches et les préconditions s’accumulent, mieux vaut ne pas tout tasser dans un seul snippet. Séparer la procédure, le helper et les responsabilités rend l’ensemble plus simple à maintenir.