2015-12-06 9 views
6

Biorąc pod uwagę ten prosty układ:Dziwne zachowanie z obrazem w środku unosił pojemnik

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 i Opera poprawnie wyświetlić go tak:

enter image description here

IE11 nieprawidłowo pakuje tekst 400 pikseli w prawo, na podstawie naturalnej szerokości obrazu:

enter image description here


Issue # 2

Jak zwiększyć wysokość tego okna, tekst powinien st ay przyklejone po prawej stronie obrazu. Działa to poprawnie w Firefoksie.

Jednak tekst zachodzi na obraz w Chrome i Opera:

enter image description here


Zobacz zachowanie w tym Fiddle.

Pytanie: Czy istnieje styl, który mogę dodać, aby wszystkie przeglądarki zachowywały się konsekwentnie?

[Uwaga: Odkryłem to podczas pracy nad this question. Myślałem, że mam rozwiązanie, dopóki nie zorientowałem się, że nie reaguje na żadną przeglądarkę z wyjątkiem Firefoksa.]

+1

Czy jest możliwość, aby użyć ' obraz tła zamiast rzeczywistego obrazu? – Cheslab

+0

@Chellab, ponieważ nie jest to mój kod, nie jestem pewien, czy to opcja. Ale czy to rozwiązuje problem? –

+0

Jeśli nie masz obrazu, to IE nie będzie znać jego oryginalnej szerokości i powinien umieścić tekst zaraz po obrazie. Ma to jedną wadę - musisz ustawić szerokość na '.imgContainer', co moim zdaniem rozwiąże problem sam. Właśnie próbowałem dodać 'width: 20vh;' do tego div i IE teraz wyświetlają wszystko poprawnie – Cheslab

Odpowiedz

1

Poniższe mogą załatwić sprawę.

Zamiast korzystać z float, proponuję użyć tabel CSS.

Zastosuj display: table do .container i ustaw wysokość w razie potrzeby.

Dla dwóch elementów podrzędnych, .imgContainer i .panel, należy użyć display: table-cell i dziedziczyć wysokość z bloku nadrzędnego.

myślę, że to jest całkiem blisko tego, co trzeba, powinien działać we wszystkich przeglądarkach (ale nie sprawdzałem ...)

.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 Proszę sprawdzić aktualizację, całkiem blisko, myślę. –

+0

To naprawia to we wszystkich przeglądarkach! Pomyślałem, że 'height: 100%' zrobiłoby to samo co 'height: inherit', ale nie w tej sytuacji. Ciekawy! –