触发 hover 效果时,设置文字底部横杠显示

需求描述

需要在鼠标悬停时显示文字效果及下面出现一个横条,如图
在这里插入图片描述

<!-- 页面结构 -->
<nav>
    <ul>
        <li>精选</li>
        <li>女装</li>
        <li>男装</li>
        <li>彩妆</li>
        <li>运动</li>
        <li>家用</li>
        <li>休闲鞋</li>
        <li>板鞋</li>
        <li>高跟鞋</li>
        <li>口红</li>
        <li>粉底</li>
        <li>腮红</li>
    </ul>
    <div class="iconfont icon-gengduo-2"></div>
</nav>

分析

思路1

  • 设置背景图片,调整大小,位置即可
  • 缺点:插入图片不够高效

思路2

  • 在文字下面放置一个标签(文字和标签在同一个盒子中)
  • 设置标签在鼠标hover时的样式
  • 感觉还是不够优化
  • eg:淘宝店铺

思路3

  • 使用伪元素选择器
  • hover时在文本后面追加内容,并对内容进行定位,样式设置
  • 开发可用
  • eg: 携程网

解决

思路1:插入背景图

代码

  nav li {
      flex-shrink: 0;
      text-align: center;
      line-height: 9.867vw;
      margin: 0vw 2.667vw;
  }
  
  nav li:hover {
      color: orangered;
      font-weight: bold;
      /* 设置横线-背景图 */
      background: url(../img/honggang.png) no-repeat center 30px/22px 3px;
  }

效果图

在这里插入图片描述

思路2:添加盒子

代码

<!-- 页面结构 -->
<nav>
    <ul>
        <li>
            精选
            <p></p>
        </li>
        <li>
            女装
            <p></p>
        </li>
     <!-- 其余同理,省略 -->
    </ul>
    <div class="iconfont icon-gengduo-2"></div>
</nav>
/* css样式 */
nav li:hover p {
    /* 不设置宽度,充满整个盒子,也不用考虑几个字的问题 */
    /* width: 25px; */
    /* 2.5px */
    height: .3333vw;
    border-radius: 10px;
    background-color: orangered;
    margin-top: -5px;
}

效果图

在这里插入图片描述

思路3:使用伪元素选择器

代码

nav li {
    flex-shrink: 0;
    text-align: center;
    line-height: 9.867vw;
    margin: 0vw 2.667vw;
    /* 子绝父相 */
    position: relative;
}

nav li:hover {
    color: orangered;
    font-weight: bold;
}

/* 设置横线-伪元素选择器 */
nav li:hover::after {
    content: "";
    width: 20px;
    height: 2.5px;
    background-color: red;
    border-radius: 10px;

    /* 占位 */
    /* position: relative; */
    /* top: 6px;
    right: 25px; */

    /* 不占位 */
    position: absolute;
    left: 6px;
    bottom: 4px;
}

/* 单独设置第7、9个li:使用伪类选择器 + 结构伪类选择器 + 伪元素选择器 进行选择 */
nav li:hover:nth-child(7)::after,li:hover:nth-child(9)::after {
    width: 30px;
    left: 10px;
}

效果图

在这里插入图片描述

注意

  1. 使用伪元素进行定位时,不能用相对定位,因为relative会占位,hover时占用文档流,出现空白块。如图:
    在这里插入图片描述
  2. 进行绝对定位时,要给追加内容的父元素设置相对定位(巧记:子绝父相)
  3. 进行定位时,因为使用的是数值进行定位,导航栏里若有3个及以上字数的情况,就会出现布局不合适。如图:
    在这里插入图片描述
    所以需要单独的设置其他字数的位置
  • 只需要设置宽度及水平位置即可
  • 此处同时运用,注意语法的结合顺序:伪类选择器 + 结构伪类选择器 + 伪元素选择器
    li:hover:nth-child(7)::after {}
    
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

憨憨憨羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值