2013-09-03 11 views
5

mi hanno spesso un'immagine che ho disporre il testo intorno, e, talvolta, i testi avvolge goffamente, in questo modo:Come posso evitare gli orfani di testo HTML?

enter image description here

In HTML, l'immagine è flottato a sinistra e il testo segue semplicemente:

<p><img style="float:left;" src="/images/[image]" /></p> 
<p>This is my David Copperfield, <em>I was born</em> kind of bio.  For a more concise one, please see the <a href="/jenny/press-kit#bio">press kit</a>.</p> 
... 

Principalmente funziona, eccetto quando la lunghezza del testo capita semplicemente di scorrere oltre il fondo dell'immagine e tornare al margine sinistro e quando la quantità di testo non è abbastanza lunga da riempire più di una riga (in questo caso, è solo una parola). Quando ciò accade, sembra davvero male.

Quindi, c'è un modo per controllare il flusso del testo in modo che ciò non accada?

risposta

2

Che cosa si potrebbe fare è aggiungere overflow: hidden ai p tag in cui v'è il testo. Questo renderà tutto ciò che il testo che avvolge dopo l'immagine sarà in linea con la parte più grande. Ora, quando hai dei paragrafi grandi, questo può sembrare divertente, ma se i tuoi paragrafi sono abbastanza brevi questo dovrebbe aiutare.

Esempio: http://jsfiddle.net/8ZsKy/2/

alternativamente si può solo aggiungere una regola di classe e applicarlo al potenziale "problema" paragrafi.

p.wrap-inline { 
    overflow:hidden; 
} 

EDIT: jsfiddle aggiornato (oops)

+0

Ho provato ad applicarlo a tutti i tag p, ma questo ha costretto tutto sotto l'immagine. Applicarlo in modo selettivo ai paragrafi incriminati sembra funzionare, ma è un po 'ad-hoc, in quanto è necessario applicarlo manualmente, ma per ora posso conviverci. Ma perché l'overflow ha qualcosa a che fare con il layout e il flusso, in primo luogo? –

+1

Ho riscontrato questo problema anche quando l'immagine era in un tag 'p'. Quindi, se desideri applicarlo a tutti, assicurati che l'immagine non sia in uno. Quando si applica "overflow: hidden" in questo caso viene creato un "BFC" o un contesto di formattazione dei blocchi. Maggiori informazioni qui se sei estremamente interessato: http://stackoverflow.com/questions/6196725/how-does-the-css-block-formatting-context-work e http://colinaarts.com/articles/the- magic-of-trabocco-nascosto / – Don

-4
<img style="float:left; clear="both" src="/images/[image]" /> 
+3

Questo non è nemmeno valido. – Don

0

Questa domanda in realtà aveva fatto pensare, anche se in realtà è fastidioso a volte, in passato ho fissato problemi simili a questo regolando l'altezza della linea un po ',

line-height:20px; 

o regolare la dimensione reale dell'immagine un po 'più grande o più piccolo,

<img style="float:left;" src="/images/[image]" width="100" height="200" /> 

o alterare il tracciamento del testo

letter-spacing: 0.1em; 

o l'uso sillabazione (non mi piace o consiglio)

hyphens: auto; 

Tuttavia per quanto riguarda la mia conoscenza va non so di eventuali regole CSS per eliminare gli orfani di testo. Potrebbero esserci script, ma non ne ho mai sentito parlare e ho fatto un po 'di ricerche su di esso qualche tempo fa. Spero sia stato utile :)

+0

Ho potuto aggiustarlo con modifiche ad hoc all'HTML, ma sto cercando una soluzione che funzioni a livello globale, senza ottimizzare le singole situazioni. –

1

Ecco come funziona il floating. Se non lo desideri, non utilizzare float; puoi ad es. usa invece il posizionamento, in modo che il testo appaia come un blocco sulla destra dell'immagine.

Purtroppo non c'è modo di utilizzare il floating e la richiesta ad es. che l'ultima riga non dovrebbe essere breve. È possibile impedire che l'ultima parola appaia su una riga a sé stante utilizzando uno spazio senza interruzioni tra esso e la parola precedente, ad es. it&nbsp;will. E potresti estenderlo a un gruppo di parole brevi. Ma questo significherebbe solo che il gruppo appare su una linea a sé stante e la linea precedente è corrispondentemente più breve (e può quindi sembrare strana).

Se il testo è solo un po 'troppo lungo, è possibile modificare il rendering in modo che occupi meno spazio verticalmente, ad es. rimuovendo le linee vuote tra i paragrafi, anche se questo sarebbe un grande cambiamento di layout (anche se forse una buona):

p { margin: 0 } 
p + p { text-indent: 1.3em; } 
+0

Come utilizzeresti il ​​posizionamento senza dover eseguire manualmente il layout dell'intera pagina, ad esempio calcolare quali paragrafi devono andare con l'immagine e inserirli separatamente dagli altri paragrafi? Ciò sembra davvero disordinato e molto fragile, poiché il contenuto del testo cambia. –

+0

@JoshuaFrank, il posizionamento richiederebbe effettivamente il raggruppamento di testi in modo che un blocco di testo venga visualizzato a destra di un'immagine specifica. Se vuoi che il testo che scorre liberamente con le immagini fluttua a sinistra, allora temo che non puoi evitare il rischio rappresentato nella domanda –

Problemi correlati