【发布时间】:2015-01-19 20:20:51
【问题描述】:
我正在尝试创建一个过渡,通过更改宽度、填充和边框,有效地“折叠”一个 div 和它包含的浮动元素。
我做了一些调查,你可以在这里看到: http://jsfiddle.net/p38b6ndb/1
要包含一个示例:
HTML:
<div>
<div class="section">
<div class="sub-section">label</div>
<div class="sub-section">field</div>
</div>
<div class="section collapsible">
<div class="sub-section">label</div>
<div class="sub-section">field</div>
</div>
<div class="section">
<div class="sub-section">label</div>
<div class="sub-section">field</div>
</div>
</div>
CSS:
.section {
float: left;
width: 25%;
}
.section.collapsible {
opacity: 1;
transition: opacity linear 1s, width linear 1s;
}
.section.collapsible.collapsed {
width: 0;
opacity: 0;
}
.sub-section {
width: 50%;
float: left;
height: 42px;
}
场景:第二部分应该折叠,第三部分与第一部分一起向左移动。
问题:如果我在折叠的 div 上有 padding 和/或 border,当折叠时宽度达到一定量时,div 会环绕,导致高度增加,向下推动后续元素。
- 我试过
box-sizing: border-box,但这有一个清晰的包装 效果也一样。 - 我尝试转换
padding和border-width以及width,但它仍然会包装。我可以尝试不同的 持续时间,但它仍然有一个奇怪的效果。 - 我试图忽略填充和边框,因为它们变得不透明,只是
添加
margin-left,但这不会影响高度和
'向下推'。 - 我可以固定高度,但我实际上希望高度是自动的 部分可以包含各种大小的内容。
如何在带有填充/边框元素的 div 上实现这种折叠过渡?
如果可以通过更新小提琴来证明答案,那将是非常受欢迎的。
【问题讨论】:
-
为什么不将字体大小也转换为 0? - jsfiddle.net/p38b6ndb/2
-
好主意,这很有效,不会导致内容被向下推。
标签: html css css-transitions