CSS(2-语法与选择器)
基本语法
注释
只能使用 /* 和 */ 包裹。即不管是单行注释,还是多行注释,都是以 /* 开头,以 */ 结尾
1  | /* css中的单行注释 */  | 
选择器
选择器 声明块
通过选择器可以选中页面中的指定元素,比如 p 的作用就是选中页面中所有的 p 元素声明块
1  | p {  | 
声明块
通过声明块来指定要为元素设置的样式
- 声明块由一个一个的声明组成,声明是一个名值对结构
 - 一个样式名对应一个样式值,名和值之间以 
:连接,以;结尾 
1  | h1 {  | 
样式
内联样式(行内样式)
在标签内部通过 style 属性来设置元素的样式
1  | <p style="color:red;font-size:60px;">内联样式(行内样式)</p>  | 
存在问题:使用内联样式,样式只能对一个标签生效。如果希望影响到多个元素,必须在每一个元素中都复制一遍;并且当样式发生变化时,我们必须要一个一个的修改,非常的不方便。
注意:开发时不要使用内联样式
内部样式
将样式编写到 head 中的 style 标签里,然后通过 CSS 的选择器来选中元素并为其设置各种样式,可以同时为多个标签设置样式,并且修改时只需要修改一处即可。相比于内联样式,内部样式表更加方便对样式进行复用
1  | <style>  | 
存在问题:我们的内部样式表只能对一个网页起作用,它里边的样式不能跨页面进行复用
外部样式
可以将 CSS 样式编写到一个外部的 CSS 文件中,然后通过 link 标签来引入外部的 CSS 文件
1  | <link rel="stylesheet" href="./style.css">  | 
外部样式表需要通过 link 标签进行引入,意味着只要想使用这些样式的网页都可以对其进行引用使样式,可以在不同页面之间进行复用
将样式编写到外部的 CSS 文件中,可以使用到浏览器的缓存机制,从而加快网页的加载速度,提高用户的体验。
选择器
优先级
优先级:!important > 内联样式 > ID 选择器 > 类选择器、属性选择器和伪类选择器 > 元素选择器和伪元素选择器 > 通配符选择器(\*),关系选择器(如后代选择器、子选择器、相邻兄弟选择器等),以及从父元素继承的样式
- 优先级高的样式会覆盖优先级低的样式。
 - 如果两个选择器具有相同的优先级,则后面的样式会覆盖前面的样式。
 - 使用 
!important声明可以覆盖所有其他优先级,但不推荐使用,因为后续调试困难。 
常用选择器
通配选择器
- 作用:选中页面中的所有元素
 - 语法:
*{} 
1  | *{  | 
元素/标签选择器
- 作用:根据标签名来选中指定的元素
 - 语法:
elementname{} 
1  | p{  | 
类选择器
- 作用:根据元素的 class 属性值选中一组元素
 - 语法:
.classname{} 
1  | .blue{  | 
类选择器与 ID 选择器比较
class可以重复使用,id只能使用一次- 可以通过  
class属性来为元素分组 - 可以同时为一个元素指定多个  
class属性 
1  | <p class="blue size"> 类选择器(Class selector)</p>  | 
ID 选择器
- 作用:根据元素的 
id属性值选中一个元素 - 语法:
#idname{} 
1  | #red{  | 
属性选择器
- 作用:根据元素的属性值选中一组元素
 - 语法
 
[属性名]选择含有指定属性的元素[属性名=属性值]选择含有指定属性和属性值的元素[属性名^=属性值]选择属性值以指定值开头的元素[属性名$=属性值]选择属性值以指定值结尾的元素[属性名*=属性值]选择属性值中含有某值的元素
1  | p[title]{  | 
1  | 
  | 
复合选择器
交集选择器
- 
作用:选中同时符合多个条件的元素
 - 
语法:
选择器1选择器2选择器3选择器n{} - 
注意点:
 
- 选择器之间没有任何的连接符号
 - 交集选择器中如果有元素选择器,必须使用元素选择器开头
 
1  | div.red{  | 
并集选择器
- 作用:同时选择多个选择器对应的元素
 - 语法:
选择器1,选择器2,选择器3,选择器n{} 
1  | #b1,h1,span,div.red{  | 
关系选择器
- 父元素:直接包含子元素的元素叫做父元素
 - 子元素:直接被父元素包含的元素是子元素
 - 祖先元素:直接或间接包含后代元素的元素叫做祖先元素;一个元素的父元素也是它的祖先元素
 - 后代元素:直接或间接被祖先元素包含的元素叫做后代元素;子元素也是后代元素
 - 兄弟元素:拥有相同父元素的元素是兄弟元素
 
子元素选择器
- 作用:选中指定父元素的指定子元素
 - 语法:
父元素 > 子元素 - 例子:
A > B 
1  | div.box > p > span{  | 
后代元素选择器
- 作用:选中指定元素内的指定后代元素
 - 语法:
祖先 后代 - 例子:
A B 
1  | div span{  | 
兄弟元素选择器
- 作用:
+选择下一个兄弟,~选择下一堆兄弟 - 语法:
前一个 + 下一个前一个 ~ 下一组 - 例子:
 
A1 + A2(Adjacent sibling combinator)A1 ~ An(General sibling combinator)
1  | p + span{  | 
伪类选择器
伪类(不存在的类,特殊的类)用来描述一个元素的特殊状态,比如:第一个子元素、被点击的元素、鼠标移入的元素.…
伪类一般情况下都是使用 : 开头
:not(selector):否定伪类,将符合条件的元素从选择器中去除:first-child:第一个子元素:last-child:最后一个子元素:nth-child(n):选中第 n 个子元素:nth-last-child(n):选中倒数第 n 个子元素
- n:第 n 个,n 的范围 0 到正无穷
 - 2n 或 even:选中偶数位的元素
 - 2n+1 或 odd:选中奇数位的元素
 
以上这些伪类都是根据所有的子元素进行排序的
:first-of-type:同类型中的第一个子元素:last-of-type:同类型中的最后一个子元素:nth-of-type():选中同类型中的第 n 个子元素
这几个伪类的功能和上述的类似,不同点是他们是在同类型元素中进行排序的
1  | /* ul下所有li,黑色 */  | 
:link未访问的链接:visited已访问的链接:hover鼠标悬停的链接:active鼠标点击的链接:focus选择获得焦点的元素(如输入框)
1  | /* unvisited link */  | 

1  | 
  | 
伪元素选择器
伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用  ::  开头
::first-letter表示第一个字母::first-line表示第一行::selection表示选中的内容::before元素的开始::after元素的最后::before和::after必须结合content属性来使用
1  | /* 段落首字母设置大小为30px */  | 


