Obcinanie długich łańcuchów za pomocą CSS: możliwe jeszcze?

Czy Jest jakiś dobry sposób na obcinanie tekstu za pomocą zwykłego HTML i CSS, aby dynamiczna zawartość mogła zmieścić się w układzie o stałej szerokości i wysokości?

Obcinałem po stronie serwera o logiczną Szerokość (tzn. ślepo odgadniętą liczbę znaków), ale ponieważ 'w' jest szersze niż 'i', to jest to raczej nieoptymalne, a także wymaga od mnie ponownego odgadnięcia (i ciągłego poprawiania) liczby znaków dla każdej stałej szerokości. Najlepiej, aby okrojenie odbywało się w przeglądarce, która zna fizyczna Szerokość renderowanego tekstu.

Odkryłem, że IE ma właściwość text-overflow: ellipsis, która robi dokładnie to, co chcę, ale potrzebuję tego, aby było między przeglądarkami. Ta właściwość wydaje się być (nieco?) standard , ale nie jest obsługiwany przez Firefoksa. Znalazłem różne obejścia oparte na overflow: hidden, ale albo nie wyświetlają wielokropka (chcę, aby użytkownik wiedział, że zawartość została obcięta), albo wyświetlają ją cały czas (nawet jeśli zawartość nie była okrojony).

Czy ktoś ma dobry sposób na dopasowanie dynamicznego tekstu w ustalonym układzie, czy też obcinanie po stronie serwera o logiczną szerokość jest tak dobre jak na razie?

Author: Community, 2009-04-29

7 answers

Aktualizacja: text-overflow: ellipsis jest teraz obsługiwane od Firefoksa 7 (wydany 27 września 2011). Yay! Moja pierwotna odpowiedź jest zapisem historycznym.

Justin Maxwell ma rozwiązanie cross browser CSS. Ma jednak minusa, ponieważ nie pozwala na wybranie tekstu w Firefoksie. Sprawdź [13]} jego gościnny post na blogu Matta Snidera , aby uzyskać pełne informacje na temat tego, jak to działa.

Uwaga Ta technika zapobiega również aktualizacji zawartości węzła w JavaScript przy użyciu właściwości innerHTML w Firefoksie. Zobacz koniec tego postu, aby znaleźć obejście.

CSS

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

ellipsis.xml Zawartość pliku

<?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>

Aktualizacja zawartości węzła

Aby zaktualizować zawartość węzła w sposób, który działa w Firefoksie, użyj następującego kodu:]}
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);
    }
};

Zobacz Matt Snider ' s post, aby wyjaśnić, jak to działa .

 186
Author: Simon Lieschke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-28 07:26:41

2014 Marzec: Obcinanie długich łańcuchów za pomocą CSS: Nowa odpowiedź z naciskiem na obsługę przeglądarki

Demo na http://jsbin.com/leyukama/1/ (używam jsbin, ponieważ obsługuje starą wersję 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>

Właściwość CSS-ms-text-overflow nie jest konieczna: jest synonimem właściwości CSS text-overflow, ale wersje IE od 6 do 11 już obsługują właściwość CSS text-overflow.

Pomyślnie przetestowany (na Browserstack.com) w systemie operacyjnym Windows, dla sieci przeglądarki:

  • IE6 do IE11
  • Opera 10.6, Opera 11.1, Opera 15.0, Opera 20.0
  • Chrome 14, Chrome 20, Chrome 25
  • Safari 4.0, Safari 5.0, Safari 5.1
  • Firefox 7.0, Firefox 15

Firefox: jak zauważył Simon Lieschke (w innej odpowiedzi), Firefox obsługuje tylko właściwość CSS text-overflow począwszy od Firefoksa 7 (wydany 27 września 2011).

Dwukrotnie sprawdzałem to zachowanie na Firefoksie 3.0 i Firefoksie 6.0 (text-overflow nie jest obsługiwany).

Potrzebne byłyby dalsze testy na przeglądarkach internetowych z systemem Mac OS.

Uwaga: możesz chcieć pokazać podpowiedź po najechaniu myszką, gdy zastosowana jest elipsa, można to zrobić za pomocą javascript, zobacz następujące pytania: HTML text-overflow ellipsis detection and HTML-How can I show tooltip ONLY when ellipsis is aktywowane

Zasoby:

 42
Author: Adrien Be,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:36

Jeśli nie masz nic przeciwko rozwiązaniu JavaScript, istnieje wtyczka jQuery, która robi to w sposób między przeglądarkowy-zobacz http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for-firefox-via-jquery/

 19
Author: RichieHindle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 22:03:18

OK, Firefox 7 zaimplementował text-overflow: ellipsis oraz text-overflow: "string". Premiera planowana jest na 2011-09-27.

 7
Author: j.j.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-09 16:10:52

Innym rozwiązaniem problemu może być następujący zestaw reguł CSS:

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

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

Jedyną wadą powyższego CSS jest to, że dodałby "..."niezależnie od tego, czy tekst-przepełnia kontener, czy nie. Mimo to, jeśli masz przypadek, w którym masz kilka elementów i jesteś pewien, że zawartość przepełni się, ten byłby prostszym zestawem reguł.

Moje dwa centy. Hats off to the original technique by Justin Maxwell
 5
Author: Rajat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-09 23:59:04

W przeglądarce Firefox można korzystać z funkcji śledzenia błędów w przeglądarce Firefox. Wygląda na to, że Firefox jest jedyną główną przeglądarką, która nie obsługuje natywnego rozwiązania CSS.

 1
Author: Sam Stokes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 17:19:14
.truncate {
  width: 250px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
 0
Author: Pankaj Mandale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 12:47:10