
完整范例代码
<template>
<div style="padding: 20px">
<img alt="我是一张苹果的照片">
</div>
</template>
<style scoped>
img {
display: inline-block;
width: 200px;
height: 100px;
/* 隐藏Firefox alt文字 */
color: transparent;
position: relative;
overflow: hidden;
}
img:not([src]) {
/* 隐藏Chrome alt文字以及银色边框 */
visibility: hidden;
}
img::before {
/* 淡蓝色占位背景 */
content: "";
position: absolute;
left: 0;
width: 100%;
height: 100%;
background-color: #f0f3f9;
visibility: visible;
}
img::after {
/* 黑色alt信息条 */
content: attr(alt);
position: absolute;
left: 0;
bottom: 0;
width: 100%;
line-height: 30px;
background-color: rgba(0, 0, 0, .5);
color: white;
font-size: 14px;
text-align: center;
transform: translateY(100%);
/* 来点过渡动画效果 */
transition: transform .2s;
visibility: visible;
}
img:hover::after {
transform: translateY(0);
}
</style>
实现原理
- 图片异步加载完成前,img标签还没有src属性,此时img标签只是一个普通的内联元素,::before和::after可以生效
- 通过 attr(alt) 可以获取到图片中的alt属性值
- 当图片异步加载完成后,img标签便拥有了src属性,则此时的img标签从普通元素变成了替换元素,::before和::after不再生效,鼠标悬浮到图片上时,将不再显示alt信息