纯css for:仅用鼠标悬停
Pure css for :hover only with mouse
:hover
在触摸屏上的出现可能是一个可访问性问题(下拉),也可能只是混淆了设计元素(按下按钮时更改颜色,但由于虚拟悬停而无法恢复)。
因此,我决定在触摸元素时和用鼠标悬停时有不同的行为。这很容易用Javascript实现,并利用mousein
和mouseout
事件,并在适当的地方添加hover
类。这有两个主要问题:
- 它是基于Javascript的,有很多含义。我不会把没有悬停功能称为可访问性问题,因为有一个指针光标
- 我的主要问题是,我将不得不手动指示哪些元素需要在CSS样式之外添加类。这是额外的工作,增加了一个额外的出错区域,而且在语义上并不好
所以我的问题是:是否有任何纯粹的CSS方法可以检测鼠标是否悬停在元素上一个对触摸没有反应的人。
不足以检测设备是否具有触摸功能并从中删除悬停功能。现在许多设备同时具有鼠标和触摸功能,这将阻碍完美的鼠标体验。
方法1:Javascript
为什么不从机身上有一个.no-touch类开始,然后使用JS检测设备,如果设备是移动的,则删除该类。
if(//Code to detect mobile)
$("body").removeClass("no-touch");
然后,在CSS中,将所有:hover
编码为依赖于该父类。
.no-touch a:hover
{
text-decoration: underline;
}
这将确保在JS失败的情况下默认启用悬停样式,并防止委派要禁用悬停的每个元素的漫长过程。
相反,如果设备是移动的,则添加一个类,然后对CSS进行编码以排除具有该类的主体:
body:not(.touch) a:hover
{
text-decoration: underline;
}
它并不完美,因为它仍然需要JS,但目前还没有一种已知的纯css方法来检测触摸事件,而不是鼠标事件,至少我已经通过谷歌搜索找到了这一点。
方法2:CSS媒体查询
另一种选择是使用媒体查询,但随着设备不断获得更好的分辨率,这仍有很多不足之处;有些平板电脑的屏幕宽度相当于一些旧显示器,不幸的是,旧技术消亡得很慢。
这具有纯CSS的优点,但也有其自身的缺陷。
你可能有人在使用横向1024x768的iPad,这将被视为触摸设备,而一位年长的绅士正在使用分辨率相同的旧3x2液晶显示器上的桌面:1024x768
如果你想要的话,下面是代码:
@media all and (min-width: 1024px)
{
a:hover
{
text-decoration: underline;
}
}
仅使用CSS的解决方案,不使用Javascript
使用媒体悬停与媒体指针将帮助您解决此问题:
@media (hover: hover) and (pointer: fine) {
a:hover { color: red; }
}
- 当鼠标悬停在文本中的单词上时显示警报
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 在鼠标悬停时展开列表
- jQuery悬停在没有鼠标悬停的情况下启动
- 鼠标悬停时如何居中放大背景图像
- 使用鼠标悬停JavaScript/HTML显示文本
- 如何在MVC3中显示鼠标悬停在文本上的部分视图
- d3.js鼠标悬停鼠标输出问题
- 如何在鼠标悬停时将对象从起始位置移动到结束位置,然后在鼠标悬停后再次移动
- 鼠标悬停时播放随机轨迹
- 鼠标悬停时的css转换
- 将鼠标悬停在同级元素上的 jquery 上轻拂
- 将鼠标悬停在Angular JS中的一个元素上,并将Class添加到另一个元素中
- aspx中鼠标悬停时横向扩展DIV
- ajax鼠标悬停和鼠标悬停脚本
- 在鼠标悬停处隐藏图像
- 如何停止地图移动时,鼠标悬停在标记在谷歌地图API 3
- 通过鼠标悬停向上或向下滑动的图片
- 鼠标悬停时更改按钮的 CSS