效果展示

大家好,这里是初心Yearth,欢迎来到 10 mins css,每天花 10 分钟,实现一个简单精美的 css 效果。

那么下面我们直接进入正题,先来看看今天的效果展示吧:

关键点

本效果有以下几个关键点:

  • 未激活状态下,按钮左右两侧的“刺”
  • 从未激活状态到激活状态的过渡
  • 激活状态下,按钮的荧光效果
  • 倒影效果

而在上述关键点中,后两点都在前面的文章中已经提过如何实现,感兴趣的读者可以看看这里

那么本文的重点就是前两点,下面依次分析实现。

具体实现

左右两侧的“刺”

首先把按钮的基本骨架做出来,没什么好说的,效果如下:

我们知道,要给一个元素添加一些修饰的东西,通常都是利用伪类结合绝对定位来做,这里可以借助伪类实现。

那么需要实现的就有两点:

  • 左右两边的主“刺”,这个没什么好说,直接讲伪类定位到对应位置即可
  • 主“刺”上下的两根小“刺”,最笨的办法可以再通过定位的办法将对应元素定位过去,但这里有一个小技巧:可以借助 box-shadow,将主“刺”投影到上下两处即可

代码如下:

a::before,
a::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 20px;
  height: 2px;
  background: var(--theme-color);
}

a::befor {
 left: -20px;
 box-shadow: 5px -8px 0 var(--theme-color), 5px 8px 0 var(--theme-color);
}

a::after {
 right: -20px;
 box-shadow: -5px -8px 0 var(--theme-color), -5px 8px 0 var(--theme-color);
}
复制代码

效果如下:

过渡状态

仔细分析整个过渡状态,我们可以知道,具体步骤如下:

  • “刺”的宽度变化
  • “刺”的位置变化
  • “刺”的高度变化
  • 按钮变成荧光状态,同时按钮文字颜色变化

显然,这里需要灵活的运用 transition-delay,首先设置目标状态:

a:hover::before,
a:hover::after {
  width: 60%;
  height: 100%;
}

a:hover::before {
 left: 0;
}

a:hover::after{
 right: 0;
}
复制代码

随后就是设置它们的 transition-delay:

a::before {
  transition: width 0.5s, left 0.5s, height 0.5s, box-shadow 0.5s;
  transition-delay: 1s, 0.5s, 0s, 0s;
}

a::after {
  transition: width 0.5s, right 0.5s, height 0.5s, box-shadow 0.5s;
  transition-delay: 1s, 0.5s, 0s, 0s;
}
复制代码

效果如下:

可见上述效果和最终效果相去甚远,具体有以下几点需要改正:

  • transition-delay 应该设置在 hover 中,并且 hover 之外的 transition-delay 应该设置成从激活状态到未激活状态的步骤
  • 文字应该在按钮之上,用 z-index 即可
  • 激活状态下超出了按钮的范围,应该将 box-shadow 的 y 轴恢复

那么修改一下代码:

a span {
  position: relative;
  z-index: 10;
}

a::before {
  transition: width 0.5s, left 0.5s, height 0.5s, box-shadow 0.5s;
  transition-delay: 1s, 0.5s, 0s, 0s;
}

a:hover::before {
  box-shadow: 5px 0 0 var(--theme-color), 5px 0 0 var(--theme-color);
  transition-delay: 0s, 0.5s, 1s, 1s;
}

a::after {
  transition: width 0.5s, right 0.5s, height 0.5s, box-shadow 0.5s;
  transition-delay: 1s, 0.5s, 0s, 0s;
}

a:hover::after {
  box-shadow: -5px 0 0 var(--theme-color), -5px 0 0 var(--theme-color);
  transition-delay: 0s, 0.5s, 1s, 1s;
}
复制代码

效果如下:

最后就没什么好说的了,添加荧光效果和倒影效果即可,感兴趣的读者可以看看在线 demo:荧光按钮效果