2010-12-10 8 views
20

Ich brauche Text innerhalb eines div zu erhalten und zu wickeln. Bis jetzt habe ich es schwer, eine Lösung zu finden. Die beste Lösung, die ich gefunden habe, funktioniert nicht für alle Browser.Browserkompatibler Zeilenumbruch und Leerzeichen: vor?

Folgendes funktioniert in Chrome und IE6 +, aber in Firefox ist der Text nicht umwickelt.

Ich habe festgestellt, dass aus irgendeinem Grund der Text nicht in Firefox mit white-Space: pre. Und -moz-pre-wrap funktioniert nicht in Firefox 3.5 (why ??), nur vor dem Wrap. Aber wenn ich Pre-Wrap zu der Liste hinzufügen, funktionieren IE 6 und 7 nicht. Sehr frustrierend.

Der Code:

.introsub { 
    position: relative; 
    top: 30px; 
    left: 25px; 
    width: 550px; 
    font-weight: normal; 
    line-height: 1.5em; 
    overflow: auto; 
    margin: 0; 
    padding: 1.5em; 
    white-space: pre; 
    word-wrap: break-word; 
} 
+0

Wird der Text nicht automatisch standardmäßig umgebrochen? Können Sie mir einen Beispielcode zeigen? – PeeHaa

+0

Ich dachte, dass es sein würde, aber es ist nicht. .introsub { Position: relativ; oben: 30px; links: 25px; Breite: 550px; Schriftgewicht: normal; Zeilenhöhe: 1.5em; Überlauf: Auto; Rand: 0; Polsterung: 1.5em; Leerraum: vor; Wortumbruch: Bruchwort; } – Logan

+0

Ausgabeansicht auf Codeplex scheint darunter zu leiden. – SoonDead

Antwort

25

Die CSS3-Eigenschaften funktionieren nicht immer, wie wir sie möchten :) arbeiten. Noch sehe ich keinen Punkt in Mischen white-space:pre und word-wrap:break-word.

Ersteres wird den Text nur dann umbrechen, wenn ein <br />-Tag gefunden wird. Der zweite wird das Gegenteil tun: die Wörter brechen, wann immer es notwendig ist, sogar in der Mitte eines Wortes. Sie scheinen im Widerspruch zu sein, und die naheliegendsten Antworten, warum verschiedene Browser reagieren unterschiedlich auf diese Eigenschaften ist, dass

  • sie eine der beiden Eigenschaften unterstützen
  • , da sie in Konflikt sind, der Vorrang ist nicht definiert oder anders in jedem Browser

(Ich kann nicht sicher sein, obwohl, ich bin nicht wirklich ein Experte hier).

Ich schlage vor, Sie betrachten this und this genauer und entscheiden dann, was in Ihrem speziellen Fall verwendet werden sollte.

[EDIT]

Sie wollen könnte dies versuchen (sollte in allen Browsern):

white-space: -moz-pre-wrap; /* Firefox */ 
white-space: -pre-wrap; /* ancient Opera */ 
white-space: -o-pre-wrap; /* newer Opera */ 
white-space: pre-wrap; /* Chrome; W3C standard */ 
word-wrap: break-word; /* IE */ 

ich nicht getestet, aber ich glaube, es sollte den Trick für Sie tun.

+0

Was ist Ihre Lösung für alle Browser um Word-Wrap? Ich habe viele verschiedene Kombinationen ausprobiert, aber das ist das einzige, das ich gefunden habe, würde mit den meisten Browsern funktionieren (außer Firefox). Aber ich brauche auch Firefox, um zu arbeiten. Wenn ich kein Word-Wrap habe: Break-Word, IE6 & 7 wird nicht funktionieren. Aber ich kann Pre-Wrap nicht verwenden, das funktioniert in Firefox 3.5 b/c funktioniert auch nicht in IE6 oder 7. – Logan

+0

Überprüfen Sie die Bearbeitung :) – mingos

+0

Leider hatte ich das auch versucht, aber es funktioniert nicht in IE6 oder IE7. Wirklich, ich würde mich nur freuen, wenn es in diesen beiden UND Firefox (die anderen Browser sind nicht so wichtig) funktioniert, aber bis jetzt habe ich keine Lösung gefunden. : [ – Logan

14

Ich weiß, dass dies ein sehr altes Problem ist, aber da ich gerade darin gerannt bin, verspüre ich den Drang zu antworten.

Meine Lösung wäre:

Verwendung white-space: pre-wrap; wie es fast die gleiche wie white-space: pre; ist, kommt noch hinzu, Zeilenumbrüchen. (Referenz: http://www.quirksmode.org/css/whitespace.html)

Dann würde ich ziele speziell alten dh mit entweder bedingten Kommentaren (Referenz: http://www.quirksmode.org/css/condcom.html) oder mit Browser-spezifischem CSS-Hacks (http://paulirish.com/2009/browser-specific-css-hacks/).

Ein Beispiel für die zweite Methode:

.introsub { 
    position: relative; 
    top: 30px; 
    left: 25px; 
    width: 550px; 
    font-weight: normal; 
    line-height: 1.5em; 
    overflow: auto; 
    margin: 0; 
    padding: 1.5em; 
    white-space: pre-wrap; 
    word-wrap: break-word; 
} 

/* IE6 and below */ 
* html .introsub { white-space: pre } 

/* IE7 */ 
*:first-child+html .introsub { white-space: pre } 

Dies wird genug sein, um es zu zwingen, zu wickeln.

Verwandte Themen