2014-12-17 10 views
5

Mam prosty przykład, w którym zewnętrzny DIV zawiera wewnętrzny DIV, który ma
display: inline-block;.
Ponieważ ustawiłem wysokość wewnętrznego div, spodziewam się, że zewnętrzny div przybrał taką samą wysokość jak wewnętrzny div. Zamiast tego, zewnętrzny div jest nieco wyższy, jak widać z skrzypiec. Pytanie: Dlaczego tak się dzieje i jak mogę "wypełnić" zewnętrzny div bez wyraźnego określenia jego wysokości?
Moim celem jest, aby zewnętrzny div rozwinął się i skurczył w zależności od wysokości wewnętrznej.Wydajność elementu z blokiem śródliniowym

.outer { 
 
    background-color: red; 
 
} 
 
.inner { 
 
    display: inline-block; 
 
    width: 480px; 
 
    height: 140px; 
 
    background-color: green; 
 
}
<div class="outer"> 
 
    <div class="inner"></div> 
 
</div>

+0

ruch bloku wyświetlacz rolki od wewnętrznej do zewnętrznej div – BeNdErR

Odpowiedz

8

Twój .inner div ma display: inline-block. Oznacza to, że potrzebuje on wbudowanego kontekstu formatowania. Układ Inline produkuje struts, dzięki czemu miejsce dla spekulantów. Można zobaczyć, jak to pasuje jeśli umieścić znak obok elementu .inner: http://jsfiddle.net/bs14zzeb/6/

Domyślna vertical-align jest mieć dolną krawędź inline-block pole pokryte z linii bazowej otaczającego tekstu. Nawet jeśli nie ma otaczającego tekstu, układ silnika wciąż musi zrobić miejsce dla całego wiersza tekstu.

Dlatego te odpowiedzi sugerują, że grasz z właściwością vertical-align. Ustawienie go na vertical-align: top, jak sugeruje jedna odpowiedź, mówi silnikowi układu, aby wyrównał górną krawędź pola inline-block z górną krawędzią ramki liniowej. Tutaj, ponieważ wysokość linii jest mniejsza niż 140 pikseli, pozbędzie się dodatkowej przestrzeni na dole. Ale jeśli wysokość linii jest wyższy niż ten, nadal będziesz mieć dodatkową przestrzeń pod spodem: http://jsfiddle.net/bs14zzeb/9/

+0

Dokładnie! Kocham to! –

+0

Powiązane informacje i sugestie dotyczące unikania dodatkowego wzrostu: http://stackoverflow.com/a/20107222/1173555 –

2

Domyślna pionowe wyrównanie elementów inline jest bazowy, więc trzeba go ustawić do góry lub środkowy:

.outer { 
 
    background-color: red; 
 
} 
 
.inner { 
 
    display: inline-block; 
 
    width: 480px; 
 
    height: 140px; 
 
    background-color: green; 
 
    vertical-align:top; 
 
}
<div class="outer"> 
 
    <div class="inner"></div> 
 
</div>

1

To dlatego, że #inner ma właściwość wyświetlacza ustawionej na inline-block. Aby to naprawić, zmień ekran na block lub ustaw właściwość vertical-align na top.

display: inline-block:

.outer { 
 
    background-color: red; 
 
} 
 
.inner { 
 
    width: 480px; 
 
    height: 140px; 
 
    background-color: green; 
 
}
<div class="outer"> 
 
    <div class="inner"></div> 
 
</div>

vertical-align: 0:

.outer { 
 
    background-color: red; 
 
} 
 
.inner { 
 
    display: inline-block; 
 
    vertical-align: top; 
 
    width: 480px; 
 
    height: 140px; 
 
    background-color: green; 
 
}
<div class="outer"> 
 
    <div class="inner"></div> 
 
</div>

Powiązane problemy