Lösung für das Problem, dass englische Buchstaben in Firefox nicht umbrochen werden

Lösung für das Problem, dass englische Buchstaben in Firefox nicht umbrochen werden

Das Layout des Textes unterliegt je nach Sprache einigen Formatierungsanforderungen. Im vereinfachten Chinesisch werden beispielsweise Satzzeichen wie Kommas und Semikolons nicht am Zeilenanfang angezeigt. Im Englischen wird ein vollständiges Wort nicht über zwei Zeilen hinweg angezeigt. Der Browser zeigt Text nach ähnlichen Prinzipien an. Aufgrund der Breitenbeschränkung von Webseiten überschreiten fortlaufende, überlange Buchstaben, Zahlen oder Satzzeichen jedoch die Breitenbeschränkung des Bereichs, in dem sie sich befinden, und beeinträchtigen somit die visuelle Wirkung der Seite, wie in Beispiel 1 gezeigt. Dieses Problem tritt insbesondere dann auf, wenn Benutzereingabeinformationen angezeigt werden. Hier besprechen wir, wie sich das Problem lösen lässt.

Im CSS3-Entwurf werden der Textverarbeitung zwei neue Eigenschaften hinzugefügt, Word-Wrap und Word-Break, um dieses Problem zu lösen:

  1. {word-wrap:break-word;} : ermöglicht Zeilenumbrüche innerhalb von Wörtern gemäß den Textregeln asiatischer und nicht-asiatischer Sprachen und ermöglicht den Zeilenumbruch von Textzeilen in nicht-asiatischen Sprachen innerhalb eines beliebigen Wortes.
  2. {word-break:break-all;}: Der Inhalt wird innerhalb der Grenzen umbrochen und bei Bedarf werden auch Wortumbrüche vorgenommen.

Die folgenden Browser werden gängig unterstützt:

IE6/7 [1] Firefox 2/3 [2] Opera3+ Safari9.5+/Chrome
{Wortumbruch:Wortumbruch;} Das td-Element muss seine Breite festlegen, siehe Beispiel 4 und Beispiel 5 Wird nicht unterstützt Wird nicht unterstützt td-Element wird nicht unterstützt. Siehe Beispiel 4 und Beispiel 5
{Wortumbruch:alles umbrechen;} Kontinuierliche Symbole werden nicht unterstützt. Siehe Beispiel 3. Wird nicht unterstützt Wird nicht unterstützt Unterstützung
  • [1] Aus der CSS-Kompatibilität von MSDN und Internet Explorer können wir ersehen, dass IE8 die Eigenschaften für Zeilenumbruch und Worttrennung genauso unterstützt wie IE6 und IE7. Als ich jedoch IE8beta2 testete, stellte ich fest, dass es diese beiden Eigenschaften nicht unterstützt. Da sich IE8 noch in der Betaphase befindet und ich davon ausgehe, dass IE8 sie irgendwann unterstützen wird, ist es eine gute Idee, <meta content="IE=7" http-equiv="X-UA-Compatible" /> im Seitenkopf zu deklarieren, damit IE8 die Seite entsprechend IE7 interpretiert.
  • [2] Firefox 3.1 wird das Word-Wrap-Attribut unterstützen

Da {word-break:break-all;} die Lesbarkeit von Englisch und Zahlen erheblich reduziert und aufeinanderfolgende Symbole nicht umbricht, ist {word-wrap:break-word;} eine relativ gute Wahl.

Angesichts der schlechten Browserunterstützung müssen wir jedoch auf JavaScript zurückgreifen, um dieses Problem zu lösen. Das heißt, wenn der Browser die CSS-Lösung nicht unterstützt, fügen wir an der entsprechenden Stelle der fortlaufenden Zeichenfolge die Zeichen &#8203; ein (natürlich können Sie auch <wbr /> und &shy; verwenden. Informationen zur Unterstützung dieser drei Zeichen in Browsern finden Sie unter „Das wbr-Tag“ von ppk). Diese Zeichen werden beim Schreiben im Browser nicht angezeigt, führen jedoch zu einem Umbruch der langen Zeichenfolge. Der spezifische Implementierungscode lautet wie folgt:

 function fnBreakWordAll(o){
var o = o || {},
iWord = o.word || 13,
iRe = o.re || '[a-zA-Z0-9]',
bAll = o.all || false,
sClassName = o.className || 'word-break-all',
aEls = o.els || (function(){
var aEls = [],
aAllEls = document.getElementsByTagName('*'),
re = new RegExp('(?:^|\\s+)' + sClassName + '(?:\\s+|$)');
for(var i =0,iLen = aAllEls.length; i < iLen ; ++i){
if(re.test(aAllEls[i].className)){
aEls[aEls.length] = aAllEls[i];
}
}
return aEls;
})() || [],
fnBreakWord = function(oEl){
// 基于http://www.hedgerwow.com/360/dhtml/css-word-break.html修改
if(!oEl || oEl.nodeType !== 1){
return false;
}else if(oEl.currentStyle && typeof oEl.currentStyle.wordWrap==='string'){
breakWord = function(oEl){
oEl.runtimeStyle.wordWrap = 'break-word';
return true;
}
return breakWord(oEl);
}else if(document.createTreeWalker){
var trim = function (str) {
str = str.replace(/^\s\s*/, '');
var ws = /\s/,
i = str.length;
while (ws.test(str.charAt(--i)));
return str.slice(0, i + 1);
}
breakWord = function(oEl){
var dWalker=document.createTreeWalker(oEl,NodeFilter.SHOW_TEXT,null,false);
var node,s,c = String.fromCharCode('8203'),
//re = /([a-zA-Z0-9]{0,13})/;
re = new RegExp('('+ iRe +'{0,' + iWord + '})');
while (dWalker.nextNode()){
node = dWalker.currentNode;
s = trim(node.nodeValue).split(re).join(c);
node.nodeValue = s;
}
return true;
}
return breakWord(oEl);
}
};
for(var i=0,n=aEls.length; i<n; ++i){
var sUa = navigator.userAgent,
sTn = aEls[i].tagName.toLowerCase() ;
if((/Opera/).test(sUa) || (/Firefox/).test(sUa) || ((/KHTML/).test(sUa) &&
(sTn === 'td' || sTn === 'th')) || bAll){
fnBreakWord(aEls[i]);
}
}
}

