我有一个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_,可能会更好。 –