2010-12-10 5 views
20

J'ai besoin de texte à l'intérieur d'une div pour être conservé et emballé. Jusqu'à présent, j'ai du mal à trouver une solution. La meilleure solution que j'ai pu trouver ne fonctionne pas pour tous les navigateurs.Enveloppe de mot de passe compatible avec le navigateur et espace: pré?

Les travaux suivants dans Chrome et IE6 +, mais dans Firefox le texte ne s'enroule pas.

white-space: pre; 
word-wrap: break-word; 

J'ai trouvé que pour une raison quelconque, le texte ne s'enroule pas dans Firefox avec un espace blanc: pré. Et -moz-pré-wrap ne fonctionne pas dans Firefox 3.5 (pourquoi ??), seulement pré-wrap. MAIS quand j'ajoute pré-wrap à la liste, IE 6 et 7 ne fonctionnent pas. Très frustrant.

Le 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

Le texte n'est-il pas automatiquement enveloppé par défaut? Pouvez-vous me montrer un exemple de code? – PeeHaa

+0

Je pensais que ce serait, mais ce n'est pas le cas. .introsub { position: relative; en haut: 30px; gauche: 25px; largeur: 550px; police-poids: normal; hauteur de ligne: 1,5em; dépassement de capacité: auto; marge: 0; rembourrage: 1,5em; espace blanc: pré; word-wrap: mot-clé; } – Logan

+0

La vue des problèmes sur le codeplex semble souffrir de cela. – SoonDead

Répondre

25

Les propriétés CSS3 ne fonctionnent pas toujours comme nous les aimons travailler :). Pourtant, je ne vois pas de point dans le mélange white-space:pre et word-wrap:break-word.

Le premier n'enveloppera pas le texte à moins qu'une balise <br /> ne soit rencontrée. Le second fera le contraire: cassez les mots quand c'est nécessaire, même au milieu d'un mot. Ils semblent être en conflit, et les réponses les plus évidentes pour lesquelles les différents navigateurs réagissent différemment à ces propriétés est que

  • ils soutiennent l'une des deux propriétés
  • car ils sont en conflit, la priorité est définie ou différent dans chaque navigateur

(Je ne peux pas être sûr cependant, je ne suis pas vraiment un expert ici).

Je vous suggère de regarder de plus près à this et this puis de décider de ce qui doit être utilisé dans votre cas particulier.

[EDIT]

Vous pouvez essayer (devrait fonctionner dans tous les navigateurs):

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 */ 

Je n'ai pas testé, mais je crois qu'il devrait faire l'affaire pour vous.

+0

Quelle est votre solution pour tous les navigateurs à Word Wrap? J'ai essayé beaucoup de combinaisons différentes, mais c'est la seule que j'ai trouvée fonctionnerait avec la plupart des navigateurs (à l'exception de Firefox). Mais j'ai besoin de Firefox pour travailler aussi. Si je n'ai pas de word-wrap: mot de passe, IE6 & 7 ne fonctionnera pas. Mais je ne peux pas utiliser pré-wrap, qui fonctionne dans Firefox 3.5 b/c il ne fonctionne pas non plus dans IE6 ou 7. – Logan

+0

Vérifiez la modification :) – mingos

+0

Malheureusement, j'avais essayé cela aussi, mais cela ne fonctionne pas dans IE6 ou IE7. Vraiment, je serais juste heureux si cela a fonctionné dans ces deux ET Firefox (les autres navigateurs ne sont pas si important), mais jusqu'à présent, je n'ai trouvé aucune solution. : [ – Logan

14

Je sais que c'est un très vieux problème, mais depuis que je viens de tomber dessus, je ressens le besoin de répondre.

Ma solution serait:

Utilisez white-space: pre-wrap; comme il est presque le même que white-space: pre;, juste ajoute linebreaks. (Référence: http://www.quirksmode.org/css/whitespace.html)

Alors je cibler spécifiquement vieux-à-dire soit avec des commentaires conditionnels (référence: http://www.quirksmode.org/css/condcom.html) ou avec hacks spécifiques du navigateur css (http://paulirish.com/2009/browser-specific-css-hacks/).

Un exemple pour la deuxième méthode:

.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 } 

Ce sera suffisant pour le forcer à envelopper.

Questions connexes