Existe-t-il un moyen de détecter si une entrée contient du texte via CSS? J'ai essayé d'utiliser la :empty
pseudo-classe, et j'ai essayé d'utiliser [value=""]
, ni l'une ni l'autre n'a fonctionné. Je n'arrive pas à trouver une solution unique à cela.
J'imagine que cela doit être possible, étant donné que nous avons des pseudo-classes pour :checked
et :indeterminate
, qui sont toutes deux un peu similaires.
Remarque: je fais cela pour un style "élégant" , qui ne peut pas utiliser JavaScript.
Notez également que Stylish est utilisé, côté client, sur des pages que l'utilisateur ne contrôle pas.
Réponses:
Stylish ne peut pas faire cela car CSS ne peut pas le faire. CSS n'a pas de (pseudo) sélecteurs pour les
<input>
valeurs. Voir:Le
:empty
sélecteur fait uniquement référence aux nœuds enfants, pas aux valeurs d'entrée.[value=""]
fait le travail; mais seulement pour l' état initial . C'est parce que l'value
attribut d' un nœud (que CSS voit), n'est pas le même que lavalue
propriété du nœud (modifié par l'utilisateur ou le javascript DOM, et soumis en tant que données de formulaire).Sauf si vous vous souciez uniquement de l'état initial, vous devez utiliser un script utilisateur ou un script Greasemonkey. Heureusement, ce n'est pas difficile. Le script suivant fonctionnera dans Chrome, ou Firefox avec Greasemonkey ou Scriptish installé, ou dans tout navigateur prenant en charge les scripts utilisateur (c'est-à-dire la plupart des navigateurs, à l'exception d'IE).
Voir une démo des limites du CSS et de la solution javascript sur cette page jsBin .
la source
:valid
option nécessite la réécriture de la page - ce que l'OP ne peut pas faire avec Stylish et qu'aucune des autres réponses ne montre du tout dans un contexte de navigation. L'utilisateur n'a aucun contrôle sur la page qu'il visite.C'est possible, avec les mises en garde CSS habituelles et si le code HTML peut être modifié. Si vous ajoutez l'
required
attribut à l'élément, alors l'élément correspondra:invalid
ou:valid
selon que la valeur du contrôle est vide ou non. Si l'élément n'a pas d'value
attribut (ou s'il en avalue=""
), la valeur du contrôle est initialement vide et devient non vide lorsqu'un caractère (même un espace) est entré.Exemple:
Les pseudo-classés
:valid
et:invalid
sont définis dans les documents CSS de niveau Working Draft uniquement, mais le support est assez répandu dans les navigateurs, sauf que dans IE, il est venu avec IE 10.Si vous souhaitez que «vide» inclue des valeurs constituées uniquement d'espaces, vous pouvez ajouter l'attribut
pattern=.*\S.*
.Il n'y a (actuellement) pas de sélecteur CSS pour détecter directement si un contrôle d'entrée a une valeur non vide, nous devons donc le faire indirectement, comme décrit ci-dessus.
En général, les sélecteurs CSS font référence au balisage ou, dans certains cas, aux propriétés d'élément définies avec le script (JavaScript côté client), plutôt qu'aux actions de l'utilisateur. Par exemple,
:empty
correspond à un élément avec un contenu vide dans le balisage; tous lesinput
éléments sont inévitablement vides en ce sens. Le sélecteur[value=""]
teste si l'élément a l'value
attribut dans le balisage et la chaîne vide comme valeur. Et:checked
et:indeterminate
sont des choses similaires. Ils ne sont pas affectés par l'entrée réelle de l'utilisateur.la source
required
attribut peut empêcher la soumission du formulaire.novalidate
attribut sur l'<form>
élément pour ne pas vous soucier de l'affichage rouge lorsque le champ est vide après avoir été rempli une fois:<form ... novalidate> <input ... required /> </form>
Vous pouvez utiliser la
:placeholder-shown
pseudo classe. Techniquement, un espace réservé est requis, mais vous pouvez utiliser un espace à la place.la source
:placeholder-shown
cela devrait devenir la réponse acceptée. Larequired
méthode ne prend pas en compte les cas marginaux. Il convient de noter que vous pouvez passer un espace à un espace réservé et cette méthode fonctionnera toujours. Gloire.input:not(:placeholder-shown)
correspondra toujours<input/>
même s'il n'y a pas de valeur.et
marchera :-)
modifier: http://jsfiddle.net/XwZR2/
la source
input[value]:not([value=""])
- est mieux. Merci à tous. codepen.io/iegik/pen/ObZpqoFondamentalement, tout le monde recherche:
MOINS:
CSS pur:
la source
Vous pouvez utiliser l'
placeholder
astuce comme indiqué ci-dessus sansrequired
champ.Le problème
required
est que lorsque vous avez écrit quelque chose, puis que vous l'avez supprimé - l'entrée sera désormais toujours rouge dans le cadre de la spécification HTML5 - alors vous aurez besoin d'un CSS comme écrit ci-dessus pour le corriger / le remplacer.Vous pouvez simplement faire quelque chose sans
required
CSS
Stylo code: https://codepen.io/arlevi/pen/LBgXjZ
la source
CSS simple:
Ce code va appliquer le css donné au chargement de la page si l'entrée est remplie.
la source
Vous pouvez
input[type=text]
styliser différemment selon que l'entrée contient du texte ou non en stylisant l'espace réservé. Ce n'est pas une norme officielle à ce stade, mais il prend en charge un large navigateur, bien qu'avec des préfixes différents:Exemple: http://fiddlesalad.com/scss/input-placeholder-css
la source
Utilisation de JS et CSS: pas de pseudoclasse
la source
Vous pouvez profiter de l'espace réservé et utiliser:
la source
Le sélecteur valide fera l'affaire.
la source
Astuce simple avec jQuery et CSS Comme ceci:
JQuery:
CSS:
la source
faites-le sur la partie HTML comme ceci:
Le paramètre requis exigera qu'il contienne du texte dans le champ de saisie pour être valide.
la source
Oui! vous pouvez le faire avec un attribut de base simple avec un sélecteur de valeur.
la source
Ce n'est pas possible avec css. Pour implémenter cela, vous devrez utiliser JavaScript (par exemple
$("#input").val() == ""
).la source