返回顶部
首页 > 资讯 > 前端开发 > node.js >如何使用CSS实现具有方面感知的幽灵按钮
  • 820
分享到

如何使用CSS实现具有方面感知的幽灵按钮

2024-04-02 19:04:59 820人浏览 安东尼
摘要

小编给大家分享一下如何使用CSS实现具有方面感知的幽灵按钮,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   基础   我们

小编给大家分享一下如何使用CSS实现具有方面感知的幽灵按钮,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

  基础

  我们先创建一个按钮,很简单!

  <button>Boo!</button>

  我们使用 CSS 自定义属性完成样式,这样更易于维护。

  button {

  --borderWidth: 5;

  --boxShadowDepth: 8;

  --buttonColor: #f00;

  --fontSize: 3;

  --horizontalPadding: 16;

  --verticalPadding: 8;

  background: transparent;

  border: calc(var(--borderWidth) * 1px) solid var(--buttonColor);

  box-shadow: calc(var(--boxShadowDepth) * 1px) calc(var(--boxShadowDepth) * 1px) 0 #888;

  color: var(--buttonColor);

  cursor: pointer;

  font-size: calc(var(--fontSize) * 1rem);

  font-weight: bold;

  outline: transparent;

  padding: calc(var(--verticalPadding) * 1px) calc(var(--horizontalPadding) * 1px);

  transition: box-shadow 0.15s ease;

  }

  button:hover {

  box-shadow: calc(var(--boxShadowDepth) / 2 * 1px) calc(var(--boxShadowDepth) / 2 * 1px) 0 #888;

  }

  button:active {

  box-shadow: 0 0 0 #888;

  }

  我们实现了一个按钮及悬停效果,但是没有填充。我们继续进行!

  添加填充

  我们额外创建元素做为按钮填充时的状态。通过 clip-path 将它隐藏。当鼠标悬停在按钮上时设置 clip-path将元素过渡显示出来。

  它们必须与父按钮对齐。这里我们的 CSS 变量会显示出它的优势。

  本来我们可以通过伪元素实现,但是它不满足我们需要的四个方面,而且它还会干扰可访问性&hellip;稍后我们再讲。

  我们先添加一个从左到右填充的效果。首页我们要添加一个 span 标签,它与按钮具有相同的内容。

  <button>Boo!

  <span>Boo!</span>

  </button>

  下面我们要将 span 与按钮重叠对齐。

  button span {

  background: var(--buttonColor);

  border: calc(var(--borderWidth) * 1px) solid var(--buttonColor);

  bottom: calc(var(--borderWidth) * -1px);

  color: var(--bg, #fafafa);

  left: calc(var(--borderWidth) * -1px);

  padding: calc(var(--verticalPadding) * 1px) calc(var(--horizontalPadding) * 1px);

  position: absolute;

  right: calc(var(--borderWidth) * -1px);

  top: calc(var(--borderWidth) * -1px);

  }

  最后,我们通过裁剪使元素隐藏,当悬停时更新裁剪规则使元素显示出来。

  button span {

  --clip: inset(0 100% 0 0);

  -WEBkit-clip-path: var(--clip);

  clip-path: var(--clip);

  transition: clip-path 0.25s ease;

  // ...Remaining div styles

  }

  button:hover span {

  --clip: inset(0 0 0 0);

  }

  添加方向感知

  那么,如何感知方向呢?我们需要四个要素。每个元素将负责检测悬停入口点。使用 clip-path,我们可以将按钮区域分为四个部分。

  我们在按钮里添加四个 span,并放在四个方面以进行填充按钮。<button>

  Boo!

  <span></span>

  <span></span>

  <span></span>

  <span></span>

  </button>

  button span {

  background: var(--bg);

  bottom: calc(var(--borderWidth) * -1px);

  -webkit-clip-path: var(--clip);

  clip-path: var(--clip);

  left: calc(var(--borderWidth) * -1px);

  opacity: 0.5;

  position: absolute;

  right: calc(var(--borderWidth) * -1px);

  top: calc(var(--borderWidth) * -1px);

  z-index: 1;

  }

  我们将每个元素进行定位并使用 CSS 变量赋予它们背景色及裁剪规则。

  button span:nth-of-type(1) {

  --bg: #00f;

  --clip: polyGon(0 0, 100% 0, 50% 50%, 50% 50%);

  }

  button span:nth-of-type(2) {

  --bg: #f00;

  --clip: polygon(100% 0, 100% 100%, 50% 50%);

  }

  button span:nth-of-type(3) {

  --bg: #008000;

  --clip: polygon(0 100%, 100% 100%, 50% 50%);

  }

  button span:nth-of-type(4) {

  --bg: #800080;

  --clip: polygon(0 0, 0 100%, 50% 50%);

  }

  为了测试,悬停时我们改变一下元素的透明度。

  button span:nth-of-type(1):hover,

  button span:nth-of-type(2):hover,

  button span:nth-of-type(3):hover,

  button span:nth-of-type(4):hover {

  opacity: 1;

  }

  哎呀,这里有个问题。如果我们进入并悬停一个分段,然后悬停在另一分段上,则填充方向将会发生变化。这看起来很不对劲。要解决此问题,我们可以在悬停时设置 z-index 和 clip-path 来填充这一空间。

  button span:nth-of-type(1):hover,

  button span:nth-of-type(2):hover,

  button span:nth-of-type(3):hover,

  button span:nth-of-type(4):hover {

  --clip: polygon(0 0, 100% 0, 100% 100%, 0 100%);

  opacity: 1;

  z-index: 2;

  }

  合到一起

  现在我们知道如何创建填充动画了,也知道如何判断方向了。那我们应该如何将它们放到一起实现想要的效果呢?答案是同级选择器!

  当我们将鼠标悬停在一方向块上时,我们可以填充指定的元素。

  首先,我们要更新一下我们的代码:

  <button>

  Boo!

  <span></span>

  <span></span>

  <span></span>

  <span></span>

  <b>Boo!</b>

  <b>Boo!</b>

  <b>Boo!</b>

  <b>Boo!</b>

  </button>

  接下来,我们需要更新一下我们的 CSS,填充样式我们可以复用从左到右的样式。但需要为每个元素设置不同的 clip-path。我们按第一个在上,第二个在右,第三个在下,第四个在左的顺序设置。

  button b:nth-of-type(1) {

  --clip: inset(0 0 100% 0);

  }

  button b:nth-of-type(2) {

  --clip: inset(0 0 0 100%);

  }

  button b:nth-of-type(3) {

  --clip: inset(100% 0 0 0);

  }

  button b:nth-of-type(4) {

  --clip: inset(0 100% 0 0);

  }

  最后一步是鼠标悬停在对应方向块时更新对应元素的 clip-path。

  button span:nth-of-type(1):hover &mdash;&mdash; b:nth-of-type(1),

  button span:nth-of-type(2):hover &mdash;&mdash; b:nth-of-type(2),

  button span:nth-of-type(3):hover &mdash;&mdash; b:nth-of-type(3),

  button span:nth-of-type(4):hover &mdash;&mdash; b:nth-of-type(4) {

  --clip: inset(0 0 0 0);

  }

  至此,我们具有方向感知性的幽灵按钮就实现了。

  可访问性

  当按钮不可访问里,会显示如下状态。

  这些额外的元素使屏幕阅读器重复阅读了四次。所以,我们需要将它们隐藏起来。

  <button>

  Boo!

  <span></span>

  <span></span>

  <span></span>

  <span></span>

  <b aria-hidden="true">Boo!</b>

  <b aria-hidden="true">Boo!</b>

  <b aria-hidden="true">Boo!</b>

  <b aria-hidden="true">Boo!</b>

  </button>

以上是“如何使用CSS实现具有方面感知的幽灵按钮”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: 如何使用CSS实现具有方面感知的幽灵按钮

本文链接: https://lsjlt.com/news/89760.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用CSS实现具有方面感知的幽灵按钮
    小编给大家分享一下如何使用CSS实现具有方面感知的幽灵按钮,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   基础   我们...
    99+
    2024-04-02
  • 如何使用CSS实现开关按钮
    这篇文章给大家分享的是有关如何使用CSS实现开关按钮的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   HTML   需要用到的HTML并不是我们之前没见过的,也就是一个标准...
    99+
    2024-04-02
  • 如何使用CSS实现发光的按钮效果
    这篇“如何使用CSS实现发光的按钮效果”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“如何使用CSS实现发光的按钮效果”,小编整理了以下知识点,请大家跟着小编的...
    99+
    2024-04-02
  • 如何使用CSS实现菜单按钮动画
    这篇文章主要为大家展示了如何使用CSS实现菜单按钮动画,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“如何使用CSS实现菜单按钮动画”这篇文章吧。   HTML ...
    99+
    2024-04-02
  • 如何使用纯CSS实现3D按钮效果
    小编给大家分享一下如何使用纯CSS实现3D按钮效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css巧妙利用了box-shadow来实现3D物体的立体感,当按钮...
    99+
    2023-06-08
  • 使用CSS实现按钮点击效果的方法
    使用CSS实现按钮点击效果的方法前言:在现代网页设计中,按钮是页面交互中不可或缺的元素之一。一个好的按钮样式不仅可以提升用户体验,还能增强页面的视觉效果。本文将介绍一种使用CSS实现按钮点击效果的方法,为页面增添动感和交互性。一、基础按钮样...
    99+
    2023-11-21
    CSS按钮点击效果
  • 如何使用css实现按钮圆角样式的展示效果
    这篇文章给大家分享的是有关如何使用css实现按钮圆角样式的展示效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   代码如下:   <divstyle="w...
    99+
    2024-04-02
  • 如何使用纯css3实现的鼠标悬停动画按钮
    小编给大家分享一下如何使用纯css3实现的鼠标悬停动画按钮,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!html代码:<div><span></span>...
    99+
    2024-04-02
  • JavaScript在form表单中如何使用button按钮实现submit提交方法
    这篇文章将为大家详细讲解有关JavaScript在form表单中如何使用button按钮实现submit提交方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。submit...
    99+
    2024-04-02
  • 怎么使用纯CSS代码实现带有金属光泽的立体按钮的动画效果
    小编给大家分享一下怎么使用纯CSS代码实现带有金属光泽的立体按钮的动画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   ...
    99+
    2024-04-02
  • layer如何实现关闭当前窗口页面以及确认取消按钮的方法
    这篇文章主要为大家展示了“layer如何实现关闭当前窗口页面以及确认取消按钮的方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“layer如何实现关闭当前窗口页...
    99+
    2024-04-02
  • 如何使用HTML和CSS实现一个具有固定导航菜单的布局
    如何使用 HTML 和 CSS 实现一个具有固定导航菜单的布局在现代网页设计中,固定导航菜单是常见的布局之一。它可以使导航菜单始终保持在页面顶部或侧边,使用户可以方便地浏览网页内容。本文将介绍如何使用 HTML 和 CSS 实现一个具有固定...
    99+
    2023-10-26
    CSS html 标签 结构 元素
  • css如何使用伪元素:before实现的面包屑导航栏
    小编给大家分享一下css如何使用伪元素:before实现的面包屑导航栏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!伪元素:be...
    99+
    2024-04-02
  • 如何使用HTML和CSS实现一个简单的聊天页面布局
    随着现代科技的发展,人们越来越依赖于互联网来进行沟通和交流。而在网页中,聊天页面是一种非常常见的布局需求。本文将向大家介绍如何使用HTML和CSS来实现一个简单的聊天页面布局,并给出具体的代码示例。首先,我们需要创建一个HTML文件,可以使...
    99+
    2023-10-21
    CSS样式 HTML布局 聊天页面
  • 如何使用HTML和CSS实现一个简单的折叠面板布局
    折叠面板是网页设计中常用的布局之一,它可以将大量的内容以折叠的形式呈现在页面上,使得页面结构更加清晰和紧凑。本文将详细介绍如何使用HTML和CSS实现一个简单的折叠面板布局,并提供具体的代码示例。HTML结构设计首先,我们需要设计合适的HT...
    99+
    2023-10-21
    CSS html 折叠面板
  • 如何使用纯CSS和jQuery实现在页面顶部显示的进度条效果
    小编给大家分享一下如何使用纯CSS和jQuery实现在页面顶部显示的进度条效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、纯CSS实现代码如下:<style type...
    99+
    2024-04-02
  • android中如何使用Html渲染的方式实现必填项前面的*号
    小编给大家分享一下android中如何使用Html渲染的方式实现必填项前面的*号,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果如:一开始,我测试过用一个Tex...
    99+
    2023-05-30
    android html
  • 你是否知道Python在Linux环境下的框架有哪些,如何使用它们来实现算法?
    Python是一种广泛使用的编程语言,它在Linux环境下也有许多强大的框架可以使用。这些框架可以使程序员更加高效地开发算法,并且能够减少代码的重复性。本文将介绍一些在Linux环境下使用Python的框架,同时演示如何使用它们来实现算法。...
    99+
    2023-11-06
    linux 框架 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作