做后台列表,一行数据点进去是详情页。鼠标移上去还是普通箭头,用户根本不知道能点,反馈说页面没反应。加一行样式就好了。
这个效果靠 cursor 属性,写在要变手形的元素上。最常用的是 pointer,悬停时显示一只食指的手。
pointer 和 hand 的区别
老代码里常写 cursor:hand,那是早期某个浏览器的私有写法,现在的浏览器不认。规范值是 pointer,主流浏览器全支持。两者混着写虽然有人能兜住,但没必要,看到 hand 直接换成 pointer 就行。
换完还没反应,问题就不在属性名上了,往下看。
几个常见值分别长什么样
- pointer:食指手,表示可点,链接和按钮的默认值;
- default:普通箭头,用来取消从父级继承来的手形;
- text:竖线光标,表示这段文字可选中;
- not-allowed:一个带斜杠的圆圈,表单不能提交时用;
- grab 和 grabbing:张开和握紧的手,拖拽排序时用。
选哪个看语义,不是觉得好看就挑。能给手的地方给手,不能点的地方别给,不然用户点半天没反应,比不提示更糟。
写了不生效的三种原因
一是被更高优先级的规则覆盖,组件库的样式尤其常见;二是写在伪元素上,实际悬停的是父元素;三是元素本身没有尺寸,或者被上面一层透明遮罩盖住,鼠标根本没落在它身上。
排查办法:开发者工具选中元素,看样式面板里 cursor 那一行有没有被划掉。被划掉就是权重不够,提高选择器优先级即可。没这一行,说明选择器压根没匹配上,路径写错了。
移动端别指望它
触摸屏没有悬停状态,cursor 不起作用。手机上的可点区域要靠视觉提示,比如按钮底色、下划线、右箭头图标。只靠鼠标手形区分交互,在手机上等于没做。
补充一个细节:禁用的按钮,浏览器不会自动给出禁用光标,需要自己写 not-allowed,同时把颜色调灰。两件事一起做,用户才知道是灰的不能点,而不是点了没反应。
另外,触屏上没有悬停,别把关键操作藏在悬停才出现的按钮里,手机用户永远点不到。