利用 CSS 变量实现令人震惊的悬浮效果

(点击上方公众号,可快速关注)


英文:Tobias Reich  译文:众成翻译/meakaka

www.zcfy.cc/article/stunning-hover-effects-with-css-variables


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


640?wx_fmt=gif&wxfrom=5&wx_lazy=1


怎样才能达到这个效果,使我们的网站脱颖而出呢?其实,它并不像你想象的那么难!


追踪位置


我们要做的第一件事就是获取到鼠标的位置。


document.querySelector('.button').onmousemove = (e) => {

 

  const x = e.pageX - e.target.offsetLeft

  const y = e.pageY - e.target.offsetTop

 

  e.target.style.setProperty('--x', `${ x }px`)

  e.target.style.setProperty('--y', `${ y }px`)

 

}


  1. 选择元素,等待,直到用户将鼠标移过它;

  2. 计算相对于元素的位置;

  3. 将坐标存在CSS的变量中。


是的,仅仅9行代码就让你能获知用户放置鼠标的位置,通过这个信息你能达到意想不到的效果,但是我们还是先来完成CSS部分的代码。


动画渐变


我们先将坐标存储在CSS变量中,以便能够随时使用它们。


.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. 将 width和height初始化为0px,当用户悬停在按钮上时,将其改为400px。不要忘了设置这种转换以使其像风一样

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现悬浮窗口的效果,可以使用 Bootstrap 提供的 Modal 组件。以下是实现步骤: 1. 在 HTML 文件中引入 Bootstrap 的 CSS 和 JS 文件。 ```html <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.0/css/bootstrap.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.0/js/bootstrap.bundle.min.js"></script> ``` 2. 在 HTML 中添加一个按钮,点击按钮可以触发模态框。 ```html <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal"> 打开悬浮窗口 </button> ``` 3. 添加一个模态框,该模态框会在点击按钮时弹出。 ```html <div class="modal fade" id="myModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">悬浮窗口</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> 这是一个悬浮窗口。 </div> </div> </div> </div> ``` 4. 在 CSS 文件中添加以下样式,使模态框变成悬浮窗口的样式。 ```css .modal-content { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1050; } ``` 5. 刷新页面,点击按钮即可看到悬浮窗口弹出。 完整代码如下: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>悬浮窗口</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.0/css/bootstrap.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.0/js/bootstrap.bundle.min.js"></script> <style> .modal-content { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1050; } </style> </head> <body> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal"> 打开悬浮窗口 </button> <div class="modal fade" id="myModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">悬浮窗口</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> 这是一个悬浮窗口。 </div> </div> </div> </div> </body> </html> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值