原文: Stunning hover effects with CSS variables

我的博客:[译] CSS 变量实现炫酷鼠标悬浮效果

我最近从Grover网站上的有趣的悬停动画中获得灵感。将鼠标移动到订阅按钮上可以显示光标移动后的彩色渐变。这个想法很简单,但结果是一个按钮从复位和等待点击中脱颖而出。

那怎样实现类似的效果使我们的网站同样出色呢?很好,它并没有你想象的那么困难!

跟踪位置

我们需要做的第一件事便是跟踪鼠标光标的位置。

document.querySelector('.button').onmousemove = (e) => {const x = e.pageX - e.target.offsetLeftconst y = e.pageY - e.target.offsetTope.target.style.setProperty('--x', `${ x }px`)e.target.style.setProperty('--y', `${ y }px`)
}
复制代码
  1. 选中目标元素并监听用户鼠标划过的事件
  2. 计算鼠标相对于该元素的坐标
  3. 将坐标保存到 CSS 的变量中

是的,只需要 6 行代码就可以让你的 CSS 知道用户鼠标的位置。通过这些信息你可以实现更多更庞大的效果。但是让我们先实现 CSS 部分……

为渐变设置动画效果

我们已经将鼠标坐标存储在 CSS 变量中,所以可以在 CSS 中的任何地方使用它们。(以下为 SCSS 代码)

.button {position: relative;appearance: none;background: #f72359;padding: 1em 2em;border: none;color: white;font-size: 1.2em;cursor: pointer;outline: none;overflow: hidden;border-radius: 100px;span {position: relative;}&::before {--size: 0;content: '';position: absolute;left: var(--x);top: var(--y);width: var(--size);height: var(--size);background: radial-gradient(circle closest-side, #4405f7, transparent);transform: translate(-50%, -50%);transition: width .2s ease, height .2s ease;}&:hover::before {--size: 400px;}
}
复制代码
  1. 将文本包裹在一个 span 中,防止渐变层覆盖到文字上方
  2. 初始 widthheight0px 并且当鼠标悬浮在按钮上时将它们增加到 400px 。不要忘记设置 transition 让它有个渐入的效果
  3. 使用 JS 中设置坐标跟随鼠标
  4. 应用一个 radial-gradientbackground 上并使用 closest-side circleclosest-side 使得 background 充满整个 before 但又没有超出它。

效果

就这样,添加缺少的 HTML 就可以了:

<button class="button"><span>Hover me I'm awesome</span>
</button>
复制代码

在线预览

See the Pen Mouse movement button with border-radius by Tobias Reich (@electerious) on CodePen.

拓展

只需对鼠标的位置作出反应,即可建立如此多的效果。它非常华丽并且使得?互动如此有趣。

以下是我在basicScroll的网站上使用的类似动画:

May the hover be with you https://t.co/2jrmVorLRW

—@electerious

或者看中并建立一个 3D 视差按钮:

3D parallax button with JS controlled CSS variables @CodePen ? https://t.co/qE0woiNip8 https://t.co/Wyi0xjRzPq

—@electerious

可能性是无止境的。你可以在下方评论区分享你使用它创建的效果?。

Q&A

Q: 为什么使用 widthheight 而不是使用 transform: scale() 实现动画呢?

A: 对于动画的性能, widthheight 是不好的,你可能会尽量地尝试使用 transform 。你为什么我不这样做呢?问题在于浏览器在加速图层中呈现元素(正在转换)。当按钮具有非矩形边缘时,此图层可能会导致问题。

Q: 为什么改变 topleft 而不是 transform: translate() 呢?

A: 参照上条。

Q: 我可以在 Twitter 关注你吗?

A: 当然。(原作者推特 @electerious)

转载于:https://juejin.im/post/5a924fcaf265da4e7d6061a6

