El enfoque común es utilizar el valor predeterminado como una etiqueta, y luego eliminarlo cuando el campo gana el foco.
Realmente no me gusta este enfoque ya que tiene implicaciones de accesibilidad y usabilidad.
En lugar de eso, comenzaría por usar un elemento estándar al lado del campo.
Entonces, si JavaScript está activo, establecer una clase sobre un elemento ancestro que hace que algunos de los nuevos estilos de aplicar ese:
- posición relativamente un div que contiene la entrada y la etiqueta
- Absolutamente posicionar la etiqueta
- Absolutamente la posición de la entrada en la parte superior de la etiqueta
- eliminar los bordes de la entrada y establecer su color de fondo a transparente
Luego, y también cada vez que la entrada pierde el foco, pruebo para ver si la entrada tiene un valor. Si lo hace, asegúrese de que un elemento ancestro tenga una clase (por ejemplo, "etiqueta oculta"); de lo contrario, asegúrese de que no tenga esa clase.
Cuando la entrada gana el foco, configure esa clase.
La hoja de estilo usaría ese nombre de clase en un selector para ocultar la etiqueta (usando texto-sangría: -9999px, por lo general).
Este enfoque proporciona una experiencia decente para todos los usuarios, incluidos aquellos con JS deshabilitados y aquellos que utilizan lectores de pantalla.
Para el registro, la solución http://attardi.org/labels/ sugerida por Tex es en realidad mejor que la de Cory Walker. – nailitdown
Horrible UX, probado una y otra vez. – Rudie
La imagen no funcionó. Lo borró de la publicación. Todavía está disponible en [revisión 3] (http://stackoverflow.com/revisions/781473/3). – Shimmy