2015-12-06 7 views
6

Dato questo layout semplice:Strano comportamento con l'immagine all'interno galleggiava contenitore

HTML

<div class="container"> 
    <div class="imgContainer"> 
    <img src="http://placehold.it/400x400"> 
    </div> 
    <div> 
    This should always stay to the right of the image. 
    </div> 
</div> 

CSS

.container { 
    height: 20vh; 
} 

.imgContainer { 
    float: left; 
    height: 100%; 
} 

img { 
    height: 100%; 
} 


Issue # 1

Chrome, Firefox e Opera visualizza correttamente in questo modo:

enter image description here

IE11 pone in modo non corretto il testo 400 pixel a destra, in base alla larghezza naturale dell'immagine:

enter image description here


Issue # 2

Come si aumenta l'altezza della finestra, il testo dovrebbe st incollati alla destra dell'immagine. Funziona correttamente in Firefox.

Tuttavia, il testo si sovrappone l'immagine in Chrome e Opera:

enter image description here


vedere il comportamento in questo Fiddle.

Domanda: C'è uno stile che posso aggiungere che farà sì che tutti i browser si comportino in modo coerente?

[Nota: l'ho scoperto mentre lavoravo su this question. Ho pensato di avere una soluzione, fino a quando ho capito che non era reattivo in nessun browser tranne Firefox.]

+1

E 'la possibilità di utilizzare ' background-image' invece dell'immagine attuale? – Cheslab

+0

@Cheslab, poiché questo non è il mio codice, non sono sicuro che sia un'opzione. Ma questo risolve il problema? –

+0

Se non si dispone di un'immagine, IE non riconoscerà la sua larghezza originale e dovrebbe inserire il testo subito dopo l'immagine. Questo ha uno svantaggio: devi impostare la larghezza su ".imgContainer" che credo risolverà il problema da solo. Ho appena provato ad aggiungere 'width: 20vh;' a questo div e IE ora visualizza tutto correttamente – Cheslab

risposta

1

Il seguente potrebbe fare il trucco.

Invece di utilizzare float, suggerirei di utilizzare le tabelle CSS.

Applicare display: table a .container e impostare l'altezza secondo necessità.

Per i due elementi figlio, .imgContainer e .panel, utilizzare display: table-cell e ereditare l'altezza dal blocco padre.

Penso che questo sia abbastanza vicino a quello che ti serve, dovrebbe funzionare in tutti i browser (ma non ho controllato ...)

.container { 
 
    height: 20vh; 
 
    display: table; 
 
} 
 
.imgContainer, .panel { 
 
    display: table-cell; 
 
    height: inherit; 
 
    vertical-align: top; 
 
} 
 
img { 
 
    vertical-align:top; 
 
    height: inherit; 
 
}
<div class="container"> 
 
    <div class="imgContainer"> 
 
    <img src="http://placehold.it/400x400"> 
 
    </div> 
 
    <div class="panel"> 
 
    This should always stay to the right of the image. 
 
    </div> 
 
</div>

+0

@RickHitchcock Si prega di controllare l'aggiornamento, piuttosto vicino penso. –

+0

Che lo corregge in tutti i browser! Avrei pensato 'altezza: 100%' farebbe la stessa cosa di 'altezza: eredita', ma non in questa situazione. Interessante! –