Czy istnieje dobry sposób obcinania tekstu za pomocą zwykłego HTML i CSS, aby zawartość dynamiczna mieściła się w układzie o stałej szerokości i wysokości?
Obcinam po stronie serwera o szerokość logiczną (tj. Ślepo odgadniętą liczbę znaków), ale ponieważ „w” jest szersze niż „i”, to zwykle nie jest optymalne i wymaga ode mnie ponownego odgadnięcia ( i dostrajaj) liczbę znaków dla każdej stałej szerokości. Najlepiej byłoby, gdyby obcięcie nastąpiło w przeglądarce, która zna fizyczną szerokość renderowanego tekstu.
Przekonałem się, że IE ma text-overflow: ellipsis
właściwość, która robi dokładnie to, co chcę, ale potrzebuję tego, aby działała w różnych przeglądarkach. Ta właściwość wydaje się (nieco?) Standardowa, ale nie jest obsługiwana przez Firefox. Znalazłem różne obejścia na podstawie overflow: hidden
, ale albo nie wyświetlają wielokropka (chcę, aby użytkownik wiedział, że treść została obcięta), albo wyświetlają ją przez cały czas (nawet jeśli treść nie została obcięta).
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?
Odpowiedzi:
Aktualizacja:
text-overflow: ellipsis
jest teraz obsługiwana od wersji Firefox 7 (wydanej 27 września 2011 r.). Tak! Moja oryginalna odpowiedź jest historycznym zapisem.Justin Maxwell ma rozwiązanie CSS dla różnych przeglądarek. Ma jednak tę wadę, że nie pozwala na zaznaczanie tekstu w przeglądarce Firefox. Sprawdź jego post gościnny na blogu Matta Snidera, aby uzyskać szczegółowe 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
innerHTML
właściwości w Firefox. Obejście tego problemu znajduje się na końcu tego postu.CSS
ellipsis.xml
zawartość plikuAktualizowanie zawartości węzła
Aby zaktualizować zawartość węzła w sposób działający w przeglądarce Firefox:
Zobacz post Matta Snidera, aby uzyskać wyjaśnienie, jak to działa .
źródło
text-overflow
nie wskazuje wsparcia dlaoption
elementów (zobacz sekcję Dotyczy msdn.microsoft.com/en-us/library/ms531174(VS.85).aspx ).Marzec 2014: Obcinanie długich ciągó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).
Właściwość -ms-text-overflow CSS nie jest konieczna: jest to synonim właściwości CSS z przepełnieniem tekstu, ale wersje IE od 6 do 11 już obsługują właściwość CSS z przepełnieniem tekstu.
Pomyślnie przetestowano (na Browserstack.com) w systemie operacyjnym Windows dla przeglądarek internetowych:
Firefox: jak wskazał Simon Lieschke (w innej odpowiedzi), Firefox obsługuje tylko właściwość CSS z przepełnieniem tekstu od Firefox 7 (wydana 27 września 2011 r.).
Dokładnie sprawdziłem to zachowanie w Firefox 3.0 i Firefox 6.0 (przepełnienie tekstu nie jest obsługiwane).
Konieczne byłyby dalsze testy w przeglądarkach systemu Mac OS.
Uwaga: możesz pokazać etykietkę po najechaniu myszką po zastosowaniu elipsy, można to zrobić za pomocą javascript, zobacz następujące pytania: Wykrywanie elipsy z przepełnieniem tekstu HTML i HTML - jak mogę wyświetlać etykietkę TYLKO po aktywacji elipsy
Zasoby:
źródło
Jeśli nie masz nic przeciwko rozwiązaniu JavaScript, istnieje wtyczka jQuery, która robi to w przeglądarce internetowej - patrz http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for -firefox-via-jquery /
źródło
OK, Firefox 7 zaimplementowany,
text-overflow: ellipsis
jak równieżtext-overflow: "string"
. Ostateczne wydanie planowane jest na 27.09.2011.źródło
Innym rozwiązaniem tego problemu może być następujący zestaw reguł CSS:
Jedyną wadą powyższego CSS jest to, że dodaje „...” niezależnie od tego, czy tekst przepełnia kontener, czy nie. Jeśli jednak masz przypadek, w którym masz wiele elementów i masz pewność, że zawartość się przepełni, ten byłby prostszy zestaw reguł.
Moje dwa centy. Czapki z głów od oryginalnej techniki Justina Maxwella
źródło
position: absolute; right: 0;
(i nie zapomnijposition: relative
o prawdziwym elemencie, aby zadziałał). Nakłada się jednak na tekst, więc możesz też chcieć dodać kolor tła.