¿Hay alguna manera de detectar si una entrada tiene o no texto a través de CSS? He intentado usar la :empty
pseudo-clase, y he intentado usar [value=""]
, ninguno de los cuales funcionó. Parece que no puedo encontrar una solución única para esto.
Me imagino que esto debe ser posible, teniendo en cuenta que tenemos pseudo-clases para :checked
, y :indeterminate
, las cuales son algo similar.
Tenga en cuenta: estoy haciendo esto para un estilo "elegante" , que no puede utilizar JavaScript.
También tenga en cuenta que Stylish se usa, del lado del cliente, en páginas que el usuario no controla.
Respuestas:
Elegante no puede hacer esto porque CSS no puede hacer esto. CSS no tiene (pseudo) selectores para los
<input>
valores. Ver:El
:empty
selector se refiere solo a nodos secundarios, no a valores de entrada.[value=""]
hace el trabajo; pero solo para el estado inicial . Esto se debe a que elvalue
atributo de un nodo (que CSS ve) no es lo mismo que lavalue
propiedad del nodo (modificado por el usuario o DOM javascript, y enviado como datos de formulario).A menos que sólo se preocupan por el estado inicial, se debe utilizar un userscript o script de Greasemonkey. Afortunadamente esto no es difícil. El siguiente script funcionará en Chrome o Firefox con Greasemonkey o Scriptish instalado, o en cualquier navegador que admita scripts de usuario (es decir, la mayoría de los navegadores, excepto IE).
Vea una demostración de los límites de CSS más la solución de JavaScript en esta página jsBin .
fuente
:valid
opción requiere reescribir la página, que es algo que el OP no puede hacer con estilo y que ninguna de las otras respuestas muestra en absoluto en un contexto de navegación. El usuario no tiene control sobre la página que está visitando.Es posible, con las advertencias habituales de CSS y si se puede modificar el código HTML. Si agrega el
required
atributo al elemento, el elemento coincidirá:invalid
o:valid
según si el valor del control está vacío o no. Si el elemento no tiene ningúnvalue
atributo (o lo tienevalue=""
), el valor del control está inicialmente vacío y deja de estar vacío cuando se ingresa cualquier carácter (incluso un espacio).Ejemplo:
Los pseudo-clasificados
:valid
y:invalid
se definen solo en documentos CSS de nivel Working Draft, pero el soporte está bastante extendido en los navegadores, excepto que en IE, vino con IE 10.Si desea que los valores de inclusión "vacíos" incluyan solo espacios, puede agregar el atributo
pattern=.*\S.*
.No existe (actualmente) un selector CSS para detectar directamente si un control de entrada tiene un valor no vacío, por lo que debemos hacerlo indirectamente, como se describió anteriormente.
En general, los selectores CSS se refieren al marcado o, en algunos casos, a las propiedades de los elementos configurados con secuencias de comandos (JavaScript del lado del cliente), en lugar de las acciones del usuario. Por ejemplo,
:empty
coincide con el elemento con contenido vacío en el marcado; Todos losinput
elementos están inevitablemente vacíos en este sentido. El selector[value=""]
prueba si el elemento tiene elvalue
atributo en marcado y tiene la cadena vacía como su valor. Y:checked
ya:indeterminate
son cosas similares. No se ven afectados por la entrada real del usuario.fuente
required
atributo puede evitar el envío de formularios.novalidate
atributo en el<form>
elemento para que no se preocupe por la pantalla roja cuando el campo está vacío después de haber sido llenado una vez:<form ... novalidate> <input ... required /> </form>
Puedes usar la
:placeholder-shown
pseudo clase. Técnicamente se requiere un marcador de posición, pero puede utilizar un espacio en su lugar.fuente
:placeholder-shown
, esta debería ser la respuesta aceptada. Elrequired
método no tiene en cuenta los casos marginales. Cabe señalar que puede pasar un espacio a un marcador de posición y este método seguirá funcionando. Prestigio.input:not(:placeholder-shown)
siempre coincidirá<input/>
incluso si no hay ningún valor.y
trabajará :-)
editar: http://jsfiddle.net/XwZR2/
fuente
input[value]:not([value=""])
- es mejor. Gracias a todos. codepen.io/iegik/pen/ObZpqoBásicamente, lo que todos buscan es:
MENOS:
CSS puro:
fuente
Puedes usar el
placeholder
truco como está escrito arriba sinrequired
campo.El problema
required
es que cuando escribiste algo, luego lo borraste (la entrada ahora siempre será roja como parte de la especificación HTML5), entonces necesitarás un CSS como se escribió anteriormente para corregirlo / anularlo.Usted puede hacer algo simple sin
required
CSS
Pluma de código: https://codepen.io/arlevi/pen/LBgXjZ
fuente
CSS simple:
Este código va a aplicar el css dado en la carga de la página si se llena la entrada.
fuente
Puede aplicar un estilo
input[type=text]
diferente dependiendo de si la entrada tiene texto o no al diseñar el marcador de posición. Este no es un estándar oficial en este momento, pero tiene un amplio soporte para el navegador, aunque con diferentes prefijos:Ejemplo: http://fiddlesalad.com/scss/input-placeholder-css
fuente
Usando JS y CSS: no pseudoclase
fuente
Puede aprovechar el marcador de posición y usar:
fuente
El selector válido hará el truco.
fuente
Truco simple con jQuery y CSS Así:
JQuery:
CSS:
fuente
hazlo en la parte HTML así:
El parámetro requerido requerirá que tenga texto en el campo de entrada para que sea válido.
fuente
¡Si! puedes hacerlo con un atributo básico simple con selector de valor.
fuente
Esto no es posible con css. Para implementar esto, deberá usar JavaScript (por ejemplo
$("#input").val() == ""
).fuente