input[type='text'] sélecteur CSS ne s'applique pas à la valeur par défaut type de saisie de textes?
D'entrée par défaut est de type 'texte'. J'ai toujours assumé alors que les déclarations CSS ciblage input[type='text']
aurait une incidence sur ces entrées, même si le type n'a pas été explicitement déclaré sur le contrôle. Cependant, je viens de remarquer que mon défaut de type texte des entrées de ne pas obtenir les styles. Pourquoi est-ce le cas? Et comment puis-je résoudre ce problème?
CSS:
input[type='text'] {
background: red;
}
HTML:
<input name='t1' type='text' /> /* Is Red */
<input name='t1' /> /* Is Not Red */
- Les sélecteurs CSS cible de l'attribut dans la balise et non son hypothèse par défaut.
Vous devez vous connecter pour publier un commentaire.
Le CSS utilise uniquement les données dans l'arborescence DOM, qui a peu à voir avec la façon dont le moteur de rendu décide quoi faire avec des éléments avec des attributs manquants.
Afin de laisser le CSS refléter le code HTML
ou faire de l'HTML explicite.
Si elle n'a pas à le faire, vous ne seriez jamais capable de distinguer entre
et
parce que tous les attributs seraient toujours être défini sur tous les éléments. (Par exemple,
table
a toujours unborder
attribut, avec0
pour un défaut.)input:not([type]), input[type="text"]
pour couvrir les deux cas.input:not([type])
sélecteur résout mon problème<table><tr></tr><table>
implicitement devient<table><tbody><tr></tr></tbody></table>
, de sorte qu'il est assez étrange que<input>
ne pas implicitement devenir<input type="text">
dans les DOM.tbody
élément est défini plus précisément comme étant obligatoire, mais avoir une option de balise de début. Ou en d'autres termes, la tbody est là, même si vous n'avez pas<tbody>
dans votre code source HTML. Letype
attribut dansinput
d'autre part, n'est pas obligatoire. Et le comportement deinput
sanstype
se trouve être le même queinput
avectype='text
, mais c'est une coïncidence, et qui n'a rien à voir avec l'arborescence DOM.table>tbody>tr
sélectionnez<table><tr><tr></table>
, maisinput[type="text"]
ne sélectionnez pas<input>
.type
chaîne a d'autres personnages (comme les espaces et les caractères non valides).type
attribut n'est pas censé avoir d'autres personnages comme les espaces et les caractères non valides. Et l'auteur de la css n'est pas tenu de fournir pour les fautes de frappe dans le code HTML.Par les spécifications CSS, les navigateurs peuvent ou ne peuvent pas utiliser les informations sur les attributs par défaut, la plupart ne le sont pas. La clause pertinente dans le CSS 2.1 spec est 5.8.2 valeurs d'attribut par Défaut dans la Dtd. Dans les Sélecteurs CSS 3, c'est la clause 6.3.4, avec le même nom. Il recommande: “Sélecteurs doit être conçu de sorte qu'ils travaillent ou non les valeurs par défaut sont inclus dans le document de l'arbre.”
Il est généralement préférable de spécifier explicitement les attributs essentiels tels que
type=text
au lieu de retomber entre eux. La raison en est qu'il n'est pas simple moyen fiable pour se référer à lainput
éléments à défauttype
attribut.Parce que, il n'est pas censé le faire.
input[type=text] { }
est un sélecteur d'attributs, et permettra de sélectionner uniquement celles de l'élément avec l'attribut correspondant.Pour être compatible avec tous les navigateurs, vous devez toujours déclarer le type d'entrée.
Certains navigateurs supposons par défaut de type "texte", mais ce n'est pas une bonne pratique.
essayer cette