Tronquer de longues ficelles avec CSS: faisable?

y a-t-il un bon moyen de tronquer le texte avec du HTML et du CSS, de sorte que le contenu dynamique puisse s'insérer dans une disposition fixe en largeur et en hauteur?

j'ai tronqué le côté du serveur par" 151950920 largeur "logique (c.-à-d. un nombre aveuglément deviné de caractères), mais comme un 'w' est plus large qu'un 'i' cela tend à être sous-optimal, et me demande également de deviner (et de continuer à peaufiner) le nombre de caractères pour chaque Largeur fixe. Idéalement, la troncature serait se produisent dans le navigateur, qui connaît la physique "largeur 151960920" du texte rendu.

J'ai trouvé QU'IE a une propriété text-overflow: ellipsis qui fait exactement ce que je veux, mais j'ai besoin que ce soit cross-browser. Cette propriété semble être (quelque peu?) standard mais N'est pas supporté par Firefox. J'ai trouvé divers workarounds basé sur overflow: hidden , mais ils soit ne montrent pas de ellipse (je veux que l'utilisateur sache que le contenu a été tronqué), ou l'afficher tout le temps (même si le contenu n'a pas été tronqué).

quelqu'un aurait-il un bon moyen de montage de texte dynamique dans une disposition fixe, ou est côté serveur troncation de largeur logique aussi bon que je vais devenir maintenant?

208
demandé sur Community 2009-04-29 16:40:44

7 réponses

Update: text-overflow: ellipsis est maintenant pris en charge à partir de Firefox 7 (sorti le 27 septembre 2011). Yay!!! Ma réponse originale est un document historique.

Justin Maxwell a la solution cross browser CSS. Il ne vient avec l'inconvénient cependant de ne pas permettre le texte à être sélectionné dans Firefox. Consultez son billet d'invité sur le blog de Matt Snider pour tous les détails sur la façon dont cela fonctionne.

notez que cette technique empêche également la mise à jour du contenu du noeud en JavaScript en utilisant la propriété innerHTML dans Firefox. Voir la fin de ce post pour une solution de contournement.

CSS

.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
    -moz-binding: url('assets/xml/ellipsis.xml#ellipsis');
}

ellipsis.xml contenu du fichier

<?xml version="1.0"?>
<bindings
  xmlns="http://www.mozilla.org/xbl"
  xmlns:xbl="http://www.mozilla.org/xbl"
  xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
    <binding id="ellipsis">
        <content>
            <xul:window>
                <xul:description crop="end" xbl:inherits="value=xbl:text"><children/></xul:description>
            </xul:window>
        </content>
    </binding>
</bindings>

mise à Jour de contenu du nœud

pour mettre À jour le contenu d'un noeud d'une manière qui fonctionne dans Firefox utiliser ce qui suit:

var replaceEllipsis(node, content) {
    node.innerHTML = content;
    // use your favorite framework to detect the gecko browser
    if (YAHOO.env.ua.gecko) {
        var pnode = node.parentNode,
            newNode = node.cloneNode(true);

        pnode.replaceChild(newNode, node);
    }
};

Voir Matt Snider post pour une explication de la façon dont cela fonctionne .

186
répondu Simon Lieschke 2011-09-28 07:26:41

2014 Mars: tronquer les chaînes longues avec CSS: une nouvelle réponse avec un accent sur le soutien du navigateur

Démo sur http://jsbin.com/leyukama/1 / (j'utilise jsbin car il supporte L'ancienne version de IE).

<style type="text/css">
    span {
        display: inline-block;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;     /** IE6+, Firefox 7+, Opera 11+, Chrome, Safari **/
        -o-text-overflow: ellipsis;  /** Opera 9 & 10 **/
        width: 370px; /* note that this width will have to be smaller to see the effect */
    }
</style>

<span>Some very long text that should be cut off at some point coz it's a bit too long and the text overflow ellipsis feature is used</span>

la propriété CSS-ms-text-overflow n'est pas nécessaire: c'est un synonyme de la propriété CSS text-overflow, mais les versions de IE de 6 à 11 supportent déjà la propriété CSS text-overflow.

testé avec succès (sur Browserstack.com) sur Windows OS, pour les navigateurs web:

  • IE6 à IE11
  • Opéra 10.6, Opéra 11.1, Opéra 15.0, Opéra 20.0
  • Chrome 14, Chrome 20, Chrome 25
  • Safari 4.0, Safari 5.0, Safari 5.1
  • Firefox 7.0, Firefox 15

Firefox: comme l'a souligné Simon Lieschke (en une autre réponse), Firefox ne supporte la propriété CSS De text-overflow qu'à partir de Firefox 7 (publié le 27 septembre 2011).

j'ai vérifié deux fois ce comportement sur Firefox 3.0 et Firefox 6.0 (le débordement de texte n'est pas supporté).

D'autres tests sur les navigateurs Web Mac OS seraient nécessaires.

Note: Vous pouvez afficher une infobulle sur le curseur de la souris lorsqu'une ellipse est appliquée, cela peut être fait via javascript, voir ces questions: HTML text-overflow points de suspension "détection de 151970920" et HTML - comment puis-je afficher les info-bulle UNIQUEMENT lorsque le bouton de sélection est activé

ressources:

42
répondu Adrien Be 2017-05-23 11:46:36

si vous êtes D'accord avec une solution JavaScript, il y a un plug-in jQuery pour le faire de manière transversale-voir http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for-firefox-via-jquery/

19
répondu RichieHindle 2014-01-29 22:03:18

OK, Firefox 7 implémente text-overflow: ellipsis ainsi que text-overflow: "string" . La version finale est prévue pour 2011-09-27.

7
répondu j.j. 2011-07-09 16:10:52

une autre solution au problème pourrait être l'ensemble suivant de règles CSS:

.ellipsis{
 white-space:nowrap;
 overflow:hidden;
}

.ellipsis:after{
  content:'...';
}

le seul inconvénient du CSS ci-dessus est qu'il ajouterait le"..."que le texte déborde le conteneur ou non. Néanmoins, si vous avez un cas où vous avez un tas d'éléments et que vous êtes sûr que le contenu de débordement, ce serait un simple ensemble de règles.

mes deux cents. Chapeau bas à la technique originale de Justin Maxwell

5
répondu Rajat 2010-04-09 23:59:04

Pour référence, voici un lien vers le "bug" de suivi text-overflow: ellipsis soutien dans Firefox . On dirait que Firefox est le seul navigateur majeur qui ne supporte pas une solution natif CSS.

1
répondu Sam Stokes 2009-07-09 17:19:14
.truncate {
  width: 250px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
0
répondu Pankaj Mandale 2016-01-11 12:47:10