Eine konkrete Anwendung finden Sie im Demonstrationsbeispiel.

Die Funktion fnWordBreakAll bietet einige benutzerdefinierte Parameter. Die Verwendung und Parameterbedeutungen sind wie folgt:

 fnWordBreakAll({word:15,re:'[\\w]',all:true});
Parameter Wert veranschaulichen
Wort Positive Ganzzahl, Standard ist 13 Wörter innerhalb dieser Zahl werden nicht eingefügt. „Ich glaube nicht, dass es viele Wörter mit mehr als 13 Buchstaben gibt. Dadurch wird sichergestellt, dass die meisten Wörter nicht aufgeteilt werden.“
Re Regulärer Ausdruck, Standard [a-zA-Z0-9] Der reguläre Ausdruck eines Wortes wird verwendet, um zu bestimmen, aus welchen Zeichen ein Wort besteht. Beachten Sie das Escapezeichen \
alle Boolescher Wert, Standardwert: false Legt fest, ob es in allen Browsern ausgeführt werden soll. Standardmäßig wird es in Opera und Firefox ausgeführt und in Safari, wenn die Klasse auf th oder td angewendet wird. Dies wird hauptsächlich verwendet, wenn .word-break-all nicht definiert ist, wodurch Stile zum IE hinzugefügt werden.
Klassenname Gültiger Klassenname, Standard ist „Word-break-all“ Der Attributname, der dem Element entspricht, das die Funktion ausführt

Der Kernteil dieser Funktion ist eine Modifikation von Hedger Wangs JavaScript-Lösung „Cross Browser Word Breaker“, die document.createTreeWalker und die Split-Methode verwendet, um in Nicht-IE-Browsern zwischen jedem Zeichen ein &#8203; einzufügen. Sie kann problemlos für rein chinesischen Text verwendet werden, aber wenn Sie sich die von ihm angeführten Beispiele genau ansehen, werden Sie feststellen, dass, wenn der Text Englisch oder Zahlen enthält, dies zwar das Zeilenumbruchproblem löst, den Text jedoch schwer lesbar macht und den Abstand zwischen den Zeichen vergrößert, weshalb ich die obigen Verbesserungen auf dieser Grundlage vorgenommen habe.

<<:  Lösung für den Fehler beim Mounten des freigegebenen Docker-Verzeichnisses unter Windows 10

>>:  TypeScript-Aufzählungstypen im Detail erklären

Artikel empfehlen

Zusammenfassung der neuen Verwendung von vi (vim) unter Linux

Ich benutze den vi-Editor seit mehreren Jahren, h...

Tutorial zur MySQL-Installation unter Linux (Binärdistribution)

Dieses Tutorial beschreibt Ihnen die detaillierte...

So legen Sie das Breitenattribut auf den Stil des Span-Tags fest

Wenn Sie das Breitenattribut direkt auf den Stil d...

HTML ungeordnete Liste Aufzählungspunkte mit Bildern CSS schreiben

Erstellen Sie eine HTML-Seite mit einer ungeordnet...

So implementieren Sie das Beobachtermuster in JavaScript

Inhaltsverzeichnis Überblick Anwendungsszenarien ...

Benutzerdefinierte Tabbar-Komponente für das WeChat-Applet

In diesem Artikel wird der spezifische Code der b...

Vue3 AST Parser-Quellcode-Analyse

Inhaltsverzeichnis 1. Generieren Sie einen abstra...

Vue implementiert nahtloses Scrollen von Listen

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung zum Anpassen des Stils von CSS-Bildlaufleisten

Dieser Artikel stellt den CSS-Bildlaufleistensele...

Allgemeine Linux-Befehle chmod zum Ändern der Dateiberechtigungen 777 und 754

Der folgende Befehl wird häufig verwendet: chmod ...

MySQL bedingte Abfrage und/oder Verwendung und Priorität Beispielanalyse

Dieser Artikel veranschaulicht anhand von Beispie...