2013-01-23 14 views
22

Ho due div flottati, affiancati, con etichette p all'interno. Il testo all'interno dei tag p non va a capo e solo trabocca il contenitore, come si può vedere nel testo sotto le immagini:Testo non inserito nel tag p

Example:

mio HTML si presenta in questo modo:

 <div class="submenu"> 
      <h3>Destinations in Europe</h3> 
      <ul> 
       <li><a href="#">dfgdgdgfgdg</a></li> 
       <li><a href="#">dfgdgdgfgdg</a></li> 
       <li><a href="#">dfgdgdgfgdg</a></li> 
       <li><a href="#">dfgdgdgfgdg</a></li> 
      </ul> 
      <h3>Features</h3> 
      <div> 
       <img src="/assets/images/o/menu/city-feat-one.jpg" /> 
       <h4>blahblah</h4> 
       <p> 
        khkhjhjkhkyhkighkjfkhkiyhohhjkhjlhkluoiulohlhjhiououhljhiououhljhiououhljhiououhljhiououhljhiououhl 
       </p> 
      </div> 
      <div> 
       <img src="/assets/images/o/menu/city-feat-two.jpg" /> 
       <h4>blahblah</h4> 
       <p> 
        khkhjhjkhkyhkighkjfkhkiyhohhjkhjlhkluoiulohlhjhiououhl 
       </p> 
      </div>   
     </div> 

mio CSS :

#rb-menu-com li .submenu > div { 
    width:48%; 
    float:left; 
    position: relative; 
} 

#rb-menu-com li .submenu div p { 
    color:#fff; 
    margin: 0; 
    padding:0; 
    width:100%; 
    position: relative; 
} 

#rb-menu-com li .submenu div img { 
    border:1px solid #fff; 
} 

Qualcuno ha provato questo prima? Non ho !! Mi fa diventare matto!

risposta

38

il ritorno a capo si verifica solo quando c'è una pausa di parola.

Se si dispone di una "parola" lunga quanto quella, non c'è spazio per la sua interruzione.

La soluzione corretta è scrivere contenuto reale e non stringhe di caratteri senza senso. Se stai utilizzando contenuti generati dagli utenti, aggiungi un controllo per parole eccezionalmente lunghe e disabilitalo (oppure taglia una parte di esse per gli URL mantenendo tutto il contenuto in un link).

In alternativa, è possibile utilizzare word-break CSS property per dire al browser di interruzione di riga nel mezzo di parole.

p { word-break: break-all } 

(Nota browser support).

In alternativa, è possibile utilizzare overflow per troncare il testo se non si adatta al contenitore.

+0

Non esattamente vero. Ho avuto uno scenario in cui ho bisogno di visualizzare un codice iframe con un URL lungo. Ho dovuto usare 'word-break: break-all' –

+0

@ShahAbazKhan - Cosa non è vero? Che la soluzione per questo caso particolare, in cui il problema è causato dall'uso di contenuti segnaposto senza senso, non usi contenuti segnaposto senza senso? – Quentin

-2

aggiungi float: left property all'immagine.

#rb-menu-com li .submenu div img { 
    border:1px solid #fff; 
    float:left; 
} 
50

Assegna questo stile al tag <p>.

p { 
    word-break: break-all; 
    white-space: normal; 
} 
+4

Questo si romperà le singole parole sui loro personaggi. Potresti voler usare 'word-break: normal;' e dare al genitore un 'width'. –

+0

@MaraisRossouw Questo è lo stesso, che è stato accettato sopra. –

+2

white-space è ciò che fa la differenza qui. –

5

Questo perché si dispone di testo continuo, significa singola parola lunga senza spazio. Per rompere aggiungere word-break: break-all;

.submenu div p { 
    color:#fff; 
    margin: 0; 
    padding:0; 
    width:100%; 
    position: relative; word-break: break-all; background:red 
} 

DEMO

3

Questa non è una risposta alla domanda, ma come ho trovato questa pagina mentre cercavo una risposta ad un problema che avevo, voglio menzionare la soluzione che ho trovato in quanto mi è costato un sacco di tempo. Nella speranza questo sarà utile per gli altri:

Il problema era che il testo in un tag p > non si piegava nel div. Alla fine, ho aperto l'ispettore e ho notato che non c'era nessuna entità di spazio in rottura tra tutte le parole. Il mio editor, vi, mostrava solo spazi vuoti normali (alcuni chr invisibili, non so cosa) ma avevo copiato il testo da un documento PDF. La soluzione era copiare uno spazio vuoto da dentro e sostituirlo con uno spazio vuoto. vale a dire. :% s///g dove il bianco da sostituire è stato copiato dal testo incriminato. Problema risolto.

1

È possibile utilizzare il wordwrap per rompere le parole o una sequenza continua di caratteri se non si adatta a una riga in un contenitore.

word-wrap: break-word; 

Ciò manterrà linee di rottura in adeguati punti di interruzione a meno che una singola stringa di caratteri non si adatta su una linea, in tal caso si romperà.

JSFiddle

9

Per chiunque ancora lottando, assicurati di controllare e vedere se hai impostato un valore di line-height del carattere in questione: potrebbe essere rilevante il ritorno a capo automatico.

+0

Grazie per avermi aiutato a limitare questo problema! Non sono riuscito a ottenere un paragrafo assolutamente posizionato da avvolgere fino a quando non ho visto la tua risposta. Certo, l'altezza della riga del font era stata impostata su un elemento genitore e stava ostacolando qualsiasi altro tentativo di influenzare il ritorno a capo. –

1

EASY

p{ 
    word-wrap: break-word; 
} 
+2

Benvenuti in Stack Overflow. @Kevin Oonk's [answer] (http://stackoverflow.com/a/22047878/51242) del 2014 suggerisce già 'word-wrap: break-word;'. Assicurati che la tua risposta fornisca qualcosa di sostanziale e nuovo, e non consista solo di informazioni ripetute da risposte esistenti. – Bryan

Problemi correlati