CSS3中的选择器(属性选择器、后代选择器、伪类选择器、伪元素选择器)


一、CSS3中的属性选择器

总结:
选择器[属性1][属性2]… 同时拥有多个属性
选择器[属性名^=属性值] 以 属性值 开头
选择器[属性名$=属性值] 以 属性值 结尾
选择器[属性名*=属性值] 包含 属性值
选择器[属性名~=属性值] 属性值是以空格分隔的独立部分

代码示例如下:

    <style>
        *{margin: 0;padding: 0;}
        /* 选择具有.cartoon类的图片 加黄边 */
        .cartoon{border: 3px solid yellow;}
        /* 选择具有alt属性的图片 加橙色边 */
        img[alt]{border: 3px solid orange;}
        /* 选择具有title属性的图片 加灰色边  */
        img[title]{border: 3px solid grey;}
        /* 选择具有title属性 且title属性为"小狗" 给黑边 */
        img[title="小狗"]{border: 3px solid black;}
        /* 选择具有title属性 且title属性以"猫"为开头 给红边 ^  */
        img[title^="猫"]{border: 3px solid red;}
        /* 选择具有title属性 且title属性以"猫"为结尾 给紫色边 $  */
        img[title$="猫"]{border: 3px solid purple;}
        /* 选择具有title属性 且title属性包含"猫"   给蓝边 *  */
        img[title*="猫"]{border: 3px solid blue;}
        /* 具有alt属性 并且alt属性中"猫"是以空格分隔的独立部分 加绿色边 */
        img[alt~="猫"]{border: 3px solid green;}
        /* 多属性 既有title又有alt */
        /* img[title][alt]{border: 3px solid rgb(240, 21, 86);} */
        /* 选择具有.cartoon 加橙色边 */
        img[class~="cartoon"]{border: 3px solid orange;}
    </style>
    
<body>
    <img src="../images/02/1.jpg" alt="" title="">
    <img src="../images/02/2.jpg" title="多啦a梦机器猫" >
    <img src="../images/02/3.jpg"  alt="加菲 猫" class="cartoon">
    <img src="../images/02/4.jpg"   alt="猫 和老鼠" class="cartoon">
    <img src="../images/02/5.jpg" alt="龙-猫" title="龙-猫"  class="cartoon">
    <img src="../images/02/6.jpg" title='黑猫警长' >
    <img src="../images/02/7.jpg" title="小狗">
    <img src="../images/02/8.jpg" title="猫王" >
    
</body>

结果如下:
在这里插入图片描述

二、CSS3中的后代选择器

        空格 后代选择器
        + 下一个兄弟
        ~ 下边所有的兄弟
        > 儿子选择器

代码示例如下:

    <style>
        *{margin: 0;padding: 0;}
         /* 选择section的后代 加蓝色边框 */
         section div{border:1px solid blue}
         /* 选择section 的第一代p 子代 加橙色边框 */
         section>p{border:1px solid orange}
         /* 选择 金敬姬 后面紧挨着的第一个弟弟div,加绿边 */
         .widow+div{border:1px solid green}
          /* 选择 金敬姬 下边所有的兄弟姐妹 */
         .widow~div{border:1px solid red}
    </style>
    <section>
        金日成section
        <div>金正日(男)
           <p>金惠姬(女)</p>
           <div>金正哲</div>
           <div>金正恩</div>
        </div>
        <div>金万一</div>
        <p class="widow">金敬姬</p>
        <div>金安一</div>
        <div>金平一</div>
        <div>金庆真</div>
    </section>

结果如下:
在这里插入图片描述

三、CSS3中的伪类选择器

1.伪类选择器之child

