如何将css过渡应用于初始宽度设置为auto
但是,如果我将初始宽度设置为某个数字,例如50px,那么过渡就会开始。
这是 - DEMO
.container {
width: 200px;
background: red;
height: 50px;
}
.child1 {
background: black;
display: inline-block;
}
.child2 {
background: blue;
display: inline-block;
width: auto; /* this does not work */
/* width: 50px; */ /* this works */
float: right;
-webkit-transition: width 2s;
transition: width 2s;
}
.child2:hover {
width: 100px;
}
答案 0 :(得分:3)
min-width
会占用内部元素width
.container {
width: 200px;
background: red;
height: 50px;
}
.child1 {
background: black;
display: inline-block;
}
.child2 {
background: blue;
display: inline-block;
width: auto;
min-width: 0px; /*changed width to min-width */
float: right;
-webkit-transition: 2s;
transition: 2s;
}
.child2:hover {
min-width: 100px; /* changed from width to min-width */
}
<div class="container">
<div class="child1">
child1
</div>
<div class="child2">
child2
</div>
</div>
答案 1 :(得分:2)
而不是动画def apply_initial(idx, obj, prop):
initial[idx] = getattr(obj, prop, u'')
尝试动画width
:
min-width
.container {
width: 200px;
background: red;
height: 50px;
}
.child1 {
background: black;
display: inline-block;
}
.child2 {
background: blue;
display: inline-block;
width: auto;
/* this does not work */
min-width: 0;
float: right;
-webkit-transition: all .5s;
transition: all .5s;
padding-left: 0;
}
.child2:hover {
min-width: 100px;
}
答案 2 :(得分:1)
由于构建动画的方式,无法从auto
到Npx
运行动画。
例如,拿这个CSS:
.block {
width: 100px;
transition: width 2s;
}
.block:hover {
width: 200px;
}
这将与以下代码完全相同:
@keyframes animate-width {
from { width: 100px; }
to { width: 200px; }
}
.block {
width: 100px;
}
.block:hover {
animate: animate-width 2s;
}
从动画关键帧可以看出,定义了起点和终点,以便能够创建适当的动画。
为了运行动画,必须有一个开始和端点可供浏览器的CSS渲染引擎正常运行。 auto
永远不会是一个起点,因为它是一个动态分配的值。
您可以通过在加载页面后设置适当的宽度来使用Javascript来完成此工作。对于块元素,将宽度设置为100%而不是auto
也可以作为解决方案。