鼠标滑入后边框逐渐包裹效果

2024-02-02 08:48

本文主要是介绍鼠标滑入后边框逐渐包裹效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果:鼠标滑入组件后,组件由无边框变为由边框包裹,边框从四个角逐渐变长包裹完整个组件;鼠标滑出后边框逐渐变短到消失。从两个例子来看:

1.普通四边形组件被包裹

2.有圆弧的四边形组件被包裹

一、普通四边形组件,滑入需边框包裹:

1、普通四边形组件包裹效果主要实现过程:

  1. 四周的”边框”实际为四个长方形。为了尽量减少html元素,利用组件的 before 和 after 选择器充当组件的上下两个长方形,再增加两个div充当组件左右两个长方形。
  2. 设置四周的元素的位置,位置与每个顶点对齐。
  3. 初始时无边框,所以设置上下元素的高度height = border的宽度,width = 0;设置左右元素的宽度width= border的宽度,height = 0。
  4. 当鼠标滑入时,上下两个元素width变大,左右两个元素height变大。即:设置上下元素的width = 组件的width + border的宽度; 左右元素的height = 组件的height + border的宽度。(加上边框的宽度才能刚好对齐)

HTML:

 <div class="box"><div class="hover-left"></div><div class="hover-right"></div>内容</div>

CSS(less):

.hover(@height, @width) {height: @height;width: @width;position: absolute;z-index: 0;content: '';display: inline-block;background: #2d77ff;
}.box {position: relative;width: 50px;height: 50px;background: #acc4f0;transition: all 0.3s ease;color: #fff;display: flex;justify-content: center;align-items: center;&::before {.hover(3px, 0);top: -3px;left: 0px;transition: width 0.4s ease;}.hover-right {.hover(0, 3px);top: 0px;right: -3px;transition: height 0.4s ease;}&::after {.hover(3px, 0);bottom: -3px;right: 0px;transition: width 0.4s ease;}.hover-left {.hover(0, 3px);bottom: 0px;left: -3px;transition: height 0.4s ease;}&:hover {box-shadow: 0px 3px 6px rgba(45, 123, 234, 0.3);&::before {width: calc(100% + 3px);}.hover-right {height: calc(100% + 3px);}&::after {width: calc(100% + 3px);}.hover-left {height: calc(100% + 3px);}}
}

二、有圆弧(border-radius)的组件,滑入需边框包裹:

与上面例子不同点:

  1. 边框起始位置不同。因为有圆弧,所以边框起始位置改为每个角圆弧结束的位置。
  2. 每个作为边框的节点需要设置一个角为圆弧。如果仅仅宽度为边框的宽度,则包裹不了组件,需要包裹后的弧度为10px的话,则上下边框节点的高度需要达到10px,左右节点宽度也需达到10px,然后设置每个节点对应一个角为10px。
  3. 若需要边框为3px,则设置边框节点的位置突出3px,即上方的top = - 3px,下方的bottom = - 3px,,,多余部分设置被内容挡住在下一层。
  4. 拿上方的边框节点举例:由于突出部分3px,高度10px,则包裹时此边框节点在右边将有10-3px=7px的长度露出,则需设置上边框节点包裹组件时对应的宽度 width = 组件的width - 7px,但同时边框需露出3px,所以 width = 组件的width - 7px + 3px (这里略绕,看下图可明晰一点)

如图:

HTML:

<div class="box"><div class="hover-left"></div><div class="hover-right"></div><div class="content">内容</div>
</div>

CSS(less):

// 重点:设置圆弧和位置起点
.hover(@height, @width, @radius) {height: @height;width: @width;position: absolute;z-index: 0;content: '';display: inline-block;background: #2d77ff;border-radius: @radius;  // !
}.box {position: relative;width: 50px;height: 50px;background: #acc4f0;border-radius: 10px;transition: all 0.3s ease;&::before {.hover(10px, 0, 0 10px 0 0);top: -3px;  // !left: 7px;  // !transition: width 0.4s ease;}.hover-right {.hover(0, 10px, 0 0 10px 0);top: 7px;right: -3px;transition: height 0.4s ease;}&::after {.hover(10px, 0, 0 0 0 10px);bottom: -3px;right: 7px;transition: width 0.4s ease;}.hover-left {.hover(0, 10px, 10px 0 0 0);bottom: 7px;left: -3px;transition: height 0.4s ease;}&:hover {box-shadow: 0px 3px 6px rgba(45, 123, 234, 0.3);&::before {width: calc(100% - 4px);}.hover-right {height: calc(100% - 4px);}&::after {width: calc(100% - 4px);}.hover-left {height: calc(100% - 4px);}}.content {position: absolute;top: 0;left: 0;background: #acc4f0;border-radius: 7px; // < 10pxwidth: 100%;height: 100%;z-index: 1;color: #fff;display: flex;justify-content: center;align-items: center;}
}

这篇关于鼠标滑入后边框逐渐包裹效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670143

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

使用Python实现生命之轮Wheel of life效果

《使用Python实现生命之轮Wheeloflife效果》生命之轮Wheeloflife这一概念最初由SuccessMotivation®Institute,Inc.的创始人PaulJ.Meyer... 最近看一个生命之轮的视频,让我们珍惜时间,因为一生是有限的。使用python创建生命倒计时图表,珍惜时间

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after