css 光标 手型
在此快速提示中,我们将学习如何使用CSS自定义光标外观。 我们将把光标更改为箭头,以使幻灯片浏览更容易。 为了更好地理解它,我们将逐步介绍两个示例。
注意 :本文的目的不是详尽地介绍cursor
属性的语法。 要进行更彻底的检查,请确保在本教程末尾检查资源。
例子1
对于第一个示例,我们将讨论如何根据鼠标位置更改光标图像。
这是我们将要构建的演示:
1. HTML
我们从一个简单的图像开始:
<img src="IMG_SRC" alt="">
2. CSS
接下来,我们定义两个保存光标图像CSS类:
.cursor-prev {
cursor: url(cursor-prev.cur), auto; /*IE & Edge*/
cursor: url(cursor-prev.svg) 16 16, auto; /*Rest browsers*/
}
.cursor-next {
cursor: url(cursor-next.cur), auto; /*IE & Edge*/
cursor: url(cursor-next.svg) 16 16, auto; /*Rest browsers*/
}
注意,对于每个规则,我们指定两个游标声明。 每个规则的第一个声明都针对Microsoft的浏览器,而第二个声明则针对其他浏览器。 所有值都指向图像,而auto
关键字值作为后备。
值得一提的是,我们可以指定多个自定义URL或图像。 浏览器将尝试根据值中定义的顺序加载它们。 换句话说,最初它将尝试加载第一张图像。 如果由于某种原因该图像不可用,它将尝试加载第二个图像,依此类推。 最后,如果不存在任何图像,将使用fallback关键字。
在继续之前,让我们重点介绍一些当前的限制(也根据我的测试),并解释为什么我们设置两个单独的声明:
- Microsoft的浏览器仅支持CUR和ANI作为格式。
- Microsoft的浏览器不允许设置光标图像的原点。 如果发生这种情况,将忽略光标图像和属性的其余部分。 在本例中,对于非Microsoft浏览器,我们将图像原点设置为中心(图像为32x32)。
3. JavaScript
当所有页面资产准备就绪时,将执行init
函数。
在该函数内部,我们首先获取图像宽度。
接下来,每次将鼠标悬停在图像上时,我们都会执行以下操作:
- 获取鼠标指针相对于图像(而不是相对于浏览器窗口)的X坐标。
- 从图像中删除所有类。
- 根据鼠标位置将适当的类添加到图像。 如果鼠标位置超过图像宽度的一半,我们将添加
cursor-next
类,否则将添加cursor-prev
类。
负责所有此行为的代码如下:
window.addEventListener("load", init);
function init() {
const img = document.querySelector("img");
const {width} = img.getBoundingClientRect();
const halfImgWidth = width / 2;
img.addEventListener("mousemove", function(e) {
const xPos = e.pageX - img.offsetLeft;
this.classList.remove("cursor-prev", "cursor-next");
if (xPos > halfImgWidth) {
this.classList.add("cursor-next");
} else {
this.classList.add("cursor-prev");
}
});
}
范例#2
对于第二个示例,我们将使用上一篇文章中构建的演示。 看一看:
在这里,导航箭头的位置和外观如下所示:
让我们对其进行自定义,以便于导航。 每个箭头应覆盖转盘宽度的一半,并且其高度应等于转盘高度。 另外,我们将利用cursor
属性设置箭头的图标。
这是必需CSS:
.owl-carousel .owl-nav [class*=owl-] {
position: absolute;
top: 0;
bottom: 0;
width: 50%;
margin: 0;
}
.owl-carousel .owl-nav .owl-prev {
left: 0;
cursor: url(cursor-prev.cur), move;
cursor: url(cursor-prev.svg) 16 16, move;
}
.owl-carousel .owl-nav .owl-next {
right: 0;
cursor: url(cursor-next.cur), move;
cursor: url(cursor-next.svg) 16 16, move;
}
.owl-carousel .owl-nav svg {
display: none;
}
请注意,光标图像来自我们先前的示例。 唯一的区别是,在无法加载关联的图片的情况下,我们将move
关键字值指定为后备广告。
结果如下:
您的挑战(您是否应该选择接受)
除了一件事之外,该技术在我们的示例中效果很好。 导航箭头堆叠在幻灯片的文本上方,使我们无法单击号召性用语按钮。
同样,该问题在我们的演示中发生。 在您的项目中,您的结构可能会有所不同(例如,您只有图像,或者图像下方是文本),并且可能不会遇到该问题。 此外,您可能会使用另一个带有不同标记的轮播。
无论如何,解决该问题的方法是通过JavaScript。 因此,每次自定义光标在目标按钮/文本的边界内时,关联的箭头都会收到负的z-index
或消失。
尝试自己找出解决方案,然后在评论中发布您的解决方案!
结论
在本快速技巧中,我们介绍了如何使用CSS操纵光标外观。 如我们所见,这可能具有挑战性,因为并非所有浏览器都支持相同的语法,但是通过向游标添加样式,我们能够增强用户体验。
css 光标 手型