J'ai une page Web avec une mise en page élastique qui change sa largeur si la fenêtre du navigateur est redimensionnée.
Dans cette mise en page, il y a des titres ( h2
) qui auront une longueur variable (étant en fait des titres de blogs sur lesquels je n'ai pas de contrôle). Actuellement, s'ils sont plus larges que la fenêtre, ils sont divisés en deux lignes.
Existe-t-il une solution élégante et testée (multi-navigateurs) - par exemple avec jQuery - qui raccourcit le fichier innerHTML de cette balise de titre et ajoute "..." si le texte est trop large pour tenir dans une ligne à l'écran actuel / largeur du conteneur?
Réponses:
J'ai une solution fonctionnant dans FF3, Safari et IE6 + avec du texte simple et multiligne
jquery.ellipsis.js
la source
La seule solution CSS suivante pour tronquer du texte sur une seule ligne fonctionne avec tous les navigateurs répertoriés sur http://www.caniuse.com dès la rédaction, à l'exception de Firefox 6.0. Notez que JavaScript est totalement inutile, sauf si vous devez prendre en charge l'encapsulation de texte multiligne ou des versions antérieures de Firefox.
Si vous avez besoin d'assistance pour les versions antérieures de Firefox, consultez ma réponse à cette autre question .
la source
J'ai construit ce code en utilisant un certain nombre d'autres articles, avec les améliorations suivantes:
display: block
au style, donc les travées fonctionnentCSS:
jquery.ellipsis.js
la source
Ma réponse ne prend en charge que le texte sur une seule ligne. Consultez le commentaire de gfullam ci-dessous pour le fork multi-lignes, cela semble assez prometteur.
J'ai réécrit le code de la première réponse plusieurs fois, et je pense que cela devrait être le plus rapide.
Il trouve d'abord une longueur de texte «estimée», puis ajoute ou supprime un caractère jusqu'à ce que la largeur soit correcte.
La logique qu'il utilise est illustrée ci-dessous:
Après avoir trouvé une longueur de texte «estimée», des caractères sont ajoutés ou supprimés jusqu'à ce que la largeur souhaitée soit atteinte.
Je suis sûr qu'il a besoin d'être peaufiné, mais voici le code:
la source
Juste au cas où vous vous retrouveriez ici en 2013 - voici une approche css pure que j'ai trouvée ici: http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
Ça marche bien.
la source
text-overflow
ne fonctionne pas avec destextarea
éléments (à partir de 2015). Si vous avez besoin de support,textarea
vous pouvez y parvenir en modifiant la réponse acceptée ou en utilisant cette fourchette .J'ai fait un plugin jQuery vraiment cool pour gérer toutes les variétés d'ellipse de texte est celui appelé ThreeDots @ http://tpgblog.com/threedots
Il est beaucoup plus flexible que les approches CSS et prend en charge des comportements et des interactions beaucoup plus avancés et personnalisables.
Prendre plaisir.
la source
Un plugin jQuery plus flexible vous permettant de conserver un élément après les points de suspension (par exemple un bouton "read-more") et de mettre à jour onWindowResize. Cela fonctionne également autour du texte avec un balisage:
http://dotdotdot.frebsite.nl
la source
Le plugin jQuery trunk8 prend en charge plusieurs lignes et peut utiliser n'importe quel html, pas seulement des caractères d'ellipse, pour le suffixe de troncature: https://github.com/rviscomi/trunk8
Démo ici: http://jrvis.com/trunk8/
la source
Il existe en fait un moyen assez simple de le faire dans CSS en exploitant le fait qu'IE étend cela avec des supports non standard et FF
:after
Vous pouvez également le faire dans JS si vous le souhaitez en inspectant le scrollWidth de la cible et en le comparant à la largeur de ses parents, mais à mon avis, c'est moins robuste.
Edit: c'est apparemment plus développé que je ne le pensais. Le support CSS3 peut bientôt exister, et certaines extensions imparfaites sont disponibles pour que vous puissiez les essayer.
Ce dernier est une bonne lecture.
la source
J'avais fait quelque chose de similaire pour un client récemment. Voici une version de ce que j'ai fait pour eux (exemple testé dans toutes les dernières versions de navigateur sur Win Vista). Pas parfait sur tout le plateau, mais pourrait être modifié assez facilement.
Démo: http://enobrev.info/ellipsis/
Code:
la source
Eh bien, une solution simple, qui n'ajoute pas tout à fait le "...", mais qui empêche le <h2> de se diviser en deux lignes serait d'ajouter ce bit de css:
J'ai réfléchi un peu plus et j'ai trouvé cette solution, vous devez envelopper le contenu textuel de votre balise h2 avec une autre balise (par exemple, une étendue) (ou bien envelopper les h2 avec quelque chose qui a la hauteur donnée) et ensuite vous pouvez utiliser ce type de javascript pour filtrer les mots inutiles:
la source
Voici une autre solution JavaScript. Fonctionne très bien et très vite.
https://github.com/dobiatowski/jQuery.FastEllipsis
Testé sur Chrome, FF, IE sous Windows et Mac.
la source
Il existe une solution pour le texte multiligne avec du css pur. Cela s'appelle
line-clamp
, mais cela ne fonctionne que dans les navigateurs Webkit. Il existe cependant un moyen d'imiter cela dans tous les navigateurs modernes (tout ce qui est plus récent que IE8.) De plus, cela ne fonctionnera que sur des arrière-plans solides car vous avez besoin d'une image d'arrière-plan pour masquer les derniers mots de la dernière ligne. Voici comment ça se passe:Compte tenu de ce html:
Voici le CSS:
ellipsis_bg.png étant une image de la même couleur que votre arrière-plan, qui ferait environ 100px de large et aurait la même hauteur que votre hauteur de ligne.
Ce n'est pas très joli, car votre texte peut être coupé au milieu d'une lettre, mais cela peut être utile dans certains cas.
Référence: http://www.css-101.org/articles/line-clamp/line-clamp_for_non_webkit-based_browsers.php
la source
Ellipsis multi-lignes CSS pur pour le contenu texte:
Veuillez consulter l'extrait pour un exemple en direct.
la source
Ceci est similaire à celui d'Alex mais le fait en temps journal au lieu de linéaire, et prend un paramètre maxHeight.
la source
Il existe une solution jQuery simple de Devon Govett :
https://gist.github.com/digulla/5796047
la source
J'ai réécrit la fonction d'Alex pour l'utiliser dans la bibliothèque MooTools. Je l'ai changé un peu en saut de mots plutôt que d'ajouter les points de suspension au milieu d'un mot.
la source
Je n'ai pas trouvé de script qui fonctionnait exactement comme je le voulais, tout comme le mien pour jQuery - pas mal d'options à définir avec plus sur leur chemin :)
https://github.com/rmorse/AutoEllipsis
la source
J'ai été un peu surpris par le comportement du css.
Sauf si j'ai fourni la largeur du contrôle auquel j'avais besoin de lier les points de suspension, cela ne soutenait pas ma cause. La largeur est-elle une propriété incontournable à ajouter ??? Veuillez mettre vos pensées.
la source
FAITES L'ELLIPSIS EN UTILISANT UNIQUEMENT CSS
* Ce code fonctionne sur la plupart des navigateurs actuels. Si vous rencontrez un problème avec Opera et IE (ce que vous ne serez probablement pas), ajoutez-les dans le style:
* Cette fonctionnalité fait partie de CSS3. Sa syntaxe complète est:
la source
Voici une belle bibliothèque de widgets / plugins qui a des points de suspension intégrés: http://www.codeitbetter.co.uk/widgets/ellipsis/ Tout ce dont vous avez besoin pour faire référence à la bibliothèque et appeler ce qui suit:
la source
vous pouvez faire cela beaucoup plus facilement avec css uniquement, par exemple: mode sass
et vous avez des points de suspension;)
la source
Tout comme @acSlater, je n'ai pas trouvé quelque chose pour ce dont j'avais besoin, alors j'ai roulé le mien. Partage au cas où quelqu'un d'autre pourrait utiliser:
Méthode: Usage: Code et lien de démonstration: https://gist.github.com/cemerson/10368014la source
la source