PC端一般都会做很多鼠标经过的样式,比如文字变色,图片变大,显示隐藏等效果。
但是到了移动端,鼠标经过效果变成了点击之后出现,还伴随一个半透明的灰色背景。
其实,在做页面之前,我们就要思考,这个效果是PC端鼠标悬停时的效果,在移动端没有悬停的时候又应该是什么样子?
最好的解决方案就是利用Media Queries Level 4出现的any-hover或者hover这种媒体查询了。
比如,下面这张图,在PC端只显示图片,鼠标经过图片放大并显示标题。点击图片看效果。
到了移动端,就直接显示标题,图片也不变大了。
这样就避免了设置了hover效果,在移动端又要去掉它带来的重复劳动。
还有移动端链接点击的时候带一个半透明的灰色背景,也可以用-webkit-tap-highlight-color: transparent;
去掉,不过这个属性是非标准,只在chrome和edge上生效,在firefox上无效,不过考虑到国情,也可以直接用了。
代码如下:
<style> body { /* 非标准,不过chrome和edge都支持,firefox不支持,可以去掉点击链接出现的半透明灰色背景 */ -webkit-tap-highlight-color: transparent; } body, figure { margin: 0; padding: 0; } img { vertical-align: middle; } .pro { width: max-content; margin: 50px auto; overflow: hidden; } .pro-a { display: block; position: relative; } .pro-title { position: absolute; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 1em; box-sizing: border-box; left: 0; bottom: 0; /* transform的变形都是基于元素本身,100%表示的是元素自身的高度 */ transform: translateY(100%); transition: 0.2s; } /* 当设备有悬停效果时,出现鼠标悬停的效果,在PC端有用,在移动端无用 */ @media (any-hover:hover) { .pro-a:hover .pro-title { transform: translateY(0); } .pro-a:hover .pro-img { transform: scale(1.05); } .pro-img { transition: 0.2s; } } /* hover和any-hover都是Media Queries Level 4出现的,功能差不多,hover要早出来一点,所以支持的浏览器版本更低一些 */ /* 当设备没有悬停效果时,移动端使用这个样式 */ @media (hover:none) { .pro-title { transform: translateY(0); } .pro-a:hover .pro-img { transform: scale(1); } } </style> </head> <body> <figure class="pro"> <a href="#" class="pro-a"> <img src="images/fengjing.jpg" alt="" class="pro-img"> <figcaption class="pro-title">产品标题</figcaption> </a> </figure> </body>
发表评论:
◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。