代码示例如下:

    <style>
        *{margin: 0;padding: 0;}
        h2{width:33.3%;float:left}
        section{width:33.3%;float:left}

        /* 文档根元素标签 */
        html{background-color: #ccc;}
        :root{background-color: #ccc;}

         /* 每家的第二个孩子加橙色标签   nth-child会找当前标签的父亲  */
         img:nth-child(2){border: 3px solid orange;}

         /* 每家最大的孩子 */
         img:first-child{border:3px solid red;}
         img:nth-child(1){border:3px solid red;}

         /* 每家最小的孩子 */
         img:last-child{border: 3px solid pink;}

         /* 独生子女的孩子加蓝色 */
         img:only-child{border: 3px solid blue;}

          /* 排行是偶数的加颜色  n是从0开始  0  , 1  , 2 ... */
          img:nth-child(2n){border: 3px solid purple;}
          img:nth-child(even){border: 3px solid purple;}

          /* 排行是奇数的加颜色*/
          img:nth-child(2n+1){border: 3px solid yellow;}
          img:nth-child(odd){border: 3px solid yellow;}

           /* 排行前三的孩子加颜色  3  2  1 */
           img:nth-child(-n+3){border: 10px solid grey;} 

    </style>

<body>
    <div>
        <h2>贾赫</h2>
        <h2>贾政</h2>
        <h2>贾敏</h2>

        <section class="jiahe">
           <img src="../images/04/jialian.png" width="260" height="210"  alt="">
           <img src="../images/04/jiayingchun.png" width="260" height="210"  alt="">
        </section>

        <section class="jiazheng">
           <img src="../images/04/jiazhu.png" width="260" height="210"  alt="">
           <img src="../images/04/jiayingchun.png" width="260" height="210"  alt="">
           <img src="../images/04/jiabaoyu.png" width="260" height="210">
           <img src="../images/04/jiatanchun.png" width="260" height="210">
           <img src="../images/04/jiahuan.png" width="260" height="210">
        </section>
        <section class="jiamin">
            <img src="../images/04/lindaiyu.png" width="260" height="210"  alt="">
        </section>
    </div>
    
</body>

结果如下,图片及名字仅为示例:
在这里插入图片描述

2.伪类选择器之type

	 <style>
        *{margin: 0;padding: 0;}
        h2{width:33.3%;float:left}
        section{width:33.3%;float:left}
        /* 第二个必须是div 才能变成红色  但是第二个是p  严格匹配 */
        div:nth-of-type(2){border: 3px solid red;}
        /* section下的第一个p加橙色边 */
        div:nth-of-type(1){border:3px solid orange}
        /*section下的最后一个p 加绿色边 */
        div:last-of-type{border: 3px solid green;}
        /* section  p唯一的独生女 */
        p:only-of-type{border: 3px solid blue;}
        /* section div 奇数  加pink */
        div:nth-of-type(2n+1){border: 3px solid pink;}
        div:nth-of-type(odd){border: 3px solid pink;}
        /* section p 偶数 加紫色 */
        p:nth-of-type(2n){border: 3px solid purple;}
        p:nth-of-type(event){border: 3px solid purple;}
    </style>

type和child区别?

相同点:
基本用法是一样的
nth-child(n) nth-of-type(n) n是从0,1,2 …
first-child first-of-type 第一个
last-child last-of-type 最后一个
nth-child(even) nth-of-type(even) even都是偶数
nth-child(odd) nth-of-type(odd) odd都是奇数
only-child only-of-type 惟一的一个

不同点:
child会严格匹配找到父亲下的符合条件的那个元素 不论元素是什么都会查
type会沿着元素去数数 会沿着当前元素去找

3.伪类选择器之hover和active

(1)hover:鼠标经过或停留时触发。
(2)active:当在一个链接上点击时触发激活。

    <style>
        *{margin: 0;padding: 0;}
        section{
            width: 300px;
            height: 430px;
            background: url(../images/06/bg.jpg);
            margin: 100px auto;
        }
        /* hover 鼠标经过触发 */
        section:hover{ 
            background-image: url(../images//06/hover.jpg);
        }
        /* 当在一个链接上点击时,它就会成为活动的(激活的) */
        /* active 激活的 */
        section:active{ 
            border: 5px solid red;
        }
    </style>
    
<body>
    <section></section>
</body>

4.伪类选择器之表单新增

fieldset是一个框

<body>
    <fieldset>
        <legend>表单</legend>
    </fieldset>
</body>

结果如下:
在这里插入图片描述
代码示例如下:

结果如下,当勾选同意时:
在这里插入图片描述
不勾选时:
在这里插入图片描述

5.伪类选择器之空和非空

代码示例如下:

	<style>
        li{
            list-style-type:none;
            height:30px;
            line-height: 34px;
        }

        li b{
            width:18px;
            height:18px;
            line-height:18px;
            margin:8px 4px 0 4px;  /* 顺时针  */
            background-color: red;
        }
        /* 空元素 */
        li:empty{
            border: 1px solid black;
        }
        /* 非空元素 */
        li:not(:empty){
            border: 1px solid pink;
        }
        /* 除了前三个的排名数字都换背景 */
        li:not(:nth-of-type(-n+3))>b{
            background-color: yellow;
        }
    </style>
    
<body>
    最喜欢的歌手排行榜
    <ol>
        <div>ceshi</div>
        <li><b>01</b>张国荣</li>
        <li><b>02</b>周杰伦</li>
        <li><b>03</b>王菲</li>
        <li><b>04</b>孙燕姿</li>
        <li><b>05</b>陈奕迅</li>
        <li></li>
    </ol>
    
</body>

结果如下:
在这里插入图片描述

6.伪元素选择器之target(锚点)

代码示例如下:

    <style>
        ul{
            position:fixed;
            top:100px;
        }

        article{
            width:960px;
            margin:20px auto
        }

        /* 锚记 */
        h2:target{color: brown;}
        /* 选中的时候背景给颜色 */
        p::selection{background-color: rosybrown}

    </style>

<body>
    <!-- 什么是锚点? -->
    <!-- 当点击某个带有锚点的a标签时,会将有href中id的元素显示到页面的最上方 -->
    <ul>
        <li><a href="#title1">CSS(层叠样式表)</a></li>
		<li><a href="#title2">实例</a></li>
		<li><a href="#title3">发展历史</a></li>
		<li><a href="#title4">使用方法</a></li>
    </ul>

    <article>
        <h2 id="title1">CSS (层叠样式表)</h2>
		<p>层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。</p>
		<p>CSS目前最新版本为CSS3,是能够真正做到网页表现与内容分离的一种样式设计语言。相对于传统HTML的表现而言,CSS能够对网页中的对象的位置排版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力,并能够进行初步交互设计,是目前基于文本展示最优秀的表现设计语言。CSS能够根据不同使用者的理解能力,简化或者优化写法,针对各类人群,有较强的易读性。</p>
		<h2 id="title2">实例</h2>
		<p>如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器。[1] d 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义。以下的样式规则应用于元素属性 id="para1":</p>
		<p>class 选择器用于描述一组元素的样式,class选择器有别于id选择器,class可以在多个元素中使用。class 选择器在HTML中以class属性表示, 在 CSS 中,类选择器以一个点"."号显示:在以下的例子中,所有拥有 center 类的 HTML 元素均为居中。</p>
		<h2 id="title3">发展历史</h2>
		<p>作为一项W3C推荐,CSS1发布于 1996年12月17 日。1999 年1月11日,此推荐被重新修订。</p>
		<p>作为一项 W3C 推荐,CSS2发布于 1999年1月11日。CSS2添加了对媒介(打印机和听觉设备)和可下载字体的支持。</p>
		<h2 id="title4">使用方法</h2>
		<p>有三种方法可以在站点网页上使用样式表:外联式Linking(也叫外部样式):将网页链接到外部样式表。嵌入式Embedding(也叫内页样式):在网页上创建嵌入的样式表。内联式Inline(也叫行内样式):应用内嵌样式到各个网页元素。其中,优先级:内联式 > 嵌入式 > 外联式</p>
		<p>当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观。</p>
		<p>当特殊的样式需要应用到个别元素时,就可以使用内联样式。 使用内联样式的方法是在相关的标签中使用样式属性。样式属性可以包含任何 CSS 属性。以下实例显示出如何改变段落的颜色和左外边距。</p>
    </article>
</body>

结果如下:
在这里插入图片描述
在这里插入图片描述

四、CSS3中的伪元素选择器

1.伪元素选择器之before和after

代码示例如下:

    <style>
        div{
            width:200px;
            height:200px;
            border:1px solid blue
        }
        /* 
        IE8中 
        :before 是在盒子内容最前插入
        :after  是在盒子之后插入内容
        在IE9中 
        将:before和:after归为了伪元素::before和::after
        
        :和::在使用上没有区别  都代表伪元素 目前使用::较多
         */
         section::before{
             content: "在前面插入的内容";
             width: 200px;
             height: 200px;
             border: 1px solid red;
             display: block;
         }
         section::after{
             content: "在后面插入的内容";
             width: 200px;
             height: 200px;
             border: 1px solid yellow;
             display: block;
         }
    </style>

<body>
    <section>
        <div>你好,世界</div>
    </section>
</body>

结果如下:
在这里插入图片描述

2.伪元素选择器的使用

结果如下:
在这里插入图片描述
在这里插入图片描述

3.伪元素选择器之清除浮动

代码示例如下:

<style>
        *{margin: 0; padding: 0;}
        .box-top{
             /* width:600px; */
         }
         .box-left{
             width:300px;
             height:300px;
             background-image: url("../images/12/01.jpg");
             float:left
         }
         .box-right{
             width:300px;
             height:300px;
             background-image: url("../images/12/02.jpg");
             float:left
         }

         .box-bottom{
             width:800px;
             height:400px;
             background-color: tomato;
         }

         .clearfix::after{
             content: "";
             display: block;
             clear: both;/* 清除浮动 */
             height: 0;
             visibility: hidden;
         }

         /* 兼容IE6的做法 */
         .clearfix{
             zoom: 1;
         }
    </style>

<body>
    <div class="box-top clearfix">
        <div class="box-left"></div>
        <div class="box-right"></div>
    </div>
    <div class="box-bottom"></div>
</body>

如果父元素box-top不加高度,此时它的高度就会塌陷下面的元素就会钻上去,结果如下:
在这里插入图片描述
利用伪元素清除浮动后,结果如下:
在这里插入图片描述

4.伪元素值selection

代码如下:

<style>
        article{
            width:150px;
            margin:50px auto
        }
        /* 改变第一个字的颜色 */
        article>p::first-letter{color: yellow;}
        
        section{
            width:800px;
            margin:50px auto
        }
        /* 改变第一行的颜色 */
        section::first-line{color: blue;}
        div{
            width:200px;
            margin:50px auto;
        }
        /* 选中给背景色 */
        ::selection{background-color: pink;}
        
    </style>

<body>
    <article>
		<p>秦时明月汉时关,</p>
	    <p>万里长征人未还。</p>
	    <p>但使龙城飞将在,</p>
	    <p>不教胡马度阴山。</p>
	</article>
    <section>
		<p>明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?</p>
		<p>转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。</p>
	</section>
    <div>
		<p>四张机</p>
		<p>鸳鸯织就欲双飞</p>
		<p>可怜未老头先白</p>
		<p>春波碧草</p>
		<p>晓寒深处</p>
		<p>相对浴红衣</p>
	</div>
</body>

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值