CSS 面试题 目录

如何使用 CSS 的 cursor 属性自定义鼠标指针样式?

推荐答案

使用 CSS 的 cursor 属性可以自定义鼠标指针样式。该属性可以接受多种预定义值,例如 pointermovewait 等,也可以使用 url() 函数引入自定义的图片作为鼠标指针。

例如:

-- -------------------- ---- -------
-- ------ --
---------------- -
  ------- --------
-

------------- -
  ------- -----
-

-- ------- --
---------------------- -
  ------- ------------------------------ -----
-

-------------------------- -
  ------- ------------------------------ -----
-

其中 url() 函数内传入图片的路径,可以是指向 .cur 格式的文件,也可以是其他图片格式。auto 是 fallback 值,当无法加载自定义光标时,浏览器会显示默认光标。url 可以在多个值之间用逗号分隔,浏览器会依次尝试加载,若都失败则显示最后的 auto

本题详细解读

cursor 属性用于指定鼠标指针悬停在元素上时的显示样式。它是一个非常强大的 CSS 属性,允许开发者提供更好的用户体验反馈。

预定义值

cursor 属性提供了一系列预定义值,覆盖了常见的鼠标指针样式,例如:

  • auto: 浏览器根据上下文决定显示的光标,通常是默认的箭头样式。
  • default: 默认的光标样式,通常也是箭头。
  • none: 不显示光标,鼠标指针不可见。
  • pointer: 手形光标,通常用于表示链接或可点击的元素。
  • move: 十字箭头光标,表示可以移动的元素。
  • text: I 型光标,表示文本输入区域。
  • wait: 表示等待状态的光标,通常是沙漏或旋转的圆圈。
  • help: 带有问号的箭头,通常表示帮助信息。
  • progress: 表示正在进行中的操作的光标,通常是一个旋转的圆圈或进度条。
  • crosshair: 十字线光标,通常用于精确选择。
  • grab: 闭合的手形光标,表示可以抓取元素。
  • grabbing: 张开的手形光标,表示正在抓取元素。
  • zoom-in: 放大镜光标,表示可以放大。
  • zoom-out: 放大镜光标,表示可以缩小。
  • not-allowed: 禁止光标,表示不允许操作。

自定义光标

除了使用预定义值之外,cursor 属性还允许开发者使用自定义的图片作为鼠标指针。使用 url() 函数可以指定图片的路径,图片的格式可以是 .cur (Windows 光标文件)、 .ani (动画光标文件)、 .png.gif.jpeg 等常见的图片格式。

url() 函数的语法如下:

  • path/to/your/image.cur:自定义光标图片的路径,可以是相对路径或绝对路径。
  • auto:回退值,当自定义光标图片加载失败时,浏览器会使用 auto 默认的光标样式。

自定义光标的图像格式建议使用 .cur 文件,因为这种格式专门为光标设计,支持热点(hotspot)设置,可以精确控制点击位置。如果使用其他图片格式,浏览器可能会自行推断点击位置,导致用户体验不佳。并且 .cur 格式在各个浏览器上的兼容性较好。如果使用非 .cur 格式的图像,通常需要设置 hotspot 属性,以确保点击位置的准确性,但在 CSS 中没有直接的 hotspot 属性设置,这需要依赖图片的元数据,因此通常建议使用 .cur 格式。

为了提供更好的用户体验,通常建议将自定义光标的图片尺寸控制在合理范围内(例如 16x16,32x32),并且提供一个备选光标,以防止自定义光标加载失败。可以为 cursor 属性设置多个值,以实现自定义光标的优雅降级:

浏览器会依次尝试加载,如果第一个失败,则加载第二个,依此类推,直到成功或使用预定义值。

纠错
反馈