伪类选择器获取ul中指定li

问题场景

​ 今天在开发中遇见一个问题,使用jsx语法开发了右键菜单,但是最后一个菜单是个二级的菜单,所以就考虑怎么获取到最后一个菜单,让它鼠标hover上去可以展示出来二级菜单(二级菜单默认是隐藏的)。

<ul id="context-menu">
    <li>context menu1</li>
    <li>context menu2</li>    
    <li>context menu3</li>    
    <li>context menu4</li>    
    <li>
		context menu5
    	<ul id="sub-context-menu">
            <li>sub context menu1</li>
            <li>sub context menu2</li>
            <li>sub context menu3</li>
            <li>sub context menu4</li>
        </ul>
    </li>
</ul>

​ 其实解决这个问题的方式有很多种,像js去捕获mouseovermouseleave事件,来控制二级菜单的显示和隐藏。但是我也不知道像被css种草了一样,就是想用css去解决这个问题。可能个人认为能用css解决的问题就不去用js解决吧。毕竟css本身就是很强大的。

​ 既然要用css去解决这个问题了,那么就要引入两个css伪类选择器了。

伪类选择器

:last-child伪类选择器

想要选择ul li列表中的最后一个元素,可以使用:last-child伪类选择器。该选择器表示选择某个元素的最后一个子元素。例如,我们可以选取最后一个元素,给它单独设置样式。

<ul>
  <li>child 1</li>
  <li>child 2</li>
  <li>child 3</li>
  <li>last child</li>
</ul>

使用css代码选择最后一个并设置样式:

ul li:last-child {
    /* style */
    color: black;
}
:nth-last-child伪类选择器

:nth-last-child(n) 选择器匹配属于其元素的第 N 个子元素的每个元素,不论元素的类型,从最后一个子元素开始计数。

n可以是一个数字,一个关键字,或者一个公式。

除了使用:last-child伪类选择器,我们还可以使用:nth-last-child伪类选择器来选择ul li列表中的最后一个元素。该选择器表示选择一个元素的最后一个子元素,并且该子元素与父元素的所有子元素中是倒数第n个子元素。例如,我们可以选择列表中的倒数第二个元素:

ul li:nth-last-child(2){
    /* style */
    background: green;
}

奇数和偶数是可以作为关键字使用用于相匹配的子元素,其索引是奇数或偶数。

在这里,我们为奇数和偶数的倒数li元素指定两个不同的背景颜色:

li:nth-last-child(odd){
    background:#ff0000;
}
li:nth-last-child(even){
	background:#0000ff;
}

使用公式(an+ b)描述:a代表一个循环的大小,N是一个计数器(从0开始),以及b是偏移量。

在这里,我们对所有索引是3的倍数的倒数顺序的li元素指定了背景颜色:

li:nth-last-child(3n+0){
	background:#ff0000;
}

问题解决

再回到我们的问题,获取最后一个一级菜单,并且在它鼠标悬浮时展示二级菜单,默认不展示二级菜单。废话不多说,直接上代码:

 /* 默认不展示 */
#second-context-menu {
    display: none; 
}
/* 鼠标悬浮最后一个菜单显示 */
#context-menu li:last-child:hover #second-context-menu {
    display: block;  
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Joyce Lee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值