CSS的选择符非常多,今天继续总结后面的选择符

1.id和class选择符
某些情况下我们用关系选择符或者伪类选择符无法选中一些元素时,我们可以给这些元素起
个名字或者分类,这就是id和class属性。
下面给出一个id为xxx,class为yyy的a链接:

<a href="" id="xxx" class="yyy">链接</a>

CSS代码:

#xxx{color: red} /*用#选择id(井号)*/
.yyy{text-decoration: none;} /*用.选择类(小数点)*/

  


**id是唯一的,而class可以重复,虽然这是软性规定

 


2.关系选择符
关系选中符又可以分为4类,强调父子和兄弟元素的运用

包含选择符:E F / 子选择符:E>F

为什么这两个要一起说?以为这两个选择符功能非常相似
包含选择符:选中E元素包含在内的一切F元素,包括子元素和子元素的子元素(所有后代)
子选择符:只选中E元素的子元素F,无法作用于子元素的子元素(仅儿子)
例如span包含div和a元素,div元素又包含a元素:

<span>
<a>链接1</a>
<div> <a>链接2</a> </div>
</span>

  

当使用包含选择符时,链接1和链接2都会变成红色字体:

span a{color: red}

  

若使用子选择符,则只有链接1变成红色字体:

span>a{color:red}

  

相邻选择符:(E+F) /兄弟选择符(E~F)

相邻选择符:忽略E元素的一切子元素,选中紧跟在E元素下面的F元素(E和F是同级元素)
兄弟选择符:同样,选中E元素所在级的所有F元素(即E和F是同级元素)

例如,div包含a和p元素,外面跟着内容为a3的a元素:

<div>
  <a>a1</a>
  <a>a2</a>
  <p>p1</p>
  <p>p2</p>
  <p>p3</p>
</div>
  <a>a3</a>

  

CSS代码:

div+a{color: green;} /*div里面的第一个a元素不受影响,同级元素a3变成绿色*/
a~p{color: red;} /*a元素的所有兄弟元素p变成红色(p1,p2,p3)*/

  

3.伪类选择符

E:link/E:visited/E:hover/E:active

这四个选择符关系紧密,旧版浏览器仅兼容超链接,而新版浏览器对hover没有太大限制
E:link为链接未激活的样式
E:visited为链接访问过的样式
E:hover为鼠标悬停的样式(不仅限于链接)
E:active为链接点击时的样式(鼠标按下,未松开的时候)

例如,下面给a链接定义未访问时为黑色且没下划线,访问后为蓝色,鼠标悬停为绿色,点击
时为红色的样式:

a:link{text-decoration: none;color: black;}
a:visited{color: blue;}
a:hover{color: green;}
a:active{color: red;}

  

E:first-of-type/E:last-of-type/E:nth-of-type(n)/E:nth-last-of-type(n)
我把它理解成兄弟队列选择,意思分别是选中第一个,选中最后一个,选中第N个,选中倒数
第N个

例如给出一个列表:

<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>

  

若要第一个li为加粗字体,最后一个为蓝色字体,第二和倒数第二个为红色字体,则CSS代码如下:

li:first-of-type{font-weight: bold;}
li:last-of-type{color: blue;}
li:nth-of-type(2){color: red;}
li:nth-last-of-type(2){color: red;}

  

拓展:E:only-of-type 选中另外一个唯一的同类E元素

E:empty
选中没有任何子元素包括文本的E元素
例如:

<div><a></a></div>
<div>23</div>
<div></div>

  


CSS:

div:empty{border: 1px solid green;}

  


效果:只是第三个div加了边框效果