Est-il possible de limiter une longueur de texte à "n" lignes en utilisant CSS (ou de le couper en cas de débordement vertical).
text-overflow: ellipsis;
ne fonctionne que pour le texte d'une ligne.
texte original:
Ultrices natoque mus mattis, aliquam, cras en pellentesque
tincidunt elit purus lectus, vel ut aliquet, elementum nunc
nunc rhoncus placerat urna! Sit est sed! Ut penatibus turpis
mus tincidunt! Dapibus sed aenean, magna sagittis, lorem velit
sortie souhaitée (2 lignes):
Ultrices natoque mus mattis, aliquam, cras in pellentesque
tincidunt elit purus lectus, vel ut aliquet, elementum ...
Réponses:
Il existe un moyen de le faire en utilisant la syntaxe non officielle de raccourcissement de ligne , et à partir de Firefox 68, il fonctionne dans tous les principaux navigateurs.
Sauf si vous vous souciez des utilisateurs d'IE, il n'y a pas besoin de le faire
line-height
et de recourir à desmax-height
solutions de rechange.la source
-webkit-box-orient: vertical;
être caché lors de la compilation de scss, essayez ceci/* autoprefixer: ignore next */ -webkit-box-orient: vertical;
Ce que vous pouvez faire est le suivant:
où
max-height:
=line-height:
×<number-of-lines>
inem
.la source
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
pour faire apparaître les points de suspension. Mais cela ne fonctionnera que dans Chrome. Pour une solution qui fonctionne également sur Firefox, regardez ici: stackoverflow.com/a/20595073/1884158 Et voici un tutoriel utile sur le sujet: css-tricks.com/line-clampinSolution multi-navigateur fonctionnelle
Ce problème nous tourmente tous depuis des années.
Pour vous aider dans tous les cas, j'ai présenté l'approche CSS uniquement et une approche jQuery au cas où les mises en garde CSS poseraient problème.
Voici une seule solution CSS que j'ai trouvée qui fonctionne en toutes circonstances, avec quelques mises en garde mineures.
Les bases sont simples, elles masquent le débordement de la travée et définissent la hauteur maximale en fonction de la hauteur de ligne comme suggéré par Eugene Xa.
Ensuite, il y a une pseudo-classe après le div contenant qui place bien les points de suspension.
Avertissements
Cette solution placera toujours les points de suspension, indépendamment de la nécessité.
Si la dernière ligne se termine par une phrase de fin, vous vous retrouverez avec quatre points ....
Vous devrez être satisfait de l'alignement du texte justifié.
Les points de suspension seront à droite du texte, ce qui peut sembler bâclé.
Code + extrait
jsfiddle
Approche jQuery
À mon avis, c'est la meilleure solution, mais tout le monde ne peut pas utiliser JS. Fondamentalement, le jQuery vérifiera n'importe quel élément .text, et s'il y a plus de caractères que la var max prédéfinie, il coupera le reste et ajoutera des points de suspension.
Il n'y a aucune mise en garde à cette approche, mais cet exemple de code est uniquement destiné à démontrer l'idée de base - je ne l'utiliserais pas en production sans l'améliorer pour deux raisons:
1) Il réécrira le html interne des elems .text. si nécessaire ou non. 2) Il ne fait aucun test pour vérifier que le html interne n'a pas d'elems imbriqués - vous comptez donc beaucoup sur l'auteur pour utiliser correctement le .text.
Édité
Merci pour la capture @markzzz
Extrait de code
jsfiddle
la source
Pour autant que je puisse voir, cela ne serait possible qu'en utilisant
height: (some em value); overflow: hidden
et même alors, cela n'aurait pas la fantaisie...
à la fin.Si ce n'est pas une option, je pense que c'est impossible sans un certain prétraitement côté serveur (difficile car le flux de texte est impossible à prévoir de manière fiable) ou jQuery (possible mais probablement compliqué).
la source
.mytext
utilisant jQuery, savoir s'il a plus de contenu que ce qui est visible et en ajouter un...
manuellement. De cette façon, vous êtes compatible avec les clients sans JS et les clients avec JS peuvent avoir la décoration. Peut-être vaut-il la peine de poser une question distincte à un gourou jQuery; pourrait être possible de le faire assez facilementLa solution de ce fil est d'utiliser le plugin jquery dotdotdot . Pas une solution CSS, mais elle vous donne beaucoup d'options pour les liens "en savoir plus", le redimensionnement dynamique, etc.
la source
la classe CSS suivante m'a aidé à obtenir des points de suspension sur deux lignes.
la source
Actuellement, vous ne pouvez pas, mais à l'avenir, vous pourrez utiliser
text-overflow:ellipis-lastline
. Actuellement, il est disponible avec le préfixe du fournisseur dans Opera 10.60+: exemplela source
J'ai une solution qui fonctionne bien mais à la place des points de suspension, elle utilise un dégradé. Cela fonctionne lorsque vous avez du texte dynamique, vous ne savez donc pas s'il sera assez long pour avoir besoin d'une ellipse. Les avantages sont que vous n'avez pas à faire de calculs JavaScript et cela fonctionne pour les conteneurs de largeur variable, y compris les cellules de tableau, et est multi-navigateur. Il utilise quelques divs supplémentaires, mais il est très facile à implémenter.
Balisage:
CSS:
article de blog: http://salzerdesign.com/blog/?p=453
exemple de page: http://salzerdesign.com/test/fade.html
la source
la source
J'aime vraiment le line-clamp, mais pas encore de support pour firefox .. donc je vais avec un calcul mathématique et je cache juste le débordement
permet maintenant de dire que vous voulez supprimer et ajouter cette classe via jQuery avec un lien, vous aurez besoin d'avoir un pixel supplémentaire donc la hauteur maximale sera de 63 px, c'est parce que vous devez vérifier à chaque fois si la hauteur est supérieure à 62px, mais dans le cas de 4 lignes, vous obtiendrez un faux vrai, donc un pixel supplémentaire corrigera cela et ne créera aucun problème supplémentaire
je vais coller un coffeescript pour que ce soit juste un exemple, utilise quelques liens qui sont cachés par défaut, avec des classes en lecture et en lecture, il supprimera ceux dont le débordement n'est pas nécessaire et supprimera le corps -classes de débordement
la source
Si vous voulez vous concentrer sur chacun,
letter
vous pouvez faire comme ça, je me réfère à cette questionAfficher l'extrait de code
Si vous voulez vous concentrer sur chacun,
word
vous pouvez faire comme ça + espaceAfficher l'extrait de code
Si vous voulez vous concentrer sur chacun,
word
vous pouvez faire comme ça + sans espaceAfficher l'extrait de code
la source
Exemple de code de base, apprendre à coder est facile. Vérifiez les commentaires CSS de style.
la source
J'ai cherché autour de ça, mais je me rends compte, bon sang mon site utilise php !!! Pourquoi ne pas utiliser la fonction de découpage sur la saisie de texte et jouer avec la longueur maximale ....
Voici également une solution possible pour ceux qui utilisent php: http://ideone.com/PsTaI
la source