完整范例代码
<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信息