MISE À JOUR (janvier 2016) : Cette petite astuce ne fonctionne peut-être plus sur tous les navigateurs. J'ai donc une nouvelle solution avec un petit bout de javascript ci-dessous.
Un petit truc sympa
Ce n'est pas agréable, mais vous pouvez simplement mettre les nouvelles lignes dans le html. Comme ceci :
<textarea rows="6" id="myAddress" type="text" placeholder="My Awesome House,
1 Long St
London
Postcode
UK"></textarea>
Remarquez que chaque ligne est sur une nouvelle ligne (non enveloppée) et que chaque retrait de " tabulation " est de 4 espaces. Je reconnais que ce n'est pas une méthode très agréable, mais elle semble fonctionner :
http://jsfiddle.net/01taylop/HDfju/
- Il est probable que le niveau de retrait de chaque ligne varie en fonction de la largeur de votre zone de texte.
- Il est important d'avoir
resize: none;
dans le css pour que la taille de la zone de texte soit fixe (voir jsfiddle).
Ou bien Lorsque vous voulez une nouvelle ligne, appuyez deux fois sur la touche retour (pour qu'il y ait une ligne vide entre vos "nouvelles lignes"). Cette "ligne vide" doit comporter suffisamment de tabulations/espaces pour correspondre à la largeur de votre zone de texte. Le fait d'en avoir beaucoup trop n'a pas d'importance, il faut juste en avoir assez. Mais c'est tellement sale et probablement pas compatible avec les navigateurs. J'aimerais qu'il y ait un moyen plus simple !
Une meilleure solution
Consultez le JSFiddle .
- Cette solution permet de positionner un div derrière la zone de texte.
- Un certain javascript est utilisé pour modifier la couleur d'arrière-plan de la zone de texte, ce qui permet de masquer ou de révéler l'espace réservé de manière appropriée.
- Les entrées et les espaces réservés doivent avoir la même taille de police, d'où les deux mixins.
- El
box-sizing
y display: block
Les propriétés du textarea sont importantes, sinon le div qui se trouve derrière n'aura pas la même taille.
- Réglage de
resize: vertical
et un min-height
sur la zone de texte sont également importants - remarquez comment le texte de l'espace réservé s'enroule et comment l'expansion de la zone de texte conserve le fond blanc. Cependant, la mise en commentaire de l'élément resize
causera des problèmes lors de l'expansion horizontale de la zone de texte.
- Assurez-vous simplement que la hauteur minimale de la zone de texte est suffisante pour couvrir l'ensemble de votre espace réservé dans sa plus petite largeur.
HTML :
<form>
<input type='text' placeholder='First Name' />
<input type='text' placeholder='Last Name' />
<div class='textarea-placeholder'>
<textarea></textarea>
<div>
First Line
<br /> Second Line
<br /> Third Line
</div>
</div>
</form>
SCSS :
$input-padding: 4px;
@mixin input-font() {
font-family: 'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
font-size: 12px;
font-weight: 300;
line-height: 16px;
}
@mixin placeholder-style() {
color: #999;
@include input-font();
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
form {
width: 250px;
}
input,textarea {
display: block;
width: 100%;
padding: $input-padding;
border: 1px solid #ccc;
}
input {
margin-bottom: 10px;
background-color: #fff;
@include input-font();
}
textarea {
min-height: 80px;
resize: vertical;
background-color: transparent;
&.data-edits {
background-color: #fff;
}
}
.textarea-placeholder {
position: relative;
> div {
position: absolute;
z-index: -1;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: $input-padding;
background-color: #fff;
@include placeholder-style();
}
}
::-webkit-input-placeholder {
@include placeholder-style();
}
:-moz-placeholder {
@include placeholder-style();
}
::-moz-placeholder {
@include placeholder-style();
}
:-ms-input-placeholder {
@include placeholder-style();
}
Javascript :
$("textarea").on('change keyup paste', function() {
var length = $(this).val().length;
if (length > 0) {
$(this).addClass('data-edits');
} else {
$(this).removeClass('data-edits');
}
});
2 votes
Si vous utilisez PHP, vous pouvez mettre
<?="\n"?>
comme une nouvelle ligne78 votes
Il suffit d'ajouter
dans l'attribut placeholder, comme<textarea placeholder="This is a line This is another one"></textarea>
. La réponse se trouve ci-dessous.4 votes
@lu1s cela fonctionne dans Chrome, IE mais pas dans Firefox et Safari.
0 votes
@mb21 Je sais, c'est très triste.
1 votes
@mb21 Je l'ai testé il y a une minute dans Firefox 60.0.2 et maintenant cela fonctionne. Peut-être que cela fonctionnerait dans la plupart des navigateurs maintenant.
7 votes
Nous sommes en 2020 et toujours pas de solution pour Safari ?
1 votes
Cela répond-il à votre question ? Peut-on avoir un texte de remplacement HTML5 multiligne dans un <textarea> ?
1 votes
Si vous utilisez PHP, vous pouvez également utiliser
<?='This is a line'.PHP_EOL.'This should be a new line';?>
.0 votes
Cela répond-il à votre question ? Comment utiliser un retour chariot dans une info-bulle HTML ?