Sélecteur CSS pour <input type = "?"

105

Existe-t-il un moyen avec CSS de cibler toutes les entrées en fonction de leur type? J'ai une classe désactivée que j'utilise sur divers éléments de formulaire désactivés, et je définis la couleur d'arrière-plan des zones de texte, mais je ne veux pas que mes cases à cocher obtiennent cette couleur.

Je sais que je peux le faire avec des classes séparées, mais je préfère utiliser CSS si possible. Je suis sûr que je peux définir cela en javascript, mais encore une fois à la recherche de CSS.

Je cible IE7 +. Donc je ne pense pas que je puisse utiliser CSS3.

Éditer

Avec CSS3, je pourrais faire quelque chose comme?

INPUT[type='text']:disabled ce serait encore mieux de me débarrasser complètement de ma classe ...

Éditer

OK, merci pour le coup de main! Voici donc un sélecteur qui modifie toutes les zones de texte et zones qui ont été désactivées sans nécessiter de définir aucune classe, lorsque j'ai commencé cette question, je n'ai jamais pensé que c'était possible ...

INPUT[disabled][type='text'], TEXTAREA[disabled]
{   
    background-color: Silver;
}

Cela fonctionne dans IE7

JoshBerke
la source
2
J'ai écrit un article avec des informations détaillées sur les sélecteurs d'attributs CSS.
Sarfraz

Réponses:

155

Oui. IE7 + prend en charge les sélecteurs d'attributs:

input[type=radio]
input[type^=ra]
input[type*=d]
input[type$=io]

Entrée d'élément avec un type d'attribut qui contient une valeur égale à, commence par, contient ou se termine par une certaine valeur.

Les autres sélecteurs de sécurité (IE7 +) sont:

  • Parent> enfant qui a: p > span { font-weight: bold; }
  • Précédé par l'élément ~ qui est: span ~ span { color: blue; }

Ce <p><span/><span/></p>qui vous donnerait effectivement:

<p>
    <span style="font-weight: bold;">
    <span style="font-weight: bold; color: blue;">
</p>

Lectures complémentaires: Compatibilité CSS du navigateur sur quirksmode.com

Je suis surpris que tout le monde pense que cela ne peut pas être fait. Les sélecteurs d'attributs CSS existent déjà depuis un certain temps. Je suppose qu'il est temps de nettoyer nos fichiers .css.

Filip Dupanović
la source
Ok, j'avais essayé mais ça ne fonctionnait pas maintenant ça marche donc je dois avoir ma syntaxe foirée.
JoshBerke
Vous venez de faire ma journée! Maintenant, si vous voulez faire ma semaine, dites-moi que cela peut être fait dans IE6 sans utiliser d'expressions hehe :-) j / k là
JoshBerke
13
Malheureusement, ça ne peut pas. J'ai arrêté de soutenir IE6 en dehors des opinions religieuses et je suggère que nous le fassions tous aussi. Aujourd'hui, j'utilise le commentaire conditionnel d'IE pour dire aux utilisateurs que leur ordinateur et leur vie privée sont menacés par l'utilisation d'IE6 et qu'ils devraient mettre à jour immédiatement: P
Filip Dupanović
1
Je suppose que je suis tellement habitué à soutenir IE6 que j'ai juste supposé que cela ne fonctionnerait pas non plus dans IE7
TJ L
4
J'aimerais pouvoir arrêter de soutenir IE6 mais je ne peux pas et je ne peux pas faire ce que vous avez suggéré ... Mais j'aimerais vraiment vraiment pouvoir le faire ;-)
JoshBerke
3

Malheureusement , les autres affiches sont corrects que vous êtes ... en fait corrigé par KRON, vous êtes ok avec votre IE7 et un doc strict, mais la plupart d' entre nous avec les exigences IE6 sont réduites à des références JS ou de classe pour cela, mais il est une propriété CSS2, juste une sans prise en charge suffisante des navigateurs IE ^ h ^ h.

Par souci d'exhaustivité, le sélecteur de type est - similaire à xpath - de la forme [attribute=value]mais de nombreuses variantes intéressantes existent. Il sera assez puissant lorsqu'il sera disponible, bonne chose à garder en tête pour IE8.

Annakata
la source
Vous avez une référence de support de navigateur plus mise à jour? Cela est basé sur la version bêta d'IE7 aimerait voir IE8
JoshBerke
IE8 est toujours en version bêta, mais quirksmode dit "oui": quirksmode.org/css/contents.html
annakata
Je soutiens toujours IE6 mais pas ce petit ajustement visuel ajouté.
JoshBerke
assez juste, c'était mon erreur de répondre en fonction du titre, j'ai tendance à répondre à des cas généraux - je devrais vraiment lire les questions plus :)
annakata
1

Vous pouvez le faire avec jQuery. À l'aide de leurs sélecteurs, vous pouvez sélectionner par attributs, tels que le type. Cependant, cela nécessite que vos utilisateurs aient activé Javascript et un fichier supplémentaire à télécharger, mais si cela fonctionne ...

cdeszaq
la source
0

Désolé, la réponse courte est non. CSS (2.1) ne marquera que les éléments d'un DOM, pas leurs attributs. Vous devrez appliquer une classe spécifique à chaque entrée.

Dommage, je sais, car ce serait incroyablement utile.

Je sais que vous avez dit que vous préférez CSS à JavaScript, mais vous devriez toujours envisager d'utiliser jQuery. Il fournit une manière très propre et élégante d'ajouter des styles aux éléments DOM basés sur des attributs.

Phil.Wheeler
la source
jquery est le moyen de le faire, ou juste JavaScript en général
TravisO
4
Afaict, cette réponse est incorrecte (la partie CSS 2.1): w3.org/TR/CSS21/selector.html#attribute-selectors . Sinon, veuillez clarifier votre réponse.
cic
1
Désolé - vous avez tout à fait raison. J'attends juste le moins de IE7 car si souvent les développeurs sont toujours tenus de prendre en charge IE6 en même temps. J'aurais dû lire la question plus attentivement et faire mes devoirs.
Phil.Wheeler