class 和 id 的使用场景?
class
可以把多个class类名放到一个class属性里面,用空格隔开,例:class="btn btn-success follow"
,class 用于多个标签样式相似或完全相同的标签里面
id
是唯一的,同名称的ID在当前页面中最好使用一个,用于页面分块的块级标签上
CSS选择器常见的有几种?
- 基础选择器
*
通用元素选择器,匹配页面任何元素
#id
id选择器,匹配特定id的元素
.class
类选择器,匹配class包含特定类的元素
element
标签选择器 - 组合选择器
E,F
多元素选择器,同时匹配元素E和F
E F
后代选择器,空格分割,匹配E元素所有的后代(不只是子元素,而且包括子元素向下递归)元素F
E>F
子元素选择器,匹配E元素的直接子元素F(不递归)
E+F
直接相邻选择器,匹配E元素之后的相邻的同级元素F
E~F
普通相邻选择器,匹配E元素之后的同级元素F(无论是否直接相邻) - 属性选择器
E[attr]
匹配所有具有属性attr的元素
E[attr=value]
匹配属性值为value的元素 - 伪类选择器
E:first-child
匹配元素E的第一个子元素
E:nth-last-child
匹配其父元素的第n个子元素,第一个编号为1
E:nth-of-type(n)
与:nth-child
作用类似,但是仅匹配使用同种标签的元素
E:nth-last-of-type(n)
与nth-last-child
作用相似,但是仅匹配使用同种标签的元素
E:first-child
匹配父元素的第一个子元素
E:last-child
匹配父元素的最后一个子元素
E:active
匹配鼠标已经在其上按下,但是还没有释放的E元素
E:hover
匹配鼠标悬停其上的E元素
伪元素选择器
E::before
在E元素之前插入生成的内容,配合content来输入要插入的内容
E::after
在E元素之后插入生成的内容
选择器的优先级是怎样的? 对于复杂场景如何计算优先级?
- 优先级(从高到低分别是)
- 在属性后面使用
!important
会覆盖页面内任何位置定义的元素样式 - 作为style属性写在元素标签上的内联样式
- id选择器
#test
- 类选择器
.class
- 伪类选择器
a:hover
- 属性选择器
h1{}
- 标签选择器
div[xxx]
- 统配符选择器
*
- 浏览器自定义
- 复杂场景:
行内样式 ==> 标记为a
id选择器 ==> 标记为b
类,属性 ==> 标记为c
标签 伪类选择器 ==> 标记为d
从a到d分别计算,级别越高的字母得到的统计值越高越优先,统计值相同则向下迭代比较
a:link, a:hover, a:active, a:visited 的顺序是怎样的? 为什么?
正确顺序:a:link
、a:visited
、a:hover
、a:active
原因:
- 如果链接未被点击,正常状态只有
a:link
起效 - 链接如果被点击过,那起效的是
a:link
、a:visited
,后者会覆盖前者效果 - 如果鼠标悬停并且链接已经被点击过,那起效的是
a:link
、a:visited
、a:hover
,a:hover
会覆盖前面所有效果 - 如果鼠标正在点击链接且链接之前已经被点击过,那起效的是
a:link
、a:visited
、a:hover
、a:active
,a:active
会覆盖之前所有效果
以下选择器分别是什么意思?
#header{ } // id为header的元素
.header{ } // class为header的元素
.header .logo{ } // class为header的元素的子元素中class为logo的元素
.header.mobile{ } // class为header且class为mobile的元素
.header p, .header h3{ } // class为header的元素的子元素p和class为header的元素的子元素h3
#header .nav>li{ } // id为header的元素的子元素中class为nav的元素的直接子元素li
#header a:hover{ } // id为header的元素的子元素a链接的鼠标悬停状态
#header .logo~p{ } // id为header的元素的子元素中class为logo的元素的普通相邻元素p
#header input[type="text"]{ } // id为header的元素的子元素input且type必须是text
列出你知道的伪类选择器
E:first-child 匹配元素E的第一个子元素
E:nth-last-child 匹配其父元素的第n个子元素,第一个编号为1
E:nth-of-type(n):与 :nth-child作用类似,但是仅匹配使用同种标签的元素
E:nth-last-of-type(n) 与 nth-last-child作用相似,但是仅匹配使用同种标签的元素
E:first-child 匹配父元素的第一个子元素
E:last-child 匹配父元素的最后一个子元素
E:active 匹配鼠标已经在其上按下,但是还没有释放的E元素
E:hover 匹配鼠标悬停其上的E元素
div:first-child和div:first-of-type的作用和区别
div:first-child div
的父元素下的第一个子元素
div:first-of-type div
的父元素下第一个div元素
指出下面代码的效果并解释
<style>
.item1:first-child{
color: red;
}
.item1:first-of-type{
background: blue;
}
</style>
<div class="ct">
<p class="item1">aa</p>
<h3 class="item1">bb</h3>
<h3 class="item1">ccc</h3>
</div>
.item1:first-child{
color: red;
}
获取类名为.item1的第一个元素 <p class="item1">aa</p>添加字体颜色
.item1:first-of-type{
background: blue;
}
获取类名为.item1的首次出现的标签类型 <p class="item1">aa</p> <h3 class="item1">bb</h3>添加背景色