Eu tenho texto fantasma nos campos de texto que desaparecem quando você os focaliza usando o atributo de espaço reservado do HTML5:
<input type="text" name="email" placeholder="Enter email"/>
Eu quero usar esse mesmo mecanismo para ter texto de espaço reservado multilinha em uma área de texto, talvez algo como isto:
<textarea name="story" placeholder="Enter story\n next line\n more"></textarea>
Mas eles \n
são exibidos no texto e não causam novas linhas ... Existe uma maneira de ter um espaço reservado multilinha?
ATUALIZAÇÃO : A única maneira de fazer isso funcionar foi utilizando o plug-in jQuery Watermark , que aceita HTML no texto do espaço reservado:
$('.textarea_class').watermark('Enter story<br/> * newline', {fallback: false});
white-space
para garantir que esteja definido corretamente, por exemplo, pré-quebra
funciona em qualquer lugar, exceto no Safari.Respostas:
Para
<textarea>
s a especificação descreve especificamente que as quebras de retornos de carro + linha no atributo espaço reservado deve ser processado como quebras de linha pelo navegador.Também refletido no MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#attr-placeholder
FWIW, quando tento o Chrome 63.0.3239.132, ele realmente funciona como deveria.
fonte
Na maioria dos navegadores (veja detalhes abaixo), a edição do espaço reservado em javascript permite o espaço reservado para várias linhas. Como foi dito, não é compatível com o especificação e você não deve esperar que funcione no futuro (editar: funciona).
Este exemplo substitui todos os espaços reservados da área de texto multilinha.
JsFiddleSnippet .
Resultado esperadoCom base nos comentários, parece que algum navegador aceita esse hack e outros não.
Estes são os resultados dos testes que eu executei (com browsertshots e browserstack )
Fundido com essas estatísticas , isso significa que ele funciona em cerca de 88,7% dos navegadores atualmente usados (outubro de 2015) .
Atualização : Hoje, ele funciona em pelo menos 94,4% dos navegadores usados atualmente (julho de 2018) .
fonte
multiline
nãomultiligne
WKWebView
. Posteriormente, qualquer navegador no IOS não processará esse hack corretamente atéWKWebView
o momento.Acho que se você usar muitos espaços, o navegador o envolverá adequadamente. Não se preocupe em usar um número exato de espaços, basta colocar muito nele, e o navegador deve agrupar corretamente o primeiro caractere não espaço na próxima linha.
fonte
Existe um hack real que permite adicionar espaços reservados de várias linhas nos navegadores Webkit. O Chrome costumava funcionar, mas nas versões mais recentes eles o removeram:
Primeiro, adicione a primeira linha do seu espaço reservado ao html5, como de costume
adicione o restante da linha por css:
Se você quiser manter suas linhas em um só lugar, tente o seguinte. A desvantagem disso é que outros navegadores além do chrome, safari, webkit-etc. nem mostre a primeira linha:
adicione o restante da linha por css:
Violino de demonstração
Seria ótimo, se assim for, poderia obter uma demonstração semelhante trabalhando no Firefox.
fonte
Se você estiver usando o AngularJS, pode simplesmente usar chaves para colocar o que quiser: aqui está um violino.
fonte
De acordo com a MDN ,
Isso significa que, se você pular para uma nova linha, ela deverá ser renderizada corretamente. Ou seja,
deve renderizar assim:
fonte
A especificação html5 rejeita expressamente novas linhas no campo marcador de posição. Versões do Webkit / will / inserem novas linhas quando apresentadas com feeds de linha no espaço reservado, no entanto, esse é um comportamento incorreto e não deve ser considerado.
Eu acho que os parágrafos não são breves o suficiente para o w3;)
fonte
Reagir:
Se você estiver usando o React, poderá fazer o seguinte:
fonte
Se você
textarea
tem uma largura estática, pode usar a combinação de espaço sem quebra e quebra automática de área de texto. Apenas substitua espaços para nbsp por cada linha e verifique se duas linhas vizinhas não podem caber em uma. Na práticaline length > cols/2
.Essa não é a melhor maneira, mas pode ser a única solução entre navegadores.
fonte
Você pode tentar usar CSS, funciona para mim. O atributo
placeholder=" "
é obrigatório aqui.fonte
em php com a função chr (13):
fonte
Eu não acho que isso é possível apenas com html / css. Pode ser possível usar JavaScript ou algum outro tipo de hack - espaços extras para enviar o texto para a próxima linha, etc.
fonte
Espaço reservado para inicialização + conteúdo editável + multilinhas
Demonstração: https://jsfiddle.net/39mptojs/4/
com base nas respostas @cyrbil e @daniel
Usando o Bootstrap, jQuery e https://github.com/gr2m/bootstrap-expandable-input para ativar o espaço reservado no contenteditable.
Usando o javascript "placeholder replace" e adicionando "white-space: pre" ao css, o placeholder multilinha é mostrado.
Html:
Javascript:
Css:
fonte
Solução de marca d'água no post original funciona muito bem. Obrigado por isso. Caso alguém precise, aqui está uma diretiva angular.
fonte