由于以下两者具有相同的效果:
.class {
cursor:pointer;
}
.class:hover {
cursor:pointer;
}
关于最佳实践,您应该使用哪一个?为什么?
答案 0 :(得分:7)
这两个选择器用于明显不同的目的,尽管事实上 - 至少在实践中它们出现来完成同样的事情。
我倾向于说使用:hover
定义悬停状态 最佳做法 (至少在非触摸屏设备上,见下文) ,因为:
它可以在较大的CSS块
它使用了一个专门指定的选择器(以后可能会在规范中扩展,您的功能会发生什么?)
如果您稍后添加.class
的默认样式,则您的状态会明确分开
如果您将CSS的责任移交给其他人,会发生什么?在正确的选择器下定义:hover
特定功能使得理解代码变得更容易。
如果你有更复杂的CSS,你可能会在其他地方使用:hover
,所以应该使用它来保持一致性
两个选择器代表相同的元素,但在不同的状态,从语义上讲,你应该使用:hover
但请等一下...... 您可能会注意到,如果您将a
元素的光标样式设置为default
,则通常的手形图标不会出现在悬停中...这表明存在未经特定样式:hover
状态(see this in action here)的先行证据
总而言之,在某些情况下,没有游戏破坏理由不使用简单的.class
- 它肯定会使用更少的字节,如果你有一个相当简单的设置,那么只有你在开发中...那么为什么不呢?但要小心谨慎,如果你想遵守严格的规则并更好地支持持续发展,最好避免这种情况。
此外..小时不要忘记触摸屏设备 MDN makes an important point here
触摸屏上的:悬停是有问题的或不可能的。 :悬停 伪类永远不会匹配,或者在短时间后匹配 触摸一个元素。由于触摸屏设备很常见,所以它是 对于Web开发人员来说,重要的是不要仅在以下时才能访 将鼠标悬停在其上,因为这些内容会被隐藏 设备
因此,根据您的要求,不最好使用:hover
,就像您在CSS中使用触摸屏设备一样,它可能依赖于不受支持或flakey功能。
答案 1 :(得分:1)
IE6和更低版本仅识别:hover
标记上的a
伪类。 :hover
或其他标记上的div
将不会被这些浏览器解释。
如果要考虑兼容性,请使用:hover
否则我认为没有区别。
答案 2 :(得分:0)
首先,对于你的"相同的效果",这取决于你适用于什么。 因为默认情况下某些元素有" cursor:pointer"属性如
锚标记
默认情况下,以下元素具有" cursor:default"(无指针)
输入类型:提交
请访问stackoverflow.com"发表您的答案"例如,它是一个提交按钮,带有" cursor:default"默认情况下,用户的感知可能会认为可点击的对象正在显示"指针",因此它的样式为"光标:指针"
作为我的经验的快速结论,没有最佳实践,而是取决于目的。对于可点击的对象,但它不显示为"指针"默认情况下,您可以使用"指针"来设置它们的样式。 当您禁用某些内容时,例如,当您激活某些内容然后启用锚链接时,您可以使用类似
的内容/* the a is only for illustrative purpose */
a.disabled{
cursor: default;
}
a.enabled{
cursor: pointer;
}
因为光标是视觉呈现的问题,与用户体验设计(UX)有关。