У меня есть слайд вниз меню, которое может меняться в количестве отображаемых элементов.Почему процентная маржа с высотой и как я могу ее обойти?
Я использую обертку overflow: hidden
и margin-top: -100%
, чтобы скрыть меню, и переход CSS с margin-top: 0
, чтобы анимировать слайд вниз.
Проблема заключается в том, что 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>
Run, что фрагмент кода, и вы должны увидеть две красные коробки, курсор либо, чтобы получить слайд вниз меню.
Проблема заключается в втором поле - единственная разница в том, что у родителя установлен width: 100px;
.
Если вы проверите второй блок, вы увидите, что margin-top: -100%;
был рассчитан как -100px.
Фактически любая явная или унаследованная ширина против родительского div станет отрицательным.
Единственный способ, которым я нашел это, - явно указать margin-top
на то же, что и высота раздвижного меню, но это связано с макетом DOM и JS, которые я действительно не хочу делать для каждого меню ,
Это ошибка в том, как браузеры обрабатывают отрицательные проценты по краю? IE11, Chrome и FX все, похоже, относятся к нему одинаково.
Есть ли лучший способ обойти это, что не требует явного расчета высоты и дополнительного Javascript?
Это, как поля определены в CSS. 'margin-top', если задано процентное значение,« см. ширину содержащего блока ». https://www.w3.org/TR/CSS22/box.html#propdef-margin –
@JamesDonnelly Ah, поэтому он должен использовать ширину (которая унаследована) по высоте (вычисленная из стека детей + margin), поскольку это будет круговой ссылкой. Итак, мой вопрос становится: каким-либо образом вокруг него без JS calcs? – Keith
Итак, вы можете написать margin-top: -160% или более, но я не знаю, хорошая ли это паретика! возможно, это лучше, если использовать _viewport height_. –