我有一個CSS滑動下拉菜單,可以在顯示的元素數量上有所不同。爲什麼使用高度的保證金最高百分比以及如何解決該問題?
我使用overflow: hidden
包裝和margin-top: -100%
來隱藏菜單,並使用margin-top: 0
進行CSS轉換以向下滑動動畫。
問題似乎是margin-top: -100%
似乎正在拾取任何父元素的顯式width
並忽略內容高度。
.outer {
overflow: hidden;
border: 10px solid red;
cursor: pointer;
}
.outer > .slide {
margin-top: -100%;
transition-property: margin-top;
transition-duration: 1s;
}
.outer:hover > .slide {
margin-top: 0;
}
.outer.bug {
width: 100px;
}
<div class="outer">
<div class="slide">
<ul>
<li>
Ayy
</li>
<li>
Bee
</li>
<li>
See
</li>
<li>
Dee
</li>
<li>
Eee
</li>
<li>
Eff
</li>
<li>
Gee
</li>
</ul>
</div>
</div>
<div class="outer bug">
<div class="slide">
<ul>
<li>
Ayy
</li>
<li>
Bee
</li>
<li>
See
</li>
<li>
Dee
</li>
<li>
Eee
</li>
<li>
Eff
</li>
<li>
Gee
</li>
</ul>
</div>
</div>
運行該代碼段,你應該看到兩個紅色箱子,鼠標移到要麼趴下菜單中的幻燈片。
問題是第二個盒子 - 唯一的區別是父母有width: 100px;
集合。
如果您檢查第二個框,您應該看到margin-top: -100%;
已計算爲-100像素。
事實上,對父div的任何顯式或繼承寬度將成爲負邊距。
我發現它的唯一方法是明確設置margin-top
與滑動菜單的高度相同,但涉及到DOM佈局和JS,我並不想爲每個菜單執行此操作。
這是一個瀏覽器如何處理margin-top負數百分比的錯誤? IE11,Chrome和FX似乎都以同樣的方式對待它。
有沒有更好的解決方法,不需要明確的高度計算和額外的Javascript?
這是利潤率如何在CSS定義。 'margin-top',如果給定一個百分比值,則指「包含塊的寬度」。 https://www.w3.org/TR/CSS22/box.html#propdef-margin –
@JamesDonnelly啊,所以它必須使用寬度(這是繼承)的高度(計算從一堆兒童+保證金),因爲這將是一個循環參考。那麼我的問題就變成了:沒有JS calcs的任何方式? – Keith
所以,你可以寫margin-top:-160%或更多,但是我不知道這是不是一件好事。如果使用_viewport height_,可能會更好。 –