Comme l'a dit Mark, text-align:justify;
est la solution la plus simple. Cependant, pour un texte court, elle n'aura aucun effet. Le code jQuery suivant étire le texte à la largeur du conteneur.
Il calcule l'espace pour chaque caractère et définit letter-spacing
en conséquence, le texte s'étend à la largeur du conteneur .
Si le texte est trop long pour tenir dans le conteneur, il le laisse s'étendre jusqu'aux lignes suivantes et place la fonction text-align:justify;
au texte.
Voici une démo :
$.fn.strech_text = function(){
var elmt = $(this),
cont_width = elmt.width(),
txt = elmt.html(),
one_line = $('<span class="stretch_it">' + txt + '</span>'),
nb_char = elmt.text().length,
spacing = cont_width/nb_char,
txt_width;
elmt.html(one_line);
txt_width = one_line.width();
if (txt_width < cont_width){
var char_width = txt_width/nb_char,
ltr_spacing = spacing - char_width + (spacing - char_width)/nb_char ;
one_line.css({'letter-spacing': ltr_spacing});
} else {
one_line.contents().unwrap();
elmt.addClass('justify');
}
};
$(document).ready(function () {
$('.stretch').each(function(){
$(this).strech_text();
});
});
p { width:300px; padding: 10px 0;background:gold;}
a{text-decoration:none;}
.stretch_it{ white-space: nowrap; }
.justify{ text-align:justify; }
.one{font-size:10px;}
.two{font-size:20px;}
.three{font-size:30px;}
.four{font-size:40px;}
.arial{font-family:arial;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="stretch one">Stretch me</p>
<p class="stretch two">Stretch me</p>
<p class="stretch three">Stretch <a href="#">link</a></p>
<p class="stretch two">I am too slong, an I would look ugly if I was displayed on one line so let me expand to several lines and justify me.</p>
<p class="stretch arial one">Stretch me</p>
<p class="stretch arial three">Stretch me</p>
<p class="stretch arial four">Stretch me</p>
<p class="arial two">Don't stretch me</p>
Démonstration de violon Js
0 votes
Voulez-vous changer le
"spacing between the letters"
(dans le mot anglaisletter-spacing
) ou lefont-size
? Edit : ou comme dans la réponse de @SmudgerDan, l'espacement entre les mots ?0 votes
L'espacement et la taille de la police peuvent être ajustés pour garantir le format du bloc.
1 votes
Pourquoi pas text-align:justify ?
0 votes
@GeorgeKatsanos Je trouve que "text-align:justify" ne remplit pas toujours la zone correctement. Par exemple, si j'ai un div de 300px de large, avec le contenu textuel "Lorem Ipsum", il ne s'étire pas pour remplir la zone.
0 votes
@Curt, text-align:justify peut fonctionner. Voir ma réponse ci-dessous