2010-09-27 13 views
7

Usted ve estos cuadros de entrada de texto de vez en cuando en la web: una etiqueta gris se muestra dentro del cuadro, pero una vez que escribe allí, el texto gris desaparece. Esta página incluso tiene una: el campo "Título" se comporta exactamente así.¿Puedes mostrar una pista gris en un cuadro de texto HTML con CSS solo?

Por lo tanto, las preguntas:

  1. ¿Existe un término estándar para esto? Realmente estoy luchando para encontrar algo en google

  2. ¿Se puede hacer con solo CSS?

  3. En caso de que así sea, ¿se puede hacer con JavaScript localizado? (es decir, código solo dentro de la etiqueta, no en el encabezado HTML).

+0

No estoy seguro si hay un término universalmente aceptado para esto, pero al menos la API de Windows llama a estos [cue banners] (http://msdn.microsoft.com/en-us/library/bb775793%28VS .85% 29.aspx # cue_banner). – casablanca

+0

Debe ser el valor predeterminado del cuadro de entrada. Sólo CSS [no], JavaScript [sí] – vol7ron

+3

@casablanca El texto de marcador de posición debería ser un término mejor –

Respuesta

6

El atributo "placeholder" es now supported en todos los principales navegadores.

<form> 
<input type="text" placeholder="placeholder text"> 
</form>​ 

Styling todavía parece requerir prefijos de proveedores:

input::-webkit-input-placeholder { 
    color: #59e; 
}  
input:-moz-placeholder { 
    color: #59e; 
} 
​ 

se ve aquí: http://jsfiddle.net/webvitaly/bGrQ4/2/

+1

Gracias por esto. Funciona bien en navegadores actualizados. La respuesta aceptada está un poco desactualizada. O use esto directamente con CSS incrustado para casos generales:

+0

Gracias por la pista. :) –

6

No sé de una manera de hacerlo con CSS. Pero al mirar a la fuente de página, así lo está haciendo thusly-sabia:

<input name="q" class="textbox" tabindex="1" 
     onfocus="if (this.value=='search') this.value = ''" 
     type="text" maxlength="80" size="28" value="search"> 

La línea media que empieza con "onfocus" es donde el trabajo está ocurriendo. Cuando el campo de texto obtiene el foco, verifica si el valor predeterminado ("búsqueda") está allí. Si es así, establece el valor en '' (cadena vacía). De lo contrario, el texto no se verá afectado.

Un posible problema aquí es que si alguien intenta buscar la palabra "buscar", luego hace clic fuera de la caja y vuelve a hacer clic, el texto se restablece. No es un gran problema, pero algo a tener en cuenta mientras trabajas.

+3

I ' Estoy sorprendido de que realmente lo haga de esta manera. Un mejor método sería usar una bandera en lugar de comparar directamente el texto. – casablanca

+0

@casablanca Hay algunos elementos de front-end cuestionables en la fuente de SO, probablemente por la velocidad de desarrollo sobre la capacidad de mantenimiento a largo plazo. – alex

+0

@casablanca - A SO no le importan los estándares o las mejores prácticas. Las tablas se usan en todas partes, incluso en lugares donde las listas serían mejores. Javascript en línea también, incluso cuando es trivial hacer lo contrario. –

1
  1. Las llamo etiquetas de entrada. No sé si se trata de una norma
  2. Nop - se puede si se les permitiera elementos secundarios como tal

input { 
    position: relative; 
} 

input label { 
    position: absolute; 
    top: 0; 
    left: 0; 
} 

input:focus label { 
    display: none; 
} 

Pero no se puede tener hijos de entradas (que yo sepa), por lo que no funcionará.

  1. Sí, ver el enlace anterior (usando jQuery, pero trivial hacer sin)
4

Si desea que esta con HTML + CSS única, puede probar a usar el nuevo atributo de entrada HTML5 placeholder. Lamentablemente, este atributo no es ampliamente compatible, así que intente utilizar un script como Modernizr para detectar la compatibilidad del navegador para esta función con una característica como esta.

No recomendaría usar Javascript en línea para esto; es una mala práctica y va en contra del principio de separación de contenido y comportamiento. Usando jQuery, por ejemplo, algo como esto funcionará:

var input = $('input[name="search"]'); 
var placeHolder = input.attr('placeholder'); 

input.val(placeHolder); 

input.focus(function(){ 
    this.value = ''; 
}).blur(function(){ 
    if(this.value === '') this.value = placeHolder; 
}); 
+1

Es más complicado que eso. ¿Qué sucede si el formulario se envía antes de que un usuario ingrese un valor en la entrada? Su sugerencia es enviada ...así que asegúrese de dar cuenta de ello. Además, si se realiza la validación del formulario, se necesita una lógica adicional para verificar si hay campos vacíos. etc. – Madbreaks

2

Hay un HTML incorporado para nuevos navegadores.

sólo tiene que utilizar el atributo "marcador de posición":

< de entrada de id = tipo "caja de texto" = "text" marcador de posición = "texto de sugerencia aquí">

1

probablemente ya has encontrado la respuesta que está buscando, pero para otros esto puede ayudar a

<script> 
    function inputFocus(i){ 
     if(i.value==i.defaultValue){ i.value=""; i.style.color="#000"; } 
    } 
    function inputBlur(i){ 
     if(i.value==""){ i.value=i.defaultValue; i.style.color="#888"; } 
    } 
</script> 

...

<input type ="text"onfocus="inputFocus(this)" onblur="inputBlur(this)" value="Some Text"/> 

espero que esto ayude

Cuestiones relacionadas