Cómo hacer etiquetas de entrada flotantes con validación HTML5

TL; DR Reemplace su validación de JavaScript con la validación de HTML5. Es más fácil de lo que piensa y le brinda un montón de control de marcado y estilo. Prueba esta demo:

Que estamos haciendo aqui

Así que necesitas validar un formulario. Usted hace lo correcto y comienza con la validación del lado del servidor. Luego, si usted es un buen diseñador web, agregue alguna validación del lado del cliente para que los usuarios obtengan comentarios sobre si llenaron el formulario correctamente o no. Si usted es un diseñador web realmente bueno, puede incluso hacer esa retroalimentación instantánea, de modo que el usuario sepa que ingresó una dirección de correo electrónico válida tan pronto como se convierta en una dirección de correo electrónico válida.

Usted alcanza para su biblioteca jQuery favorita. Tal vez eres lo suficientemente genial como para usar una biblioteca de JavaScript de vainilla.

Usted agrega un margen de beneficio adicional. Cambia el estilo de algunas cosas ... agrega algunas reglas de validación de JavaScript. Conecte el JavaScript al servidor a través de AJAX. Golpee su cabeza contra el teclado varias veces porque no lo ha hecho en un par de meses y tiene que buscar exactamente cómo esa nueva biblioteca de validación de JavaScript hace las cosas ... Y así sucesivamente.

Te dan la imagen. No es divertido.

¿Qué pasaría si pudiera omitir todas esas cosas de JavaScript y simplemente validar con validadores de atributos HTML5 y CSS??

¿Qué es la validación de formularios HTML5??

En términos generales: se agregan atributos como necesario o type = "email" a campos y su navegador hace el resto.

Continúe e intente enviar el formulario en esta demostración de CodePen sin contenido. A continuación, intente enviarlo sin una dirección de correo electrónico válida:

Patrones Regex

Es posible que hayas notado que puedes ingresar un email como Automóvil club británico. Es evidente que desea una dirección de correo electrónico real, por lo que al especificar un patrón preciso que nuestros datos deben coincidir, podemos validar lo que se ingresó. Asegurémonos de que coincida con el patrón de tener un punto y dos o tres caracteres al final. Podemos hacer esto usando el modelo atributo y expresiones regulares.

Si eres tentativo de aprender expresiones regulares, necesitas superarlo. Regex es increíblemente potente y en todos los tipos de programación que harás.

Soy terrible en las expresiones regulares complicadas, así que busqué en Google para "expresiones regulares de correo electrónico" (ya que estoy seguro de que esto ya se resolvió) y terminé encontrando una en regular-expressions.info. Aquí está nuestra expresión regular en regex101.com (un recurso muy útil para probar sus expresiones regulares).

^ [A-Za-z0-9 ._% + -] + @ [A-Za-z0-9 .-] + \. [A-Za-z] 2, $

Si lees un poco sobre el patrón, te darás cuenta de que el autor excluyó las coincidencias en minúsculas porque esperan que uses una marca que no distinga mayúsculas y minúsculas. Los patrones de entrada de HTML5 no aceptan marcas, por lo que para obtener letras minúsculas necesitamos agregar el rango en mayúsculas y minúsculas (por ejemplo,. A-Za-z). Puede leer exactamente lo que hace cada parte del patrón en el panel derecho.

Para hacer que nuestros errores de validación arrojen algo distinto a “¡Formato incorrecto!” Podemos especificar un título atributo con un error de validación, como este:

Ahora pruebe la entrada de correo electrónico en esta demostración:

No se preocupe, no tendrá que escribir patrones locos para cada entrada que tenga. La mayoría de las veces solo querrá requerir algo y asegurarse de que sea un tipo de datos determinado. Por ejemplo, un número por encima de 5 podría parecer .

Tenga en cuenta que no todos los navegadores admiten todos los atributos de validación. Por ejemplo, FireFox no soporta longitud mínima. modelo Sin embargo, tiene un soporte bastante bueno, por lo que siempre puedes replicar la funcionalidad.. longitud mínima se puede replicar con patrón = ". 3," dónde 3 es por mucho tiempo que tiene que ser.

Si no puede encontrar un patrón al que tuvo acceso en su antigua biblioteca de JavaScript, probablemente lo pueda encontrar al buscar su código fuente, ya que, en última instancia, la biblioteca de JavaScript coincide exactamente con los mismos patrones de expresiones regulares que nosotros..

Retroalimentacion instantanea

¿No sería bueno que nuestra entrada mostrara algún tipo de indicación cuando fuera válida? Afortunadamente, hay una :válido Selector de CSS para eso. También hay un :inválido selector. Ingrese su nombre en esta demostración:

Notará la obvia advertencia de que los estilos no válidos aparecen incluso antes de que hayamos tocado la entrada.

Podrías pensar en hacer algo como : inválido: no (: vacío) pero no funcionará porque los navegadores son estúpidos y siempre consideran elementos de formulario vacíos.

Podríamos hacer algunos trucos con el nuevo. : marcador de posición mostrado pseudo-selector como se muestra en la siguiente demostración, pero el soporte del navegador para : marcador de posición mostrado Es horrible y no hay todavía un polyfill moderno para eso. Gorrón.

Por ahora, nuestra mejor apuesta es agregar algo de JavaScript para alternar una clase dependiendo de si la entrada está vacía o no. Aquí está la demostración de trabajo:

Haciéndolo hermoso

Mi parte favorita de este enfoque es que tienes un control completo de CSS sobre cada bit de tu formulario.

Empujando el bajo la Tenemos acceso al selector de hermanos adyacente en nuestro .vacío clase. Luego, podemos crear un marcador de posición falso que se desliza maravillosamente fuera del camino tan pronto como la entrada ya no esté vacía. Aquí hay un ejemplo:

Si el estar bajo el ofende tu sensibilidad o no está lo suficientemente accesible, siempre puedes modificar el JavaScript para agregar el vacío clase a la en lugar. Entonces solo es cuestión de ajustar un poco el CSS. Aquí hay un ejemplo haciéndolo de esa manera:

Las clases de validación también funcionan en el

Elemento para que realmente pueda volverse loco con control de estilo.

No hay límite a lo que puedes hacer con este enfoque. Algunas ideas:

  • Añadir iconos de validación que se desvanecen.
  • Agite la entrada si el usuario se desenfoca y no es válido.
  • Dim entradas ya que se llenan correctamente.

Soporte del navegador

  • Perfecto en navegadores modernos y en IE10.+.
  • IE9- no admite pseudo selectores de validación, por lo que no obtendrá el estilo, pero el formulario aún funciona muy bien.

Posible advertencia

No hay forma de estilizar los mensajes de validación. Los navegadores deshabilitaron la habilidad de diseñarlos. No necesariamente creo que esto sea algo malo, ya que la gente estará acostumbrada a estos estilos de validación. De hecho, es probable que esa sea la razón por la que los navegadores decidieron restringir nuestro acceso a ellos. Ahora están estandarizados..

También están fuera del flujo de la página, por lo que no tiene que preocuparse de que empujen los elementos del formulario con su apariencia..

Si necesita absolutamente un control completo sobre los estilos de validación, este método podría no ser para usted.

Deja un comentario

Estoy emocionado de recibir comentarios sobre esto y me encantaría ver algunos estilos / técnicas de validación geniales!

Crédito donde es debido

La publicación del blog de Danny King “Adaptive Placeholders” me hizo pensar en esto.