2013-10-01 17 views
6

Próbuję ustalić, dlaczego Safari nie odczyta atrybutu maksymalnej wysokości swojego rodzica jako wysokości. Zarówno Chrome, jak i Firefox odczytają go poprawnie, ale Safari wydaje się zignorować maksymalny wzrost rodzica, a zamiast tego chwyta całą wysokość strony.Wysokość Safari 100% elementu wewnątrz elementu o maksymalnej wysokości

Widać to here

CSS:

body, html { 
    height: 100%; 
    margin: 0; 
} 
div { 
    height: 100%; 
    max-height: 300px; 
    width: 100px; 
} 
div span { 
    background: #f0f; 
    display: block; 
    height: 100%; 
} 

Markup:

<div> 
    <span></span> 
</div> 

Używam Safari 6.0.5 na OSX 10.8.5.

+0

Wygląda [ten błąd] (https://bugs.webkit.org/show_bug.cgi?id=26559) jest odpowiedzialny. Oto również [odpowiedź] (http://stackoverflow.com/a/8468131/1456376) na ten temat. Jedynym rozwiązaniem, które zadziałało dla mnie było dodanie 'div {position: absolute; } ', [spróbuj tutaj] (http://jsfiddle.net/nbVXN/). – insertusernamehere

+0

@insertusernametutaj Perfect. Nadal nienawidzę safari;) jeśli uznasz to za odpowiedź, zaakceptuję to. – Chad

Odpowiedz

19

Ten problem występuje z powodu zgłoszonego błędu w Webkit:

Bug 26559 - When a block's height is determined by min-height/max-height, children with percentage heights are sized incorrectly

To wydaje się być ustalona dla Chrome już, ale nie dla Safari.

Jedyne obejście zakaz JavaScript, który pracował dla mnie, jest przy użyciu pozycjonowania bezwzględnego od elementu nadrzędnego:

div {  
    position: absolute; 
} 

Demo pojawi

Try before buy

+1

Naprawiono również pozycjonowanie. Dzięki! – Chad

+0

@insertusernametutaj, ale co z przypadkiem, że chcesz zbudować dwa divy po drugim? weź kod HTML i skopiuj go, a następnie umieść skopiowany element div po orginalnym. czy widzisz kopię? ... – user2783091

0

podobny problem na Safari czy element nadrzędny używa właściwości flexbox - kontener nie zajmie 100% wysokości. Innym rozwiązaniem (oprócz position: absolute;) byłoby użyć vh jednostek (wysokość ekranu):

div { 
height: 100vh; 
} 
Powiązane problemy