:nth-child深度解析以及如何实现css奇偶选择器

2017-01-14 10:38:01

官方解释:p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。

    我是表示很难理解。

    应该理解为,p元素的父元素下面的第二个p元素。

    no,不对!看下面的例子吧。

<style>
    p:nth-child(2){
        background: blue;
    }
</style>
<div class="parent">
    <p>第1行P元素</p>
    <p>第2行P元素</p>
    <p>第3行P元素</p>
    <p>第4行P元素</p>
    <p>第5行P元素</p>
    <p>第6行P元素</p>
    <p>第7行P元素</p>
</div>

    效果如下图

blob.png


貌似上面那个观点是正确的。看下面的代码,把p元素前面加一个span标签。

<div class="parent">
    <span>我只是一个span元素</span>
    <p>第1行P元素</p>
    <p>第2行P元素</p>
    <p>第3行P元素</p>
    <p>第4行P元素</p>
    <p>第5行P元素</p>
    <p>第6行P元素</p>
    <p>第7行P元素</p>
</div>

效果如下图

blob.png

显然和我们想的不一样,p:child(2)的意思应该是p标签父元素的地二个孩子。

我可一欣然的告诉你这个想法也不对的。继续看下面,我把span标签放到第一个p标签后面。

<div class="parent">
    <p>第1行P元素</p>
    <span>我只是一个span元素</span>
    <p>第2行P元素</p>
    <p>第3行P元素</p>
    <p>第4行P元素</p>
    <p>第5行P元素</p>
    <p>第6行P元素</p>
    <p>第7行P元素</p>
</div>

效果出我们所料,如下图

blob.png

    元素无任何颜色变化。

    我推测,p:nth-child(2)的意思应该是,选择p标签父元素下面第二个元素并且这个元素为p元素。

    大胆尝试,把样式选择器修改一下,变为nth-child(3)


p:nth-child(3){
    background: blue;
}

    效果如下图

blob.png

看来结论正确:

    p:nth-child(2)的意思应该是,选择p标签父元素下面第二个元素并且这个元素为p元素。


Odd 和 even 是可用于匹配下标是奇数或偶数的子元素的关键词(第一个子元素的下标是 1)。

    我们修改上面的style

p:nth-child(odd){
    background: blue;
}
p:nth-child(even){
    background: yellow;
}

    效果如下图

blob.png

    从图中也可看出span元素并没有被选择,但是它依旧在队列的顺序当中,只是并没有被选择。

    

使用公式 nth:child(an + b)。描述:表示周期的长度,n 是计数器(从 0 开始),b 是偏移值。

上面这个公式可以做出某些不规则的选择

咱们继续修改style

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

效果如下图

    

blob.png

你可以随意修改a,n, b进行尝试。

  • 2020-01-17 08:37:26

    css transition分别指定多个属性

    transition有四个属性,很多人都会遗忘,分别是transition-property,transition-duration,transition-timing-function,transition-delay,尤其是transition-delay,这个可以实现延迟动画

  • 2020-01-17 08:44:57

    vue keepalive 前进刷新后退不刷新终极解决方案

    另外,我们做路由的时候要有意的根据页面等级做出路由的长度 比如 /a是一级的页面/a/b是二级的页面,下面的文章大家也可以通过判断path的长度来计算rank值,不用有意自定了 这样做的好处有两点,一个就是前进刷新,后退不刷新,还有就是,如果我们做页面进出效果的时候也能排上用场。

  • 2020-01-17 15:28:24

    深入理解vue中的slot与slot-scope

    vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项使用频率、使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧,回头再学,反正已经可以写基础组件了”,于是就关闭了vue说明文档。

  • 2020-01-17 21:20:06

    Nuxt重要点介绍和记录

    nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端渲染).Vue.js是开发SPA(单页应用)的,Nuxt.js这个框架,用Vue开发多页应用,并在服务端完成渲染,可以直接用命令把我们制作的vue项目生成为静态html。

  • 2020-01-17 21:21:42

    nuxtjs打包优化

    然后你再使用 npm run build 打包的时候,会弹出一个界面 当然了,它第一次出来的时候我立马关了,这啥玩意???别着急你慢慢的品,慢慢的看。 原来 这是打包后的JS,面积的大小就是体积的大小。这样我们一目了然的看到了到底那里大了

  • 2020-01-17 23:21:54

    webpack打包优化之外部扩展externals的实际应用

    使用vue-cli创建项目,使用webpack打包。其中,有一个webpack优化webpack.optimize.CommonsChunkPlugin,它会将node_modules中的必需模块提取到vendor文件中,项目开发中,增加第三方模块,比如element-ui、vue-echarts等,vendor的包都会增大。这个时候,就需要考虑减轻vendor包的大小,增加构建速度。我们可以使用webpack的外部扩展(externals)功能。

  • 2020-01-18 01:26:59

    anyProxy使用注意事项

    anyproxy-ca 运行这个命令,如果是mac电脑他会提醒你去通过证书。

  • 2020-01-18 08:54:06

    利用localStorage来处理你的Javascript脚本错误

    localStorage作为HTML5中的新特性,它的出现可以说对于前端性能体验来讲可以获得相当大的改善。存储一些用户经常用到而又不是涉及隐私和安全的东西,的确是一个非常好的选择。下面分享一下用localStorage来处理客户端代码错误的例子来了解一下它的用途吧。