Tengo texto fantasma en los campos de texto que desaparecen cuando te enfocas en ellos usando el atributo de marcador de posición HTML5:
<input type="text" name="email" placeholder="Enter email"/>
Quiero usar ese mismo mecanismo para tener texto de marcador de posición multilínea en un área de texto, tal vez algo como esto:
<textarea name="story" placeholder="Enter story\n next line\n more"></textarea>
Pero esos \n
s aparecen en el texto y no causan nuevas líneas ... ¿Hay alguna manera de tener un marcador de posición multilínea?
ACTUALIZACIÓN : La única forma de hacer que esto funcione fue utilizando el complemento jQuery Watermark , que acepta HTML en el texto del marcador de posición:
$('.textarea_class').watermark('Enter story<br/> * newline', {fallback: false});
white-space
para asegurarse de que esté configurado correctamente, por ejemplo, pre-wrap
funciona en todas partes, excepto Safari.Respuestas:
En
<textarea>
el caso de la especificación, se describe específicamente que el retorno de carro + saltos de línea en el atributo de marcador de posición DEBE representarse como saltos de línea por el navegador.También se refleja en MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#attr-placeholder
FWIW, cuando pruebo Chrome 63.0.3239.132, de hecho funciona como dice que debería.
fuente
En la mayoría de los navegadores (consulte los detalles a continuación), la edición del marcador de posición en JavaScript permite el marcador de posición multilínea. Como se ha dicho, no cumple con la especificación y no debe esperar que funcione en el futuro (editar: funciona).
Este ejemplo reemplaza a todos los marcadores de posición de textarea multilínea.
Fragmento JsFiddle .
Resultado EsperadoSegún los comentarios, parece que algunos navegadores aceptan este truco y otros no.
Estos son los resultados de las pruebas que ejecuté (con browserrtshots y browserstack )
Fusionada con estas estadísticas , esto significa que funciona en aproximadamente el 88.7% de los navegadores utilizados actualmente (octubre de 2015) .
Actualización : Hoy, funciona en al menos el 94,4% de los navegadores utilizados actualmente (julio de 2018) .
fuente
multiline
nomultiligne
WKWebView
. Posteriormente, cualquier navegador en IOS no procesará este hack correctamente hasta que loWKWebView
haga.Me parece que si usa muchos espacios, el navegador lo ajustará correctamente. No se preocupe por usar un número exacto de espacios, simplemente arroje mucho allí, y el navegador debería ajustarse correctamente al primer carácter que no sea espacio en la siguiente línea.
fuente
Existe un truco real que permite agregar marcadores de posición multilínea en los navegadores Webkit, Chrome solía funcionar, pero en versiones más recientes lo eliminaron:
Primero agregue la primera línea de su marcador de posición al html5 como de costumbre
luego agregue el resto de la línea por css:
Si desea mantener sus líneas en un lugar, puede intentar lo siguiente. La desventaja de esto es que otros navegadores que no sean Chrome, Safari, WebKit, etc. ni siquiera muestres la primera línea:
luego agregue el resto de la línea por css:
Violín de demostración
Sería genial, si es así, podría obtener una demostración similar trabajando en Firefox.
fuente
Si está usando AngularJS, simplemente puede usar llaves para colocar lo que quiera en él: aquí hay un violín.
fuente
De acuerdo con MDN ,
Esto significa que si solo saltas a una nueva línea, se debe representar correctamente. Es decir
debería renderizar así:
fuente
La especificación html5 rechaza expresamente nuevas líneas en el campo de marcador de posición. Las versiones de Webkit / will / insert nuevas líneas cuando se presentan con saltos de línea en el marcador de posición, sin embargo, este es un comportamiento incorrecto y no se debe confiar en él.
Supongo que los párrafos no son lo suficientemente breves para w3;)
fuente
Reaccionar:
Si está utilizando React, puede hacerlo de la siguiente manera:
fuente
Si
textarea
tiene un ancho estático, puede usar una combinación de espacio sin interrupciones y ajuste automático del área de texto. Simplemente reemplace los espacios en nbsp para cada línea y asegúrese de que dos líneas vecinas no puedan caber en una. En la prácticaline length > cols/2
.Esta no es la mejor manera, pero podría ser la única solución entre navegadores.
fuente
Puedes intentar usar CSS, funciona para mí. El atributo
placeholder=" "
es obligatorio aquí.fuente
en php con la función chr (13):
fuente
No creo que sea posible solo con html / css. Podría ser posible usando JavaScript o algún otro tipo de pirateo: espacios adicionales para llevar el texto a la siguiente línea, etc.
fuente
Bootstrap + contenteditable + marcador de posición multilínea
Demostración: https://jsfiddle.net/39mptojs/4/
basado en la respuesta @cyrbil y @daniel
Usando Bootstrap, jQuery y https://github.com/gr2m/bootstrap-expandable-input para habilitar el marcador de posición en contenteditable.
Usando javascript "placeholder replace" y agregando "white-space: pre" a css, se muestra el marcador de posición multilínea.
HTML:
Javascript:
Css:
fuente
La solución de marca de agua en la publicación original funciona muy bien. Gracias por eso. En caso de que alguien lo necesite, aquí hay una directiva angular para ello.
fuente