从零开始前端学习[12]:css样式中的高级选择器

css样式中的高级选择器

  • 高级选择器一
  • 高级选择器二

提示
博主:章飞_906285288
博客地址:http://blog.csdn.net/qq_29924041


高级选择器一

1:多元素选择器

多元素选择器,就是同时能够选中多个标签元素,每个元素使用逗号隔开。

如下所示:
E,F(多元素选择器)
#box,.wrap{width:100px;height:100px}
含义:同时去选中#box元素,也去匹配到.wrap元素。即可以同时去选中多个元素
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
    .main{width: 1200px;background: black;border: 1px solid red;margin: 50px auto;}
    p{width: 100px;height: 100px;line-height: 100px;text-align: center}
    .main .p1,.main .p2{background: red;margin:10px;}
  </style>
</head>
<body>
  <div class="main">
    <p class="p1">p1</p>
    <p class="p2">p2</p>
  </div>
</body>
</html>

显示效果如下所示:

这里写图片描述

后代选择器

什么是后代??现实中我们说的某某人的后代的时候,这个后代包括了其所有子孙,从儿子到孙子等等。那么在前端中的后代选择器,同样也是一样,从父级标签开始,往后所有的都称为其后代。

 如下所示:
 E F(后代选择器)
 匹配到E元素所有后代叫做F的元素(包括子、孙),以空格隔开
 div ul li{ height: 0; width: 0; }
 含义: 匹配到div的后代所有ul ,且ul的所有后代的li
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
        .main{width: 1200px;background: black;border: 1px solid red;margin: 50px auto;}
        p{width: 100px;height: 100px;line-height: 100px;text-align: center;color: white}
        .main .d1 .p2{background: red;margin:10px;} /*后代选择器选中main的后代,在选择后代d1,然后选择d1的后代p2*/
        ul{color: white;margin: 30px 0px;}
        .main .ul1 li{height: 20px;width: 50px;background: green;margin-top: 5px}
  </style>
</head>
<body>
<div class="main">
  <div class="d1">
    <p class="p1">p1</p>
    <p class="p2">p2</p>
    <ul class="ul1">
      <li>ul1</li>
      <li>ul2</li>
      <li>ul3</li>
      <li>ul4</li>
    </ul>
    <ul class="ul2">
      <li>ul21</li>
      <li>ul22</li>
      <li>ul23</li>
      <li>ul24</li>
    </ul>
  </div>
</div>
</body>
</html>

后代选择器的显示:

这里写图片描述
在上面通过后代选择器来选择p2和ul1,来设置其样式

子元素选择器(子代选择器)

什么是子代?现实中的子代即父子关系,有直系的关系,那么在前端中,父级标签下面的标签,即是这个父级标签的子级标签,这种关系也就叫做子代选择器

