最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

CSS选择器之:nth-child(n)与:nth-last-of-type(number)_html/css

来源:动视网 责编:小采 时间:2020-11-27 16:24:13
文档

CSS选择器之:nth-child(n)与:nth-last-of-type(number)_html/css

CSS选择器之:nth-child(n)与:nth-last-of-type(number)_html/css_WEB-ITnose:这段时间在做一些东西,整理了其中遇到的一个关于CSS选择器的问题。 需要完成一个下图的侧边栏效果: 乍一看,很简单嘛,标签列表、弹框,完工! 然后我就写了如下代码: //标签 code code code code code //弹框 code
推荐度:
导读CSS选择器之:nth-child(n)与:nth-last-of-type(number)_html/css_WEB-ITnose:这段时间在做一些东西,整理了其中遇到的一个关于CSS选择器的问题。 需要完成一个下图的侧边栏效果: 乍一看,很简单嘛,标签列表、弹框,完工! 然后我就写了如下代码: //标签 code code code code code //弹框 code


这段时间在做一些东西,整理了其中遇到的一个关于CSS选择器的问题。

需要完成一个下图的侧边栏效果:

乍一看,很简单嘛,标签列表、弹框,完工!

然后我就写了如下代码:

 //标签 
  • code
  • code
  • code
  • code
  • code
  • //弹框
  • code
  • code
  • code
  • code
  • code
  • code
  • Done

    基本样式OK了,然后添加:hover等效果:

    .primary-tag:hover { background-color: #F5F5F5;}

    等等,这时候好像发现些什么:

    第一个与最后一个li标签悬停时背景溢出了,没关系,so eazy:

    .tag li:first-child { border-top-left-radius: 8px; border-top-right-radius: 8px;}.tag li:last-child { border-bottom-left-radius: 8px; border-bottom-right-radius: 8px;}

    嗯?怎么回事, first-child 生效了, last-chilld 没有生效:

    仔细思考了一下这两个选择器,发现:

  • li:first-child 是匹配父元素的第一个li元素

  • li:last-child 是匹配父元素的最后一个li元素

  • 原来,因为弹框里面也存在 li 元素,所以 last-child 属性匹配到了弹框里面的最后一个 li ,在不修改 HTML 的基础上稍作修改:

  • li.a:first-child

  • li.a:last-child

  • 这回总可以了吧,怀揣着希望,摁下了F5,我的天哪,还是原样,一脸懵逼中~~~

    仔细查了下资料:

  • li.a:first-child 匹配父元素中class为a的,且是第一个li

  • li.a:last-child 匹配父元素中class为a的,且是最后一个li

  • 也就是说,最后一个li如果class为a, last-child 生效;否则不生效(这里最后一个li还是匹配的弹框里的li,因为没有class为a,所以选择器失效,不会选中任何元素)。

    许多人说:”仅通过CSS是无法实现的,需要通过jQuery.....省略一大段理由”(建立在不更改html结构标签的基础上),难道真的一个这么简单的效果无法通过CSS实现吗?

    如果说不可以通过CSS实现,那一定是没有好好了解全CSS的属性选择器。功夫不负有心人,找到了 :nth-child(n) 选择器。

    :nth-child(n)定义和用法

    :nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型,从第一个子元素开始计数(第一个子元素的下标是 1,不要和JS混淆,JS是0)。

    n 可以是数字、关键词或公式。

    例: li:nth-child(2)指定为ul下第二个li

     
  • 所以,按照如下设置就能达到我们想要的效果:

    .a:nth-child(1) { border-top-left-radius: 8px; //匹配第1个class为a的元素 border-top-right-radius: 8px;}.a:nth-child(5) { border-bottom-left-radius: 8px; //匹配第5个class为a的元素 border-bottom-right-radius: 8px;}

    :nth-child(n)更多设置:

    Odd 和 even 是可用于匹配下标是奇数或偶数的子元素的关键词。

    在这里,我们为奇数 a 元素指定两种不同的背景色,从最后一个子元素开始计数:

    .a:nth-child(Odd) { color: #45E0B1; //匹配class为a的奇数元素}

    偶数:

    .a:nth-child(even) { color: #45E0B1; //匹配class为a的偶数元素}

    其实还有一个能达到上图这种效果,也就是 :nth-last-of-type(n) 选择器。

    :nth-last-of-type(number)定义和用法

    :nth-last-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素,从最后一个子元素开始计数(第一个子元素的下标是 1,不要和JS混淆,JS是0)。

    n 可以是数字、关键词或公式。

    :nth-last-of-type(number)更多设置

    Odd 和 even 是可用于匹配下标是奇数或偶数的子元素的关键词。

    在这里,我们为奇数 a 元素指定两种不同的背景色,从最后一个子元素开始计数:

    .a:nth-last-of-type(Odd) { color: #45E0B1; //匹配class为a的奇数元素}

    偶数:

    .a:nth-last-of-type(even) { color: #45E0B1; //匹配class为a的偶数元素}

    测试一下:

    .a:nth-last-of-type(5) { color: #45E0B1; //匹配class为a的从后往前数的第5个元素(也就是第一个)}.a:nth-last-of-type(1) { color: #26D7D7; //匹配class为a的从后往前数的第1个元素(也就是最后一个)}

    最终效果:

    其实很多时候,并不是没有解决办法或者说简便的办法,只是我们不知道,说明还懂得不够,需要学习来充实自己。

    文档

    CSS选择器之:nth-child(n)与:nth-last-of-type(number)_html/css

    CSS选择器之:nth-child(n)与:nth-last-of-type(number)_html/css_WEB-ITnose:这段时间在做一些东西,整理了其中遇到的一个关于CSS选择器的问题。 需要完成一个下图的侧边栏效果: 乍一看,很简单嘛,标签列表、弹框,完工! 然后我就写了如下代码: //标签 code code code code code //弹框 code
    推荐度:
    标签: 选择 type css
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top