关于CSS--选择器

本文包含CSS1&2和CSS3所有的选择器介绍。

CSS选择器

了解各种选择器的使用,我们就可以更好地去完成文本样式!

1. 类选择器

在一个HTML文件中,类选择器可以多次被调用。

<!--命名:-->
.name{}
<!--调用:-->
<p class="name"></p>
  • 也可以这样定义样式: p.name{}

2. 标签选择器(又称元素 / 类型选择器)

比如说<html>,<body>,<p>等等,只要符合标签,都可自动调用。

<!--命名:-->
p{}  <!--标签名{}-->
<!--调用:-->
<p></p>    <!--<标签>-->

3. ID选择器

在一个HTML文件中, ID选择器只能被调用一次。

<!--命名:-->
#name{}
<!--调用:-->
<p id="name"></p>

4. 伪类选择器

伪类用于当已有元素处于的某个状态时,为其添加对应的样式。即在默认状态下不生效。

(1) 动态伪类选择器

每个元素都会有以下状态:( 比较常见的是超链接a.)

        :link{}
         /*访问前的状态*/  
        :hover{
        /*鼠标悬停时的状态*/ 
        :active{}
        /*鼠标点击时的状态*/
        :visited{}
        /*访问后的状态*/ 
        :focus{}
        /*访问时获取焦点,比如说表单元素内容框被选中*/ 

(2)结构伪类选择器

以某元素相对于其父元素或兄弟元素的位置来获取元素的结构伪类。

  • E:root(匹配E元素在文档的根元素)
    只用于页面中存在元素的地方,在E:root根选择器中,html页面的根永远都是html元素。
    比如说下面的这个例子:
<html>
<head>
    <title>E:root  根选择器</title>
    <style>
       html:root{
            color:darkblue;
            font-size: 28px;
        }
    </style>
</head>
<body>
<p>我有一亿个美好的愿望</p>
</body>
</html>

结果显示:
在这里插入图片描述

  • E: first-child(匹配父元素的第一个子元素并且是E,如果第一个子元素不是E元素,不符合)
    E: last-child(匹配父元素的最后一个子元素并且是E)
    E: only-child(匹配父元素仅有的一个子元素并且是E)
    E: nth-child(n)(匹配父元素的第n个子元素并且是E)
    E: nth-last-child(n)(匹配父元素的倒数第n个子元素并且是E)

  • E: first-of-type(匹配同类型中的同级兄弟的第一个元素E)
    E: last-of-type
    E: only-of-type
    E: nth-of-type(n)
    E: nth-last-of-type(n)

形式相对类似,选一个做举例:

<html>
	<head>
		<title>结构伪类选择符</title>
		<style>
			p:first-of-type{color:firebrick;}
			p:first-child{background: lightgreen;}
		</style>
	</head>
	<body>
		<div id="A">
			<h4>我是父亲的第1个子元素</h4>
			<p>我是父亲的第2个子元素,我虽然是父亲的第2个元素,但是我是父亲p元素中第1个p元素,所以选中了</p>
		</div>
		<hr />
		<div id="B">
			<p>我不仅是父亲的第1个子元素,我还是父亲的第一个p标签,所以我被双重选中了</p>
			<p>我是父亲的第2个子元素</p>
		</div>
	</body>
</html>
			

结果显示:
在这里插入图片描述

总结而来,-child和-of-type的区别:
(1)-child必须要满足父元素的第某个元素是E元素,否则不符合。
(2)-of-type只需要去找第某个E元素即可。

  • E:empty(匹配没有任何子元素(内容)的元素E,元素内容为空白)

举例子:

<html>
<head>
    <title> E:empty</title>
    <style>
      p:empty{
         height: 20px;
          background: aqua;
      }
    </style>
</head>
<body>
<p>11111111111111111111</p>
<P></P>
<P>33333333333333333333</P>
</body>
</html>

结果显示:

在这里插入图片描述

(3)UI元素状态伪类选择器

  • E:checked (仅限于input中type="radio"或者type=“checkbox”)
    匹配用户界面上处于选中状态的元素E
  • E:enabled
    匹配用户界面上处于可用状态的元素E(默认状态)
  • E:disabled
    匹配用户界面上处于禁用状态的元素E

来看一个整体的例子:

<!DOCTYPE html>
<html>
<head>
    <title>UI元素状态伪类选择器</title>
    <style>
   fieldset{
    height: 100px;
   }
   input:disabled{
       background: sienna;
       color: red;
   }
   input:enabled{
       background: darkseagreen;
       color: hotpink;
   }
   /*radio或者checkbox被checked时,它的相邻兄弟元素span的样式*/
   input:checked+span{
       background: red;
   }
  </style>
</head>
<body>
<form method="post" action="">
    <!--表单分组-->
    <fieldset>
        <legend>disabled和enabled</legend>
        <ul>
        <li><label>
           <input type="text" name="id" value="99" disabled /><span>ID</span>
        </label></li>
        <li><label>
            <input type="text" name="user" value=""  />
            <span>昵称</span>
        </label></li>
        <li><label>
            <input type="text" name="pwd" value="" enabled />
            <span>密码</span>
        </label></li>
        </ul>
    </fieldset>
    <fieldset>
        <legend>选中下面的项试试(单选按钮)</legend>
        <ul>
            <li><label><input type="radio" name="sex" value="0" /><span></span></label></li>
            <li><label><input type="radio" name="sex" value="1" /><span></span></label></li>
        </ul>
    </fieldset>
    <fieldset>
        <legend>选中下面的项试试(多选按钮)</legend>
        <ul>
            <li><label><input type="checkbox" name="like" value="0" /><span>蓝色</span></label></li>
            <li><label><input type="checkbox" name="like" value="1" /><span>红色</span></label></li>
            <li><label><input type="checkbox" name="like" value="2" checked /><span>黑色</span></label></li>
        </ul>
    </fieldset>
</form>
</body>
</html>

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

(4)否定伪类选择器

  • E:not(F) (匹配所有除去元素F以外的E元素)
    例如: p:not(:nth-last-of-type(2)){}

5. 伪元素选择器(又称伪对象元素)

在CSS3之后,要求写为:: ,由于兼容性的原因,我们可以根据自己的喜好选择写成单冒号或者双冒号,都可以。不过有的强制要求写双冒号的必须记清楚。

(1) E:first-line
设置对象内第一行的样式

举个例子:

<html>
<head>
    <title>first-letter</title>
    <style>
        p:first-line{
            font-size: 20px;
            color:turquoise;
            margin-left: 20px;
        }
    </style>
</head>
<body>
    <p>春晓</p>
    <p>春眠不觉晓</p>
    <p>处处闻啼鸟 <br>
       闻啼鸟</p>
</body>
</html>

结果显示:
在这里插入图片描述
(2) E:first-letter
设置对象内第一个字符的样式

用上一个同样的例子修改一下样式:

<style>
 p:first-letter{
            color:#ff9900;
        }
</style>

结果显示:
在这里插入图片描述
(3) E:before
设置在对象前(与content属性一起使用)
(4) E:after
设置在对象后(与content属性一起使用)

举例子:

<style>
 p::after{
            content: "";
            position: absolute;
            top: 40px;
            left: 85px;
            width: 20px;
            height: 20px;
            background: red;
        }
</style>

结果显示:
在这里插入图片描述
(5) E::selection (必须是双冒号)
设置对象被选中状态时触发的效果,可应用少量的CSS属性:color,background, cursor,outline.

比如:

<style>
 p::selection{
            background: red;
        }
    </style>

结果显示:(当你用鼠标选中这些文字时)
在这里插入图片描述

总结伪类选择器和伪元素选择器的本质区别:
(1)伪类是指已有元素处于的某个状态,可以说是为了弥补常规选择器的不足,以便获得更多的信息。
(2)伪元素是文档树中不存在的信息,相当于创建了一个内容的虚拟容器,比如说::before是不存在,
(3)可以同时使用多个伪类,而伪元素同时只能使用一个。

6. 关系选择器

(1)后代选择器(又称包含选择器)

  • E F : 选择所有被E元素包含的F元素
  <style>
    /*格式:父元素/祖先元素   子元素*/
    div a{ }
  </style>

(2)父子选择器

  • E>F : 选择所有作为E元素的子元素F
  <style>
    /*格式:父元素>子元素*/
    .box>a{ }
  </style>

(3)相邻兄弟选择器

  • E+F: 选择紧跟在E元素后面的F元素 ,且两者有相同的父元素
  • 比如说div+p 是指div标签之后紧跟的p,在</div>之后。

例如:

<html>
<head>
    <title>相邻兄弟选择器</title>
    <style>
        h3+p{
            color:red;
        }
    </style>
</head>
<body>
<h3>三字经</h3>
<p>人之初</p>
<p>性本善</p>
</body>
</html>

结果显示:
在这里插入图片描述

(4)兄弟选择器

  • E~F: E元素后面所有的兄弟F元素,两者有相同的父元素。

例如:同上一个例子,改变它的样式

 <style>
        h3~p{
            color:red;
        }
 </style>

结果显示:
在这里插入图片描述

因此对于相邻兄弟选择器和兄弟选择器的区别就在于: 两元素是否相邻。

7. 选择器分组 / 通用选择器

  • 选择器分组:为了使得样式表更加简洁,可以将有相同样式定义的元素放在一起,并用逗号(,)隔开。
 <style>
   h1,p,.class{
     color:red;
     text-align:center;
}
 </style>
  • 在其中,有个特例就是通用选择器,它可以对所有元素进行设置。
 *{
   padding:0;
   margin:0;
   box-sizing:border-box;
 }

8. 派生选择器

派生选择器允许你根据文档的上下文关系来确定某个标签的样式。
比如说:

<strong>This is a example </strong>  

我们可以根据自己的需求重新定义该标签的样式:

     strong {
        color: red;
        font-style: italic;
     }

9. 属性选择器

  • 在使用属性选择器时,需要使用 [ ]
  • 属性选择器的选择符有7种:
    (1) E[attr]
    选择具有attr属性的E元素
    (2) E[attr=“value”]
    选择具有attr属性并且属性值为value的E元素
    (3) E[attr~=“value”]
    选择具有attr属性,且包含空格,属性值其中一个为value的E元素
    (4) E[attr^=“value”]
    选择具有attr属性, 且属性值以value开头的E元素
    (5) E[attr$=“value”]
    选择具有attr属性, 且属性值以value结尾的E元素
    (6) E[attr*=“value”]
    选择具有attr属性,且属性值中包含value的元素
    (7) E[attr|=“value”]
    选择具有attr属性,且属性值以value开头并有分隔符的e元素

做一个完整的例子将它们对比一下:

<html>
<head>
    <title>属性选择器</title>
    <style>
        body{
            position: relative;
        }
       p[id]{
         font-size: 28px;
        }
        p[id="green"]{
            color:green;
        }
        p[class~="fl"]{
            background: yellow;
        }
        a[href^="http"]{
            color: #ff8800;
            text-decoration: none;
        }
        a[href$="rar"]{
            margin-left: 20px;
        }
        a[href$="rar"]::before{
            content:"";
            width: 20px;
            height: 20px;
            position: absolute;
            top: 310px;
            left: 10px;
            background: url("images/rar.jpg") no-repeat;
            margin-right: 10px;
        }
        p[class*="lu"]{
            color:blue;
        }
        p[id|="red"]{
            background: red;
        }
    </style>
</head>
<body>
<p id="red-1">小红</p>
<p id="green">小绿草</p>
<p class="fl yellow">我最喜欢黄色了</p>
<p class="blue">小兰兰</p>
<br>
<a href="http://www.baidu.com">百度一下,你就知道</a><br />
<br>
<a href="down.rar">点此下载前端最新学习教程</a>
</body>
</html>

结果是这样的:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值