发布于 2026-01-06 3 阅读
0

闪亮玻璃悬浮效果(玻璃变形)结果 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

闪亮玻璃悬浮效果(玻璃变形)

结果

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

今天我们来使用 background-filter 属性和倾斜的 ::before 元素,创建一个漂亮的闪亮玻璃悬停效果。

阅读全文或在 YouTube 上观看我的编程演示(TL;DW):

结果

首先,背景信息

我们先从背景开始,叠加三种不同的渐变色。每种渐变色都是从一种颜色过渡到透明,通过改变角度,它们可以很好地相互融合。

main {
  background:
    linear-gradient(322deg, 
      #ba4aff, rgba(#ba4aff, 0) 70%),
    linear-gradient(178deg,
      #008aff, rgba(#008aff, 0) 70%),
    linear-gradient(24deg,
      #00ffc6, rgba(#00ffc6, 0) 35%);
}
Enter fullscreen mode Exit fullscreen mode

标记

标记由一个带有标尺的容器(用于生成中间的线条)和一个包含五个图标按钮的容器组成,每个按钮都包含一个图标。

<main>
  <div class="ruler"></div>

  <div class="container">
    <a class="icon" href="#">
      <i class="fas fa-phone"></i>
    </a>
    <a class="icon" href="#">
      <i class="fas fa-images"></i>
    </a>
    <a class="icon" href="#">
      <i class="fas fa-envelope-open"></i>
    </a>
    <a class="icon" href="#">
      <i class="fas fa-comment"></i>
    </a>
    <a class="icon" href="#">
      <i class="fas fa-music"></i>
    </a>
  </div>
</main>
Enter fullscreen mode Exit fullscreen mode

基础知识和尺子

我们来添加一些变量、重置值,并将整个元素居中显示在视口中:

:root {
  --foreground-color: white;
}

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

main {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}
Enter fullscreen mode Exit fullscreen mode

标尺将放置在视口的下半部分。通过将顶部边框设置为浅白色,即可生成实际的标尺:

.ruler {
  border-top: 1px solid rgba(white, 0.3);
  background-color: rgba(white, 0.05);

  position: absolute;
  top: 50%;
  height: 50%;
  left: 0%;
  right: 0%;
}
Enter fullscreen mode Exit fullscreen mode

设置容器

容器最重要的部分是网格布局配置,它默认只有一行——因为没有指定行配置。列的配置使得在考虑1fr间距后,每一列占用的空间大小相同。1.25rem

.container {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 1.25rem;
}
Enter fullscreen mode Exit fullscreen mode

按钮设置

我们先来设置一些变量,以便于进行自定义:

  • --size变量控制每个按钮的显示大小。由于其默认值为6rem0,因此它也会根据文档的字体大小而变化。
  • --transition-duration--transition-easing允许我们同步修改稍后将添加的两个悬停过渡效果。
.container {
  ...
  .icon {
    --size: 6rem;
    --transition-duration: 500ms;
    --transition-easing: ease-out;
  }
}
Enter fullscreen mode Exit fullscreen mode

图标按钮的配置本身非常简单明了。它采用正方形形状,内容水平和垂直居中。此外,还添加了略微的边框、较深的阴影效果以及半透明的白色背景。需要注意的是,阴影效果是根据按钮的大小来计算的。因此,当按钮大小发生变化时,阴影也会随之缩放。

.container {
  ...
  .icon {
    // quadratic shape
    width: var(--size);
    height: var(--size);

    // center content horizontally
    // and vertically
    display: flex;
    align-items: center;
    justify-content: center;

    // apply text/font styling
    text-decoration: none;
    color: var(--foreground-color);
    font-size: 2rem;

    // Add a slight border and a 
    // strongly blurred box shadow
    border: 1px solid rgba(white, 0.6);
    background-color: rgba(white, 0.1);
    border-radius: 0.5rem;
    box-shadow: 
      0px 
      calc(var(--size) / 6) 
      calc(var(--size) / 3) 
      rgba(black, 0.1);
  }
}
Enter fullscreen mode Exit fullscreen mode

玻璃态

如果你是冲着这个来的,那么这一行代码就能帮你实现“经典”的玻璃变形效果。这种效果在背景有清晰的纹理时效果最佳,所以才需要用到标尺。

.container {
  ...
  .icon {
    backdrop-filter: blur(2px);
  }
}
Enter fullscreen mode Exit fullscreen mode

请注意,该backdrop-filter属性目前仅适用于基于 Webkit 的浏览器,因此在 Firefox 中,您只会看到半透明的背景,而不会看到标尺的模糊线条。

光泽

为了突出每个按钮的玻璃质感,我们添加了一条闪亮的条纹,当鼠标悬停在按钮上时,该条纹会从左下角延伸到右上角。首先,我们要确保按钮在视觉上略微抬升。因此,我们将按钮transform的属性设置为可过渡的,并通过变换将按钮抬升至其尺寸的 25% translateY

.container {
  ...
  .icon {
    transition: transform 
      var(--transition-duration) 
      var(--transition-easing);

    overflow: hidden;

    &:hover {
        transform: translateY(-25%);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

这条闪亮的条纹是通过添加一个::before伪元素创建的,该伪元素的背景色为稍深的白色,并倾斜了 45 度。尤其是倾斜角度,对最终效果起到了显著作用。

.container {
  ...
  .icon {
    overflow: hidden;

    &::before {
      content: '';
      background: rgba(white, 0.4);
      width: 60%;
      height: 100%;
      top: 0%;

      transform: skew(45deg);

      position: absolute;

      transition: left 
        var(--transition-duration)
        var(--transition-easing);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

最初,闪亮的条纹位于按钮左侧外侧,每次鼠标悬停在按钮上时,它都会向右移动。就是这样。😎

.container {
  ...
  .icon {
    ...
    &::before {
      left: -125%;
    }

    &:hover {      
      &::before {
        left: 150%;
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
文章来源:https://dev.to/crayoncode/shiny-glass-hover-effect-glassmorphism-17n7