Pour le choix, les sélecteurs sont en effet équivalents. Les différences entre eux sont à la fois pratiques et historiques.
Différence pratique
D'un point de vue pratique, le sélecteur de classe est beaucoup plus lisible et direct. Il est également beaucoup plus efficace, car les navigateurs traitent les classes différemment des autres attributs, pour les requêtes CSS et DOM. Le sélecteur d'attribut en général est plus logique pour tout autre attribut qui n'est pas une class
, lorsque vous souhaitez sélectionner par une seule valeur dans une "Liste de mots séparés par des espaces, dont l'un est exactement la valeur" (spécification MDN).
Par exemple, si vous avez un attribut data
avec plusieurs valeurs possibles à choisir comme ceci :
Le sélecteur d'attribut [data-colors~=blue]
sélectionnerait les trois éléments, quelles que soient les autres valeurs de l'attribut.
Différence historique
Historiquement, le sélecteur de classe .box
fait partie de la spécification CSS originale (c'est-à-dire "CSS 1"). Cela signifie que ce sélecteur est pris en charge par tous les navigateurs passés et présents. En revanche, le sélecteur d'attribut [class~=box]
fait partie de la deuxième itération de la spécification CSS (c'est-à-dire "CSS2") et n'est donc pas pris en charge par tous les navigateurs possibles ; bien que vous deviez remonter jusqu'à Internet Explorer 6 pour rencontrer des problèmes avec ce sélecteur.