如下所示:
E>F(子元素选择器)
选择到E元素的直接子代F
ul > li{ height: 100px; width: 100px; }
选择到ul的直接子代li
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
      .main{width: 1200px;margin: 50px auto;border: 1px solid green}
      .main div>p{width: 100px;height: 100px;background: deeppink}
      .main div>span{color: #00aa00}
  </style>
</head>
<body>
  <div class="main">
    <div>
      <p>我就是一个小小的p</p>
      <span>这是span啊,认识不啦</span>
    </div>
  </div>
</body>
</html>

显示效果如下所示:

这里写图片描述

毗邻选择器

毗邻,什么毗邻,现实中也就是你家的邻居,但是这点也有不一样,是紧挨着你家的邻居,在前端的概念中,这样的毗邻选择器同样也是,就是紧挨着的第一个元素:

E+F(毗邻选择器)
选择到E元素紧邻的F元素
#box+p{ background: green; }
 选择到#box紧邻的p

注意:类似p+p这种若后面有很多p那么除了第一个以外其他紧邻的p也会被选中

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
        .main{width: 1200px;margin: 50px auto;border: 1px solid red}
        .main div+a{color:deeppink}
        .main div+p{width: 100px;height: 50px;}  /*因为p不是div的毗邻选择器,所以并不能选中*/
        .main div a+p{width: 50px;height: 25px;background: green} /*选中紧邻a标签的p元素**/
        .main div p+p{width: 100px;height: 100px;background: blue;margin-bottom: 5px} /**p+p元素是选中p元素紧邻的p元素,会依次往下选取,当然同样也会选中第一个p*/
  </style>
</head>
<body>
  <div class="main">
    <div>
      <a href="#">可点击的a标签</a>
      <p>第一个p</p>
      <p>第二个p</p>
      <p>第三个p</p>
      <p>第四个p</p>
    </div>

  </div>
</body>
</html>

显示的效果如下所示:

这里写图片描述

所有的注释都在上面标注下来了


高级选择器二

高级选择器二中的所有分类其实都是针对属性来说的,那什么是属性,类似width,height,href这样的值就叫做属性,后面的值就叫做属性值,本分类下主要是根据属性,或者属性值,亦或者是多个属性来进行匹配的。

匹配属性选择器

匹配属性选择器即是匹配到指定属性的,针对同一个标签中来说的,一般情况下,如果没有这个属性的话,匹配到的将是多个元素

E[atrr] 匹配具有atrr属性的E元素
显示如下:a[href]{ color: red;}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
        .main{width: 1200px;margin: 50px auto;border: 2px solid red}
        a[style]{color: red}
  </style>
</head>
<body>
  <div class="main">
    <a href="#" style="text-decoration: line-through">点我试试</a><br>
    <a href="#">你敢点我试试??</a>
  </div>
</body>
</html>

显示如下:
这里写图片描述

匹配具有attr属性且值只为val的E元素

即在匹配的过程中,是按照属性,并且按照属性值来进行匹配到指定的元素的过程

如下使用:
E[atrr=val] 匹配具有atrr属性且值只为val的E元素(注意值要打引号)
a[href=“www.baidu.com”]{ color: red; }

在这里针对上述的一个案例来进行修改:

 <div class="main">
    <a href="#" style="text-decoration: line-through">点我试试</a><br>
    <a href="#h1">你敢点我试试??</a>
  </div>

style:
      a[href="#h1"]{background: deeppink;color: #00dd00}

显示的结果如下:

这里写图片描述
根据href=”#h1”的规则来进行匹配;

匹配属性为attr且值包含或者为val的E元素,用于选取属性值中包含指定词汇的元素

用于选取属性值中包含指定词汇的元素,首先是包含val或者等于val值的属性的标签。

显示如下:
E[atrr~=val]   匹配属性为atrr且值包含或者为val的E元素,用于选取属性值中包含指定词汇的元素
div[class~="somebody"]{height: 100px; width: 100px;}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
        .main{width: 1200px;background: deeppink;border: 1px solid green;margin: 50px auto}
        p{width: 100px;height: 100px}
        p[class~="x_type1"]{background: gold}
        p[class~="somebodytype"]{background: greenyellow}
  </style>
</head>
<body>
  <div class="main">
    <p class="x_type1">p1</p>
    <p class="z_type3">p2</p>
    <p class="y_type2 somebodytype">p3</p>
    <p class="f_type4">p4</p>
  </div>

</body>
</html>

显示如下所示:
这里写图片描述

注意注意:
刚开始学这个的时候,我原来以为的是这个匹配只要是在一个class中包含了这一个单词的一部分的时候就默认选择,即class=”type”,那么
p[class~=”t”]{}这样就可以去获取,但是后来没有成功,原来并不是说局部匹配规则,而是因为在前端中,类名可以是多个,它是以单个类名为最小单位来进行匹配的,那么这就是它默认匹配的最小单位应该是类名

            <div class="c2">    
                <div class="c11-xxxxx ">1</div>
                <div class="c11">2</div>
            </div>
style为:
    /*选择到值只为c11或者以c11开头并且以连词符“-”连接的标签*/
            div[class|="c11"]{
                height: 50px;
                width: 200px;
                background: red;
                margin-bottom: 10px;
            }
匹配所有 有attr1属性 且有attr2属性 且attr2的值为val的E元素

这种选择器是按照两种属性匹配,即首先按照attr1来进行匹配,然后再按照attr2=val来进行匹配操作
使用如下:

E[attr1][atrr2=val] 匹配所有 有attr1属性 且有attr2属性 且attr2的值为val的E元素
a[href][title=“商品图片”]{ height:100px; width: 100px; }

代码如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8-->
  <meta name="Generator" content="EditPlus®">   <!--编辑器的名称-->
  <meta name="Author" content="作者是谁">       
  <meta name="Keywords" content="关键词">
  <meta name="Description" content="描述和简介">
  <style type="text/css">                                        
        body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;}
        ul,ol{margin: 0; list-style: none; padding: 0;}
        a{ text-decoration: none; }
        *{ margin: 0; padding: 0; }
      .main{width: 1200px;margin: 50px auto;border: 1px solid red}
      img[alt][title="first"]{width: 200px;height: 200px}
      img[src][title="second"]{width: 100px;height: 100px}
  </style>
</head>
<body>
  <div class="main">
    <div><img src="../images/1.png" alt="加载失败了" title="first"></div>
    <div><img src="../images/2.png" alt="加载也失败了" title="second"></div>
  </div>
</body>
</html>

显示如下:
这里写图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值