Je construis un site multilingue, le propriétaire m'aidant pour quelques traductions. Certaines des phrases affichées nécessitent des sauts de ligne pour conserver le style du site.
Malheureusement, le propriétaire n'est pas un informaticien, donc s'il voit il foo<br />bar
y a une chance qu'il modifie les données d'une manière ou d'une autre pendant qu'il traduit.
Existe-t-il une solution CSS (en plus de changer la largeur) à appliquer à un élément qui se briserait après chaque mot?
(Je sais que je peux faire cela en PHP, mais je me demande s'il y a une astuce astucieuse que je ne connais pas en CSS pour accomplir la même chose, peut-être dans les fonctionnalités CJK.)
ÉDITER
Je vais essayer de schématiser ce qui se passe:
---------------- ----------------
| Short Word | | Gargantuan |
| | | Word |
---------------- ----------------
Le mot long se brise automatiquement, pas le mot court. Je veux que ça ressemble à ceci:
---------------- ----------------
| Short | | Gargantuan |
| Word | | Word |
---------------- ----------------
la source
Réponses:
Utilisation
où
<parent-width>
est la largeur de l'élément parent (ou une valeur arbitraire élevée qui ne tient pas dans une ligne). De cette façon, vous pouvez être sûr qu'il y a même un saut de ligne après une seule lettre. Fonctionne avec Chrome / FF / Opera / IE7 + (et probablement même IE6 car il prend également en charge l'espacement des mots).la source
.parent { word-spacing: 100px; }
où100px
est la largeur de l'élément parent. Le problème est que cette solution ne fonctionne pas si vous avez un parent fluide.word-spacing: 100000px
et vous n'aurez pas à vous soucier de la fluidité du parent en termes de largeur. Définir un espacement des mots de 100% aurait eu du sens (cela aurait été 100% de la largeur du parent), mais les valeurs exprimées en pourcentage ne sont pas prises en charge pour cette propriété css.word-spacing: 2em;
et à une largeur mobile, je veux qu'ils soient sur une seule ligne:word-spacing: unset;
La réponse donnée par @HursVanBloob fonctionne uniquement avec le conteneur parent de largeur fixe, mais échoue dans le cas de conteneurs à largeur fluide .
J'ai essayé beaucoup de propriétés, mais rien n'a fonctionné comme prévu. Enfin, je suis arrivé à la conclusion que donner
word-spacing
une valeur très énorme fonctionne parfaitement bien.ou, pour les navigateurs modernes, vous pouvez utiliser l'
vw
unité CSS (largeur visuelle en% de la taille de l'écran).la source
Une solution alternative est décrite sur Phrase séparée à un mot par ligne , en appliquant
display:table-caption;
à l'élémentla source
Essayez d'utiliser
white-space: pre-line;
. Il crée un saut de ligne partout où un saut de ligne apparaît dans le code, mais ignore les espaces supplémentaires (tabulations et espaces, etc.).Tout d'abord, écrivez vos mots sur des lignes séparées dans votre code:
Appliquez ensuite le style à l'élément contenant les mots.
Attention cependant, chaque saut de ligne dans le code à l'intérieur de l'élément créera un saut de ligne. Donc, écrire ce qui suit entraînera un saut de ligne supplémentaire avant le premier mot et après le dernier mot:
Il existe un excellent article sur les astuces CSS expliquant les autres attributs d'espace blanc.
la source
white-space
peut être utilisé pour répondre à la question. Désolé, mais je ne vois pas comment.white-space: pre;
" pour afficher ces sauts de ligne comme le<pre>
ferait une balise? Cela pourrait fonctionner, et un saut de ligne devrait sembler plus naturel aux traducteurs qu'un<br />
. Je vais essayer de modifier votre réponse pour l'ajouter :)white-space: pre-line;
serait probablement plus approprié, car il ignore les espaces supplémentaires dans votre code. Je mettrai à jour la réponse.white-space: pre;
pour IE 7.Si vous souhaitez pouvoir choisir parmi différentes solutions, en plus des réponses données ...
Une autre méthode consiste à donner au conteneur une largeur de 0 et à s'assurer que le débordement est visible. Ensuite, chaque mot en débordera et sera sur sa propre ligne.
Ou vous pouvez utiliser l'une de ces nouvelles
width
valeurs proposées , à condition qu'elles existent toujours au moment où vous lisez ceci.la source
Vous ne pouvez pas cibler chaque mot en CSS. Cependant, avec un peu de jQuery, vous pourriez probablement le faire.
Avec jQuery, vous pouvez envelopper chaque mot dans un
<span>
intervalle de jeu CSS, puis dansdisplay:block
lequel le placerait sur sa propre ligne.En théorie bien sûr: P
la source
:first-child
truc ou quelque chose là-bas ...https://jsfiddle.net/bm3Lfcod/1/
Pour ceux qui recherchent une solution qui fonctionne dans un conteneur parent flexible avec un enfant flexible dans les deux dimensions. par exemple. boutons de la barre de navigation.
la source
CSS
propriété que vous pouvez donner. Dites une propriété qui pourrait causerbrowser reflow
J'ai été confronté au même problème et aucune des options proposées ici ne m'a aidé. Certains services de messagerie ne prennent pas en charge les styles spécifiés. Voici ma version, qui a résolu le problème et fonctionne partout où j'ai vérifié:
OU en utilisant CSS:
la source
La meilleure solution est la
word-spacing
propriété.Ajoutez le
<p>
dans un conteneur avec une taille spécifique (exemple300px
) et après vous devez ajouter cette taille comme valeur dans l'espacement des mots.HTML
CSS
De cette façon, votre phrase sera toujours coupée et placée dans une colonne, mais le avec du paragraphe sera dynamique.
Voici un exemple Codepen
la source
Dans mon cas,
a fonctionné parfaitement, j'espère que cela aidera tout autre nouveau venu comme moi.
la source