CSS2 sélecteur d'Attribut avec la Regex
Attribut CSS sélecteurs permettre la sélection des éléments basés sur des valeurs d'attribut. Malheureusement, je n'ai pas utilisé dans années (principalement parce qu'ils ne sont pas pris en charge par tous les navigateurs modernes). Cependant, je me souviens distinctement que j'ai été en mesure de les utiliser pour orner tous les liens externes avec une icône, à l'aide d'un code semblable au suivant:
a[href=http] {
background: url(external-uri);
padding-left: 12px;
}
Le code ci-dessus ne fonctionne pas. Ma question est: Comment ça fonctionne? Comment puis-je sélectionner tous les <a>
balises dont href
attribut commence par "http"
? L'officiel de la CSS (lien ci-dessus) ne mentionne même pas que c'est possible. Mais je me souviens de cela.
(Note: la solution La plus évidente serait d'utiliser class
attributs de distinction. Je veux éviter cela parce que j'ai peu d'influence de la façon dont le code HTML est construit. Tout ce que je peux modifier le code CSS.)
OriginalL'auteur Konrad Rudolph | 2008-09-08
Vous devez vous connecter pour publier un commentaire.
Que pour le CSS 2.1, voir http://www.w3.org/TR/CSS21/selector.html#attribute-selectors
Résumé:
CSS3 définit également une liste de sélecteurs, mais la compatibilité peut varier considérablement.
Il y a aussi une chouette suite de tests qu'qui montre les sélecteurs de travail dans votre navigateur.
Comme pour ton exemple,
devrait faire l'affaire. Malheureusement, il n'est pas pris en charge par IE.
La "chouette la suite de test" est maintenant un lien brisé. Quelqu'un aurait un substitut?
Correction du lien.
OriginalL'auteur
Antti réponse est suffisante pour la sélection de l'ancre dont href commencer avec http et donne un parfait aperçu de la disposition des CSS2 regex-esque sélecteur d'attribut, comme suit:
Cependant, ici, est le cas échéant, mis à JOUR de manière à sélectionner tous les liens sortants à l'aide de la nouvelle CSS3 :non pseudo sélecteur de classe ainsi que la nouvelle *= sous-chaîne de la syntaxe pour s'assurer qu'il ignore tout des liens internes qui peuvent toujours commencer avec http:
*Notez que ce n'est pas pris en charge par IE, au moins jusqu'à IE8. Merci, c'est à dire, vous êtes les meilleurs 😛
OriginalL'auteur
Noter que, dans Antti l'exemple que vous auriez probablement souhaitez ajouter un catch de tout les liens absolus vous pouvez avoir votre propre domaine, vous avez probablement ne pas souhaitez marquer comme "externes", par exemple:
Et vous voudriez cette après la déclaration précédente.
Vous pouvez également inclure le préfixe de protocole, juste au cas où vous avez un document nommé "http-info.html" que vous souhaitez faire un lien, par exemple:
Noter que, dans ces deux légèrement en-cas plus complexes, vous devez citer la valeur. Ces travaux, pour moi, dans IE7.
OriginalL'auteur