昨天在聊天群里看见有人问,鼠标划过,文字下方横线从左向右划过怎么实现?作为初学前端的我页忍不住想要试一试自己能否实现这样的效果,当然用JS实现确实简单,另外自己最近刚巩固了css3的一些新的过渡和动画特性的编程,所以再巩固一下也好,遂决定用CSS3的一些特性来写这个特效。

一开始为了最简单,我直接就是做好一个导航,ul > li  > a。 然后li左浮动布局。如下图所示:

(之前用flex布局,虽然能够自适应屏幕宽度,但是li元素的宽度也随之改变,导致以margin方式水平居中布局的方法失效,所以最后还是采用浮动布局,固定li宽度的方式布局)

具体要求: 鼠标悬浮在以上文字时,底部出现一条横线,横线从左到右变长。

说实话,不是老手,很多布局上的小点子真心想不到,只看书不写代码实践,思维永远难易开拓,不知变通,或许鄙人不适合编程也说不定,哈哈。。。。

好了,闲话不多说,大概布局的示意图如下:

具体布局的像素大小,就不写了。一开始我把焦点放在横线如何画出,首先考虑到盒子的属性border-bottom,居然没有想到盒子的宽度width,真是够low的。试想,利用边框如何实现变化过渡呢?当然首先设置好底边框,然后设置其宽度由0变到100%。间接实现了,想到这里,那不如就直接利用盒子的width更简单。但是,具体用到哪个盒子的宽度呢?并且盒子的宽度变化也要不影响周边元素的布局才行,那就只能用脱离文档流的元素了。于是,我想到了利用绝对定位的方法,新增一个元素,将其显示为块状元素,利用它的宽度由小变大的变化,实现下滑线的从左到右的变化。

代码如下: 在li下新增em标签

  • 新品
  • 折扣
  • 惊喜
  • 购物车

样式代码如下:

li{            flex: 1; width: 157px;            margin: 0 10px;            position: relative; float: left;        }

