【发布时间】:2019-12-20 01:28:59
【问题描述】:
我正在尝试为图像及其容器的伪元素创建过渡,但由于某种原因,这些过渡似乎彼此不同步,导致伪元素达到opacity: 0在图像之前状态。
我尝试了各种样式规则组合,但我从未成功完成 ease-in-out 转换以正常工作。
以下是当前代码的一些上下文:图像被有意填充,以提供更好的视觉效果(居中)其内容。将始终保证将使用的图像具有白色背景。这就是为什么我使用具有白色背景颜色的伪元素来填充图像未覆盖的垂直空间。
背景图像应占容器的整个宽度/高度,并且不能保证其背景为白色。
想要的效果是伪元素和图像同时到达opacity: 0,使其看起来像一个单独的元素。
我还在考虑使用::after 伪元素来提供“加载骨架”,而不会从服务器检索到图像,但现在这不是问题。
这是代码和相应的小提琴:https://jsfiddle.net/rjk2z31d/1/
*,
*::before,
*::after {
box-sizing: border-box;
}
.box {
width: 248px;
height: 320px;
}
.image-box {
position: relative;
display: block;
background-repeat: no-repeat;
background-size: cover;
line-height: 0;
background-color: #FFFFFF;
&::before {
display: block;
content: "";
width: 100%;
padding-top: (100% + (100% / 3));
}
img {
z-index: 1;
position: absolute;
top: 50%;
left: 0;
width: 100%;
transform: translate3d(0, -50%, 0);
padding: 16px 16px;
}
&::before, img {
background-color: #FFFFFF;
opacity: 1;
transition: all 1.5s ease-in-out;
}
&:hover {
&::before, img {
opacity: 0;
}
}
}
<div class="box">
<div class="image-box" style="background-image: url('https://via.placeholder.com/248x320/FF0000/000000?text=Background')">
<img src="https://via.placeholder.com/248x320/FFFFFF/000000?text=Image">
</div>
</div>
【问题讨论】:
标签: html css css-transitions pseudo-element