沃梦达 / IT编程 / 前端开发 / 正文

纯CSS结合DIV实现的右侧底部简洁悬浮效果

下面是详细的攻略。

下面是详细的攻略。

问题描述

该效果是可以让一个元素悬浮在页面的右下角,当鼠标移入时,元素会展开一部分,当鼠标移出时,元素会自动收起,整个效果使用 CSS 和 DIV 元素来实现。

解决方案

要实现这个效果,我们可以分三步来实现:

  1. 定义 HTML 结构
  2. 用纯 CSS 控制元素的位置、大小、动画等
  3. 使用 JavaScript 监听元素的鼠标事件,实现展开和收起效果。

HTML 结构

我们可以使用一个 <div> 元素来作为悬浮元素,然后在其中添加一些其他的 HTML 元素,实现悬浮元素的内容。示例代码如下:

<div class="floating-button">
  <div class="icon">ICON</div>
  <div class="label">Label</div>
</div>

其中,floating-button 类是用来定义悬浮元素的整体样式,icon 类是用来定义图标样式,label 类是用来定义标签样式。

CSS 样式

我们可以使用一些 CSS 属性来控制悬浮元素的位置、大小、动画等。下面是一个示例的 CSS 样式代码:

.floating-button {
  position: fixed;
  bottom: 20px;
  right: 20px;
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background-color: #4285f4;
  color: #fff;
  font-size: 18px;
  cursor: pointer;
  transition: all 0.3s ease-in-out;
}

.floating-button:hover {
  width: 200px;
  height: 60px;
}

.floating-button:hover .icon {
  margin-left: 10px;
  opacity: 1;
}

.floating-button:hover .label {
  display: inline-block;
  margin-left: 8px;
}

其中,我们使用了 position 属性将元素定位为固定定位,使用 bottomright 属性控制元素距离浏览器窗口底部和右侧的距离,使用 widthheight 属性控制元素的大小,使用 border-radius 属性定义元素的圆角,使用 background-color 属性定义元素的背景颜色,使用 color 属性定义元素的文字颜色,使用 font-size 属性控制元素的文字大小,使用 cursor 属性定义元素的鼠标指针样式,并使用 transition 属性定义元素的过渡效果。

同时,我们使用 :hover 选择器来定义当鼠标移入元素时的样式。当鼠标移入元素时,我们通过改变元素的宽度和高度,实现展开效果;通过改变图标元素的 margin-left 属性和不透明度,实现图标的从元素内部淡出的效果;通过改变标签元素的 display 属性和 margin-left 属性,实现标签的从元素内部淡出的效果。

JavaScript 交互

最后,我们可以使用一些 JavaScript 代码来实现鼠标事件的处理。下面是一个示例的 JavaScript 代码:

var floatingButton = document.querySelector('.floating-button');

floatingButton.addEventListener('mouseenter', function() {
  floatingButton.classList.add('is-expanded');
});

floatingButton.addEventListener('mouseleave', function() {
  floatingButton.classList.remove('is-expanded');
});

其中,我们使用 querySelector 方法来获取 floating-button 元素,使用 addEventListener 方法来监听元素的鼠标进入和离开事件。当鼠标进入元素时,我们通过添加 is-expanded 类来展开元素;当鼠标离开元素时,我们通过移除 is-expanded 类来收起元素。

示例说明

示例一

下面是一个示例页面,实现了一个简单的右侧底部悬浮按钮,在鼠标移入时展开,鼠标移出时收起。代码如下:

<!DOCTYPE html>
<html>
<head>
  <title>Example 1</title>
  <style>
    .floating-button {
      position: fixed;
      bottom: 20px;
      right: 20px;
      width: 60px;
      height: 60px;
      border-radius: 50%;
      background-color: #4285f4;
      color: #fff;
      font-size: 18px;
      cursor: pointer;
      transition: all 0.3s ease-in-out;
    }

    .floating-button:hover {
      width: 200px;
      height: 60px;
    }

    .floating-button:hover .icon {
      margin-left: 10px;
      opacity: 1;
    }

    .floating-button:hover .label {
      display: inline-block;
      margin-left: 8px;
    }

    .floating-button .icon {
      opacity: 0;
      margin-left: -30px;
      transition: all 0.3s ease-in-out;
    }

    .floating-button .label {
      display: none;
      margin-left: -60px;
      transition: all 0.3s ease-in-out;
    }

    .floating-button.is-expanded {
      width: 200px;
      height: 120px;
    }

    .floating-button.is-expanded .icon {
      margin-left: 10px;
      opacity: 1;
    }

    .floating-button.is-expanded .label {
      display: inline-block;
      margin-left: 8px;
    }
  </style>
</head>
<body>
  <div class="floating-button">
    <div class="icon">ICON</div>
    <div class="label">Label</div>
  </div>

  <script>
    var floatingButton = document.querySelector('.floating-button');

    floatingButton.addEventListener('mouseenter', function() {
      floatingButton.classList.add('is-expanded');
    });

    floatingButton.addEventListener('mouseleave', function() {
      floatingButton.classList.remove('is-expanded');
    });
  </script>
</body>
</html>

示例二

下面是另一个示例页面,实现了一个带有图片的右侧底部悬浮按钮,在鼠标移入时展开,鼠标移出时收起。代码如下:

<!DOCTYPE html>
<html>
<head>
  <title>Example 2</title>
  <style>
    .floating-button {
      position: fixed;
      bottom: 20px;
      right: 20px;
      width: 60px;
      height: 60px;
      border-radius: 50%;
      background-color: #4285f4;
      font-size: 18px;
      cursor: pointer;
      transition: all 0.3s ease-in-out;
    }

    .floating-button:hover {
      width: 200px;
      height: 80px;
    }

    .floating-button:hover img {
      margin-left: 10px;
      opacity: 1;
    }

    .floating-button:hover .label {
      display: inline-block;
      margin-left: 8px;
    }

    .floating-button img {
      width: 40px;
      height: 40px;
      margin: 10px;
      opacity: 0;
      margin-left: -30px;
      transition: all 0.3s ease-in-out;
      float: left;
    }

    .floating-button .label {
      display: none;
      margin-left: -30px;
      transition: all 0.3s ease-in-out;
      font-size: 14px;
      line-height: 20px;
      color: #fff;
      text-align: center;
    }

    .floating-button.is-expanded {
      width: 200px;
      height: 120px;
    }

    .floating-button.is-expanded img {
      margin-left: 10px;
      opacity: 1;
    }

    .floating-button.is-expanded .label {
      display: inline-block;
      margin-left: 8px;
    }
  </style>
</head>
<body>
  <div class="floating-button">
    <img src="https://picsum.photos/40/40" />
    <div class="label">Description of the image</div>
  </div>

  <script>
    var floatingButton = document.querySelector('.floating-button');

    floatingButton.addEventListener('mouseenter', function() {
      floatingButton.classList.add('is-expanded');
    });

    floatingButton.addEventListener('mouseleave', function() {
      floatingButton.classList.remove('is-expanded');
    });
  </script>
</body>
</html>

总结

通过上面的攻略和示例,我们学会了如何使用 CSS 和 DIV 元素实现一个简单的右侧底部悬浮按钮,同时也讲解了 JavaScript 代码的交互过程。在实际开发中,我们可以根据需要修改 HTML 和 CSS 样式,并添加其他的交互效果,来实现更加丰富的悬浮元素。

本文标题为:纯CSS结合DIV实现的右侧底部简洁悬浮效果