• CSS选择器


    感谢原文作者:linxiaowu
    原文链接:https://zhuanlan.zhihu.com/p/95131311

    1 基本选择器

    基本选择器也就是这几种: */Tag/.class/#id,分别为通用元素选择器/标签选择器/class选择器/id选择器,非常地简单,就一笔带过了。

    2 多元素选择器

    多元素选择器有:
    在这里插入图片描述

    Demo

    CSS

    .descendant p{
      color: #F00;
    }
    .child > p{
      color: #0F0;
    }
    
    .adjacent + p{
      color: #00F;
    }
    .common ~ p{
      color: #F2F301;
    }
    

    HTML

    <div class="descendant">
      <p>
        我是descendant的后代,所以我颜色会变
      </p>
      <div>
        <p>
         我是descendant的后代,所以我颜色会变
        </p>
      </div>
    </div>
    <div class="child">
      <p>
        我是child的子元素,所以我的颜色会变
      </p>
      <div>
        <p>
         我是child的孙孙子元素,所以我的颜色不会变
        </p>
      </div>
    </div>
    <div>
      <p class="adjacent">
        这是为了测试相邻兄弟选择器
      </p>
      <p>
        因为我是紧邻着adjacent的元素,所以我的颜色会变
      </p>
      <div>
        <p>
         这是为了测试相邻兄弟选择器
        </p>
      </div>
      <p>
        因为我不是紧邻着adjacent元素,所以我的颜色不会变
      </p>
    </div>
    <div>
      <p class="common">
        这是为了测试通用选择器
      </p>
      <p>
        因为我是common的同级兄弟元素,所以我的颜色会变
      </p>
      <div>
        <p>
         这是为了测试通用选择器
        </p>
      </div>
       <p>
        因为我是common的同级兄弟元素,所以我的颜色会变,这个可以区别出选择器+
      </p>
      
    </div>
    

    3 属性选择器

    属性选择器有:
    在这里插入图片描述

    Demo

    CSS

    .first a[target]{
      color: #F00;
    }
    .second a[target=_blank]{
      color: #F00;
    }
    .third img[title~=doumi]{
      margin: 5px;
      border: 2px solid #00F;
    }
    .fourth p[lang|=en]{
      color: #0F0;
    }
    .fourth p[class|=color]{
      color: #00F;
    }
    .fifth p[class^=color]{
      color: #00F;
    }
    .sixth p[class$=change]{
      color: #0F99FA;
    }
    .seventh p[class*=text]{
      color: #AF00FA;
    }
    

    HTML

    <div class="first">
      <a target="_blank" src="http://blog.5udou.cn">
        因为我包含target这个属性,所以我的颜色变了
      </a>
      <br />
      <a src="http://blog.5udou.cn">
        因为我不包含target这个属性,所以我的颜色没变
      </a>
    </div>
    <div class="second">
      <a target="_blank" src="http://blog.5udou.cn">
        因为我包含target属性并且值等于_blank,所以我的颜色变了
      </a>
      <br />
      <a target="_self" src="http://blog.5udou.cn">
        虽然我包含target这个属性,但是我的值不等于_blank,所以我的颜色没变
      </a>
    </div>
    <div class="third">
      <img src="http://blog.5udou.cn/images/index5.jpg" title="doumi wedding" width="150" />
      <span>因为我的title属性中有doumi这个值,所以我有加边框</span>
      <br />
      <img src="http://blog.5udou.cn/images/index5.jpg" title="wedding" width="150" />
      <span>因为我的title属性中没有doumi这个值,所以我没有加边框</span>
      <br />
      <img src="http://blog.5udou.cn/images/index5.jpg" title="wedding doumiA" width="150" />
      <span>因为我的title属性中虽然含有doumi这个字符串,但是不是完整匹配doumi,所以我没有加边框</span>
    </div>
    <div class="fourth">
      <p lang="us">因为我的lang属性不是以en开始的,所以我的颜色没变</p>
      <p lang="en-us">因为我的lang属性是以en开始的,所以我的颜色变了</p>
      <p class="color-change text">因为我的class属性是以color开始的,所以我的颜色变了</p>
      <p class="colorA-change text">因为我的class属性是以colorA开始的(以-为分隔符),所以不满足整个单词完全等于选择器中color导致颜色不变</p>
    </div>
    <div class="fifth">
      <p class="color-change text">因为我的class属性是以color开始的,所以我的颜色变了</p>
      <p class="colorA-change text">因为我的class属性是以color开始的(这个时候不管整个单词),所以我的颜色变了,与|选择器做个区别</p>
    </div>
    <div class="sixth">
      <p class="color-change">因为我的class属性是以change结尾的,所以我的颜色变了</p>
      <p class="color-Achange text">因为我的class属性是以text结尾的,所以我的颜色不变</p>
    </div>
    <div class="seventh">
      <p class="color-text-change">因为我的class属性是包含text这个字符串,所以我的颜色变了</p>
      <p class="color-change Atext">因为我的class属性是包含text字符串,所以我的颜色变了,这个例子与~区别开来,~讲究的也是完整单词</p>
    </div>
    
    

    4 动态伪类选择器

    这类选择器有:
    在这里插入图片描述

    5 目标伪类选择器

    该类选择器只有一个:
    在这里插入图片描述

    Demo

    CSS

    #test1:target
    {
    	border: 2px solid #666;
    }
    #test2:target
    {
    	border: 2px solid #CCC;
    }
    

    HTML

    <p><a href="#test1">点击这里会让锚点test1应用上配置的属性</a></p>
    <p><a href="#test2">点击这里会让锚点test2应用上配置的属性</a></p>
    
    <p id="test1">我是锚点test1</p>
    <p id="test2">我是锚点test2</p>
    

    6 UI元素状态伪类选择器

    该类选择器有:
    在这里插入图片描述
    大部分都是常用的,也就不多说了。

    注意 最后的selection需要注意的是,::selection只能定义被选择时的background-colorcolortext-shadow(IE11尚不支持定义该属性)

    7 结构伪类选择器

    该类选择器有:
    在这里插入图片描述
    在这里插入图片描述

    注意

    • first-child伪类选择器选择是它父元素的第一个孩子的所有元素,这个父元素可以为任意的元素,比如body/div/section等等,所以p:first-child可以选择大部分p标签。另外伪类有更高的优先级比元素选择器。p:first-child会覆盖掉div>p的样式。
    • :nth-child注意与nth-of-type的区别!可以参考demo看出二者的不一样!
    • only-child注意与only-of-type的区别

    Demo

    CSS

    :root
    {
      background: rgba(10, 10, 10, 0.2);
    }
    .first p:first-child{
      color: #F00;
    }
    .second p:first-line{
      color: #0F0;
    }
    .second p:first-letter{
      color: #00F;
    }
    .third p:before{
      content: 'Before';
      color: #888;
    }
    .third p:after{
      content: 'After';
      color: #666;
    }
    .fourth p:last-child{
      color: #F00;
    }
    .fifth p:nth-child(2){
      color: #FF90AA;
    }
    .sixth p:nth-last-child(2){
      color: #FF0011;
    }
    .sixth p:nth-last-child(3){
      color: #FF0011;
    }
    .seventh p:nth-of-type(3){
      color: #11AA11;
    }
    .eighth p:only-child{
      color: #00EEAA
    }
    .nineth p:only-of-type{
      color: #A010AA
    }
    .tenth div:empty{
      border: 1px solid #000;
      height: 20px;
      width: 100%
    }
    

    HTML

    <div class="first">
      <p>
        因为我是第一个孩子,所以我的颜色变了
      </p>
      <div>
      <p>
          因为我是div的第一个孩子,所以我的颜色也变了
        </p>
        <p>
          因为我不是div的第一个孩子,所以我的颜色不变
        </p>
      </div>
      <p>
        因为我不是.first的第一个孩子,所以我的颜色也不变
      </p>
      <section>
        <p>
          因为我是section的第一个孩子,所以我的颜色也变了
        </p>
      </section>
      </div>
    <div class="second">
      <p>
      我(first-letter)是测试的第一行,所以我的颜色应该会变化的我是第二行,不会变颜色的我是第二行,不会变颜色的我是第二行,不会变颜色的我是第二行,不会变颜色的我是第二行,不会变颜色的我是第二行,不会变颜色的
      </p>
    </div>
    <div class="third">
      <p>这里在p标签前面添加Before这个单词,然后后面添加After这个单词</p>
    </div>
    <div class="fourth">
      <p>
        因为我不是。fourth的最后个孩子,所以我的颜色不会变
      </p>
      <div>
        <p>
          因为我是div的第一个孩子,所以我的颜色不会变
        </p>
        <p>
          因为我是div的最后一个孩子,所以我的颜色会变
        </p>
      </div>
      <p>
        因为我不是.fourth的最后一个孩子,所以我的颜色不会变
      </p>
      <section>
        <p>
          因为我是section的最后一个孩子,所以我的颜色也变了
        </p>
      </section>
      </div>
    <div class="fifth">
      <p>
        因为我是div的第一个孩子,所以我的颜色不会变
      </p>
      <p>
        因为我是div的第二个孩子,所以我的颜色会变p:nth-child(2)
      </p>
      <p>
        因为我是div的第三个孩子,所以我的颜色不会变
      </p>
    </div>
    <div class="sixth">
      <p>
        因为我是div的倒数第四个孩子,所以我的颜色不会变
      </p>
      <p>
        因为我是div的倒数第三个孩子,并且是p标签,所以我的颜色会变p:nth-last-child(3)
      </p>
      <div>
        虽然我是div的倒数第二个孩子,但是我不是p标签,所以颜色不变p:nth-last-child(2)
      </div>
      <p>
        因为我是div的倒数第一个孩子,所以我的颜色不会变
      </p>
    </div>
    <div class="seventh">
      <p>
        虽然我是p标签的同级兄弟,但我的顺序是1,所以颜色不变
      </p>
      <p>
        虽然我是p标签的同级兄弟,但我的顺序是2,所以颜色不变
      </p>
      <div>
       虽然我是p标签的同级兄弟,但我的类型和p标签不一样,所以颜色不变
      </div>
      <p>
        因为我是同类型p的同级兄弟第三个,所以我的颜色会变p:nth-of-type(3)
      </p>
    </div>
    <p>后面的nth-last-of-type(n)/first-of-type/last-of-tye都是类似的</p>
    <div class="eighth">
      <div>
        <p>
        我的父元素div只包含我这个子元素p,所以我的颜色会变 p:only-child
        </p>
      </div>
      <div>
        <p>
        我的父元素div包含两个子元素p,所以我的颜色不会变
        </p>
        <p>
        我的父元素div包含两个子元素p,所以我的颜色不会变
        </p>
      </div>
    </div>
    <div class="nineth">
      <div>
          <p>
          我的父元素div包含两个同类型的子元素p,所以我的颜色不会变
          </p>
          <p>
          我的父元素div包含两个同类型的子元素p,所以我的颜色不会变
          </p>
        </div>
        <div>
          <p>
          我的父元素div只包含一个同类型的子元素p,所以我的颜色会变
          </p>
          <section>
          虽然我也是满足同类型的子元素,但不是p标签,所以颜色不会变
          </section>
        </div>
    </div>
    <div class="tenth">
      <div></div>
      <div>因为我的父元素有我这这些文本(子元素),所以颜色不会变</div>
    </div>
    
    

    8 否定伪类选择器

    该类选择器只有一个:
    在这里插入图片描述

    Demo

    CSS

    .first div:not(p){
      color: #F00;
    }
    

    HTML

    <div class="first">
       <div>
         <p>
         因为我排除在外的元素,所以颜色不会变
         </p>
         <section>
         因为我排除在外的元素,所以颜色会变
         </section>
         <br />
         <sapn>
         因为我排除在外的元素,所以颜色会变
         </sapn>
       </div>
    </div>
    

    更多参考
    https://www.cnblogs.com/jiumen/p/11390228.html

  • 相关阅读:
    bzoj4537: [Hnoi2016]最小公倍数
    bzoj4331: JSOI2012 越狱老虎桥
    bzoj4558: [JLoi2016]方
    bzoj4209: 西瓜王
    bzoj2653: middle
    bzoj4671: 异或图
    bzoj4771: 七彩树
    shell java应用启动脚本(app.sh)
    Springboot 构建http服务,返回的http行是'HTTP/1.1 200' 无状态码描述 客户端解析错误
    MariaDB(Mysql)-主从搭建
  • 原文地址:https://www.cnblogs.com/tfxz/p/13251766.html
Copyright © 2020-2023  润新知