[译] CSS 变量实现炫酷鼠标悬浮效果相关推荐

  1. 利用CSS变量实现炫酷的悬浮效果

    最近,我从 Grover网站上发现以一个好玩儿的悬停动画,也有了些自己的灵感.这个动画是将鼠标移动到订阅按钮上移动光标会显示相应的彩色渐变.这个想法很简单,但是它能使这个按钮脱颖而出,人们一下子就注意 ...

  2. css初始化_利用CSS变量实现炫酷的悬浮效果

    这个动画是将鼠标移动到订阅按钮上移动光标会显示相应的彩色渐变.这个想法很简单,但是它能使这个按钮脱颖而出,人们一下子就注意到它了,增加了点击的概率. 怎样才能达到这个效果,使我们的网站脱颖而出呢?其实 ...

  3. html中flash的简单动画效果,css实现快速炫酷抖动动画效果

    1.Animate.css简介 Animate.css是一个可在您的Web项目中使用的即用型跨浏览器动画库.非常适合强调,首页,滑块和引导注意的提示.它是一个来自国外的 CSS3 动画库,它预设了抖动 ...

  4. css炫酷标题,分享几个CSS小众但炫酷的技巧

    1. 黑白图像 这段代码会让你的彩色照片显示为黑白照片,是不是很酷? 复制代码代码如下: img.desaturate { filter: grayscale(100%); -webkit-filte ...

  5. 球体动画Android,使用CSS创建一个炫酷的球体动画效果

    我最近看到了一个纯CSS实现的球体动画效果: 经过研究上面的效果实现起来大致可以分为五个步骤,下面就来一一介绍. 1.使用Jade和SCSS生成一个圆圈 创建一个圆圈的第一步是生成所有组成圆圈的粒子. ...

  6. 前端实现炫酷动效_web前端入门到实战:使用CSS创建一个炫酷的球体动画效果

    一个纯CSS实现的球体动画效果: 经过研究上面的效果实现起来大致可以分为五个步骤,下面就来一一介绍. 1.使用Jade和SCSS生成一个圆圈 创建一个圆圈的第一步是生成所有组成圆圈的粒子.有了Jade ...

  7. 【CSS3】多款炫酷鼠标悬停图文动画效果

    演示效果: HTML代码如下: <!doctype html> <html lang="zh"> <head><meta charset= ...

  8. 纯html+css炫酷地球仪动画效果

    纯html+css炫酷地球仪动画效果 <!DOCTYPE html> <html lang="en"> <head><meta chars ...

  9. Android模仿360动态悬浮窗,像360悬浮窗那样,用WindowManager实现炫酷的悬浮迷你音乐盒(下)...

    悬浮窗 在上一篇文章像360悬浮窗那样,用WindowManager实现炫酷的悬浮迷你音乐盒(上)中我粗粗的向大家介绍了WindowManager和WindowManager.LayoutParams ...

最新文章

  1. 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程
  2. 软件概要设计做什么,怎么做
  3. arraylist获取前多少位_Java 面试题 :百度前 200 页都在这里
  4. [原创] 毕设---在myeclipes中安装Hadoop开发插件
  5. 如何构建尽可能小的容器镜像?
  6. 谁给小鹏P5的勇气?
  7. pytorch学习笔记(二十六):NIN
  8. 思科路由器端口映射配置实例
  9. 物联网卡和车联网有什么关系
  10. unix到底有啥用_微信新上线的「拍拍」到底有啥用?
  11. 不到100行代码搞定Python做OCR识别身份证,文字等各种字体
  12. 练字和平时写字完全不一样怎么办?
  13. Android反编译apktool,dex2jar和jd-gui的使用和一键反编译查看apk
  14. c语言程序怎样输出一个图形,C语言循环输出各种 * 组成的图形
  15. 计算机应用技术ps考证,2017计算机等级考试一级Photoshop应用试题及答案
  16. google 一个天生的在线超速代理。(刷票首选)
  17. 当幸福来敲门 经典语录
  18. 北京现代APP每日问答合集(持续更新)
  19. 降维打击!记录我在大二的腾讯面试
  20. 在vue项目中快速使用element UI

热门文章

  1. UA MATH574M 统计学习V Variable Selection简介
  2. 浏览器开发人员工具使用初步图解
  3. 三句话回答C/C++面试题
  4. [转载]Yacc基础
  5. 一个只有十行的精简MVVM框架(下篇)
  6. Java8新特性Optional、接口中的默认方法与静态方法
  7. ASP.NET MVC下的异步Action的定义和执行原理
  8. Power BI 可视化交互/视觉对象交互
  9. Foundation框架: 11.NSDate的基本认识和使用
  10. 100m和1000m网线的常见制作方法