我有一个绝对定位的div,我希望在悬停时慢慢增大其大小(5s过渡),以使其成为相对定位的div的“边界”:
<div class="rectangle">
<div class="background"></div>
<div class="content">blah</div>
</div>
样式(为了便于阅读,删除了供应商前缀):
.rectangle {
position: relative;
}
.background {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.content {
height: 800px;
width: 200px;
}
转换整个.background大小会导致不稳定的动画,但会出现一个均匀的边框:
.rectangle:hover .background {
width: calc(100% + 40px);
height: calc(100% + 40px);
top: -20px;
left: -20px;
right: -20px;
bottom: -20px;
transition: 5s linear all;
}
过渡边框是不稳定的动画,但是(显然)边框是均匀的
.rectangle:hover .content {
border: 20px solid red;
transition: 5s linear all;
}
转换变换比例是平滑,但会导致顶部和底部的“边框”变大,因为它是矩形:
.rectangle:hover .background {
transition: 5s transform;
transform: scale(1.1);
}
是否有任何方法获取变换比例以保持尺寸均匀,或以其他任何方式创建此效果?
答案 0 :(得分:1)
您可以尝试使用框阴影作为边框来实现平滑过渡。
.rectangle {
position: relative;
width: 300px;
height: 300px;
top: 100px;
left: 30%;
}
.background {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.background::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
box-shadow: 0 0 0 0px #000;
transition: 5s linear box-shadow;
}
.content {
height: 300px;
width: 200px;
}
.rectangle:hover .background::before {
box-shadow: 0 0 0 20px #000;
transition: 5s linear box-shadow;
}
<div class="rectangle">
<div class="background"></div>
<div class="content">blah</div>
</div>