li>em {            position: absolute;            left: 50%;            bottom: 0;            margin: 0 -75px; //大家可以把本行注释掉,启用下一行的代码,效果会不一样            /* transform: translate(-50%); */        }        a{            display: inline-block;            height: 100%;            width: 100%;            text-align: center;            line-height: 40px; text-decoration: none; font-weight: 700; font-size:20px;        }

li:hover em{            animation: test 0.4s ease;            border: 1px solid red;            width: 100%;         }

@keyframes test { from{ width: 0; }

to{ width: 100%; }        }

这里让元素水平方向上居中的方法有两个,常用的为

position: absolue; left: 50%; margin: 0  -75px(父元素宽度的一半取负数);

还有就是CSS3的新特性translate();它可以让盒子在x和y方向上产生相应的变化,具体请看:点击打开链接

position: absolue; left: 50%;  transform: translateX( -50% );

虽然都是让元素居中,但是效果不一样,前者margin值的方法是一个固定的值,也就是-75px。所以,无论如何,em元素的左边启点位置在: 如下图所示: 它的效果则是从左往右宽度逐渐变长。

而后者translateX(-50%)的方法来水平居中的话,它的中间点却始终位于它父元素的中间点,这样出来的效果就是,鼠标移上去后,横线是自中间向两边延长的效果;如下图为三个时间段横线长度的变化图,横线应该是同一个位置,只是为了方便而花了三个不同的位置,它是自中间向两边拓展延长。

好了,就分享到这里,其实也算上分享吧,只是自己作为笔记总结一下吧,一定还有很多其它的简便方法。

其实我很想研究下内部的原理什么的,但是自己现在时间有限,等以后接触的更多了,再来研究原理的问题比较好,我们的大学老师告诉我们,编程开始要大气的学,之后再深入学。

html 鼠标经过出现横线,CSS实现鼠标经过,文字下方横线划过特效相关推荐

  1. html设置鼠标移入移出样式,css实现鼠标移入移出动态效果

    这篇文章主要介绍了关于css实现鼠标移入移出动态效果,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 知识点:transform-origin 兼容性:IE10以上 p { positi ...

  2. css禁用鼠标点击事件

    1.css禁用鼠标点击事件 .disabled { pointer-events: none; } 转载于:https://www.cnblogs.com/jiangtuzi/p/5728230.ht ...

  3. 不可思议的纯 CSS 实现鼠标跟随效果

    不可思议的纯 CSS 实现鼠标跟随效果 原文:不可思议的纯 CSS 实现鼠标跟随效果 直接进入正题,鼠标跟随,顾名思义,就是元素会跟随着鼠标的移动而作出相应的运动.大概类似于这样: 通常而言,CSS ...

  4. 使用HTML+CSS实现鼠标划过的二级菜单栏

    先上效果图: 1.鼠标没在上面 2.鼠标放在一级菜单上,展开二级菜单 3.鼠标放在二级菜单上 代码: (点击此处预览代码效果) <html> <head><title&g ...

  5. CSS控制鼠标的箭头

    CSS控制鼠标的箭头 CSS控制鼠标通过cursor属性来实现,该属性可以在任何标记中使用,因此,可以改变各种页面元素的鼠标效果. 浏览器默认的超连接的鼠标样式,显示为手的形状. body{curso ...

  6. css 缩放_【开发小技巧】06—如何使用CSS在鼠标悬停时缩放图像?

    英文 | https://www.geeksforgeeks.org/how-to-zoom-an-image-on-mouse-hover-using-css/?ref=rp翻译 | web前端开发 ...

  7. [css] 如何使用css实现鼠标跟随?

    [css] 如何使用css实现鼠标跟随? 铺满元素,hover + box-shadow 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌 ...

  8. css禁止鼠标复制文本的属性:user-select

    禁用用户选中 user-select禁止复制页面的文本: 使用JavaScript的方式,代码如下: document.documentElement.style.webkitUserSelect=& ...

  9. 使用 CSS 模拟鼠标点击交互

    使用 CSS 模拟鼠标点击交互 通过 CSS 方式模拟鼠标点击交互动效的两个核心要素: HTML 元素需要使用 <input> 和 <label> 元素 CSS 使用 :che ...

  10. 用CSS添加鼠标样式-箭头、小手、十字 CSS实现虚线之dotted边框-点虚线、dashed边框-破折号虚线

    用CSS添加鼠标样式-箭头.小手.十字- & CSS实现虚线之dotted边框-点虚线.dashed边框-破折号虚线 //小手样式 cursor:pointer; cursor其他取值 aut ...

最新文章

  1. 求有多少个数是这个数的约数
  2. 利用A、G、DL、P策略来管理网络资源访问权限
  3. python创建虚拟串口
  4. html地址--待更新
  5. Oracle树反向查询的优化(转载)
  6. mybatis中转义 大于,小于,大于等于,小于等于
  7. [Vue warn]: Attribute id is ignored on component div because the component is a fragment instanc
  8. 【原】expdp参数CONTENT
  9. 初中计算机ps教程,初中信息技术《认识Photoshop CS2的工作界面》教案
  10. 完美企业网站的101项指标
  11. 宝刀不老: Cookie (转)
  12. Python利用SMTP发邮件
  13. 一次荒唐的技术决策过程:排除研发总监,无技术参与
  14. dynamips中网卡参数如何和网络连接中的具体网卡匹配
  15. 华为第1书:《华为交换机学习指南》当当网预售中
  16. 用c51控制电机正反转以及加减速
  17. MPAndroidChart 3.0——BarChart(一)
  18. 辞职信上写什么辞职理由比较合适
  19. Unity之UI和登陆界面与暂停界面
  20. 计算机组成原理位移量,计算机组成原理大题解析.doc

热门文章

  1. 计算机睡眠和休眠的区别win10,教你Win10电脑休眠和睡眠的区别
  2. autojs自动添加QQ群成员好友脚本,QQ爆粉源码
  3. 接收邮件服务器(pop3,邮件接收(POP3或IMAP)服务器是什么
  4. Azure vNet
  5. .NET 开发从入门到精通
  6. Docker官方文档阅读笔记
  7. Linux服务器安装mysql
  8. 利用MTviz绘制线粒体基因组结构图
  9. 线粒体和叶绿体的基因组特点_线粒体和叶绿体基因组的组织及表达解析.ppt
  10. @inherited 注解详解