Ich habe eine Webseite mit einem elastischen Layout, dessen Breite sich ändert, wenn die Größe des Browserfensters geändert wird.
In diesem Layout gibt es Überschriften ( h2
) mit variabler Länge (Überschriften aus Blogposts, über die ich keine Kontrolle habe). Derzeit sind sie - wenn sie breiter als das Fenster sind - in zwei Zeilen unterteilt.
Gibt es eine elegante, getestete (browserübergreifende) Lösung - zum Beispiel mit jQuery -, die das innerHTML dieses Überschriften-Tags verkürzt und "..." hinzufügt, wenn der Text zu breit wäre, um in eine Zeile auf dem aktuellen Bildschirm zu passen? Behälterbreite?
Antworten:
Ich habe eine Lösung in FF3, Safari und IE6 + mit ein- und mehrzeiligem Text
jquery.ellipsis.js
quelle
Die folgende Nur-CSS-Lösung zum Abschneiden von Text in einer einzelnen Zeile funktioniert mit Ausnahme von Firefox 6.0 mit allen Browsern, die zum Zeitpunkt des Schreibens unter http://www.caniuse.com aufgeführt sind . Beachten Sie, dass JavaScript nicht erforderlich ist, es sei denn, Sie müssen das Umbrechen von mehrzeiligem Text oder früheren Versionen von Firefox unterstützen.
Wenn Sie Unterstützung für frühere Versionen von Firefox benötigen, lesen Sie meine Antwort auf diese andere Frage .
quelle
Ich habe diesen Code mit einer Reihe anderer Beiträge mit den folgenden Verbesserungen erstellt:
display: block
Stil , damit die Spannweiten funktionierenCSS:
jquery.ellipsis.js
quelle
Meine Antwort unterstützt nur einzeiligen Text. Schauen Sie sich den Kommentar von gfullam unten für die mehrzeilige Gabel an, sie sieht ziemlich vielversprechend aus.
Ich habe den Code von der ersten Antwort an einige Male umgeschrieben, und ich denke, dies sollte der schnellste sein.
Es findet zuerst eine "geschätzte" Textlänge und fügt dann ein Zeichen hinzu oder entfernt es, bis die Breite korrekt ist.
Die verwendete Logik ist unten dargestellt:
Nachdem eine "geschätzte" Textlänge gefunden wurde, werden Zeichen hinzugefügt oder entfernt, bis die gewünschte Breite erreicht ist.
Ich bin mir sicher, dass einige Anpassungen erforderlich sind, aber hier ist der Code:
quelle
Nur für den Fall, dass Sie 2013 hier landen - hier ist ein reiner CSS-Ansatz, den ich hier gefunden habe: http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
Es funktioniert gut.
quelle
text-overflow
funktioniert nicht mittextarea
Elementen (Stand 2015). Wenn Sie Unterstützung benötigentextarea
, können Sie dies erreichen, indem Sie die akzeptierte Antwort ändern oder diese Abzweigung verwenden .Ich habe ein wirklich cooles jQuery-Plugin für den Umgang mit allen Arten von Textauslassungen namens ThreeDots @ http://tpgblog.com/threedots erstellt
Es ist viel flexibler als die CSS-Ansätze und unterstützt viel fortgeschrittenere, anpassbare Verhaltensweisen und Interaktionen.
Genießen.
quelle
Ein flexibleres jQuery-Plugin, mit dem Sie ein Element nach den Auslassungspunkten (z. B. eine Schaltfläche "Mehr lesen") beibehalten und onWindowResize aktualisieren können. Es funktioniert auch um Text mit Markup:
http://dotdotdot.frebsite.nl
quelle
Das jQuery-Plugin für trunk8 unterstützt mehrere Zeilen und kann für das Kürzungssuffix ein beliebiges HTML verwenden, nicht nur Auslassungszeichen: https://github.com/rviscomi/trunk8
Demo hier: http://jrvis.com/trunk8/
quelle
Es gibt tatsächlich eine ziemlich einfache Möglichkeit, dies in CSS zu tun, indem die Tatsache ausgenutzt wird, dass der IE dies mit Nicht-Standards und FF-Unterstützung erweitert
:after
Sie können dies auch in JS tun wenn Sie möchten, indem Sie die scrollWidth des Ziels überprüfen und mit der Breite der Eltern vergleichen. Imho ist dies jedoch weniger robust.
Edit: das ist anscheinend weiter entwickelt als ich dachte. Möglicherweise wird bald CSS3-Unterstützung vorhanden sein, und Sie können einige unvollständige Erweiterungen ausprobieren.
Das letzte ist eine gute Lektüre.
quelle
Ich hatte kürzlich etwas Ähnliches für einen Kunden getan. Hier ist eine Version von dem, was ich für sie getan habe (Beispiel getestet in allen neuesten Browserversionen unter Win Vista). Nicht rundum perfekt, könnte aber ziemlich einfach angepasst werden.
Demo: http://enobrev.info/ellipsis/
Code:
quelle
Nun, eine einfache Lösung, die das "..." nicht ganz hinzufügt, aber verhindert, dass das <h2> in zwei Zeilen zerfällt, besteht darin, dieses Bit CSS hinzuzufügen:
Ich habe noch etwas darüber nachgedacht und mir diese Lösung ausgedacht. Sie müssen den Textinhalt Ihres h2-Tags mit einem anderen Tag (z. B. einer Spanne) umschließen (oder alternativ die h2s mit etwas umbrechen, das die angegebene Höhe hat) und dann Sie können diese Art von Javascript verwenden, um die nicht benötigten Wörter herauszufiltern:
quelle
Hier ist eine weitere JavaScript-Lösung. Funktioniert sehr gut und sehr schnell.
https://github.com/dobiatowski/jQuery.FastEllipsis
Getestet auf Chrome, FF, IE unter Windows und Mac.
quelle
Es gibt eine Lösung für mehrzeiligen Text mit reinem CSS. Es heißt
line-clamp
, funktioniert aber nur in Webkit-Browsern. Es gibt jedoch eine Möglichkeit, dies in allen modernen Browsern nachzuahmen (alles neuer als IE8). Außerdem funktioniert es nur auf festem Hintergrund, da Sie ein Hintergrundbild benötigen, um die letzten Wörter der letzten Zeile auszublenden. So geht's:Angesichts dieses HTML:
Hier ist das CSS:
ellipsis_bg.png ist ein Bild mit der gleichen Farbe Ihres Hintergrunds, das ungefähr 100 Pixel breit ist und die gleiche Höhe wie Ihre Linienhöhe hat.
Es ist nicht sehr hübsch, da Ihr Text möglicherweise in der Mitte eines Buchstabens abgeschnitten wird, aber in einigen Fällen kann es nützlich sein.
Referenz: http://www.css-101.org/articles/line-clamp/line-clamp_for_non_webkit-based_browsers.php
quelle
Reine CSS Mehrzeilige Ellipse für Textinhalte:
Bitte überprüfen Sie das Snippet für ein Live-Beispiel.
quelle
Dies ist ähnlich wie bei Alex, erfolgt jedoch in logarithmischer Zeit anstatt linear und verwendet einen maxHeight-Parameter.
quelle
Es gibt eine einfache jQuery-Lösung von Devon Govett :
https://gist.github.com/digulla/5796047
quelle
Ich habe Alex 'Funktion für die MooTools-Bibliothek umgeschrieben. Ich habe es ein wenig in Wortsprung geändert, anstatt die Auslassungspunkte in der Mitte eines Wortes hinzuzufügen.
quelle
Ich konnte kein Skript finden, das genau so funktionierte, wie ich es wollte, und mein eigenes für jQuery - einige Optionen, um mehr auf dem Weg zu machen :)
https://github.com/rmorse/AutoEllipsis
quelle
Ich war allerdings etwas überrascht vom Verhalten des CSS.
Es sei denn, ich habe die Breite für die Kontrolle angegeben, an die ich die Auslassungspunkte binden musste, hat meine Sache nicht unterstützt. Ist die Breite ein Muss, um hinzugefügt zu werden? Bitte setzen Sie Ihre Gedanken.
quelle
TUN SIE DIE ELLIPSIS NUR MIT CSS
* Dieser Code funktioniert in den meisten aktuellen Browsern. Wenn Sie Probleme mit Opera und IE haben (was Sie wahrscheinlich nicht tun werden), fügen Sie diese im folgenden Stil hinzu:
* Diese Funktion ist Teil von CSS3. Die vollständige Syntax lautet:
quelle
Hier ist eine nette Widget- / Plugin-Bibliothek mit integrierten Auslassungspunkten: http://www.codeitbetter.co.uk/widgets/ellipsis/ Alles, was Sie dazu tun müssen, ist, auf die Bibliothek zu verweisen und Folgendes aufzurufen:
quelle
Sie können dies viel einfacher nur mit CSS tun, zum Beispiel: Sass-Modus
und du hast Auslassungspunkte;)
quelle
Genau wie bei @acSlater konnte ich nichts für das finden, was ich brauchte, also rollte ich mein eigenes. Teilen für den Fall, dass jemand anderes Folgendes verwenden kann:
Methode: Verwendung: Code- und Demo-Link: https://gist.github.com/cemerson/10368014quelle
quelle