1. 初识 CSS

1.1 CSS 概述

定义:层叠样式表(Cascading Style Sheets)

作用:美化标签

2. CSS 引入方式

2.1 CSS 的三种样式表

按照 CSS 样式书写的位置(或者引入的方式),CSS 样式表可以分为三大类:

  1. 行内样式表(行内式)
  2. 内部样式表(嵌入式)
  3. 外部样式表(链接式)

2.2 内部样式表

内部样式表(内嵌样式表)是写到html页面内部,是将所有的 CSS 代码抽取出来,单独放到一个<style>标签中。

1
2
3
4
5
6
<style>
div {
color: red;
font-size: 12px;
}
</style>
  • <style>标签理论上可以放在 HTML 文档的任何地方,但一般会放在文档的标签中
  • 通过此种方式,可以方便控制当前整个页面中的元素样式设置
  • 代码结构清晰,但是并没有实现结构与样式完全分离
  • 使用内部样式表设定 CSS 。通常也被称为嵌入式引入,这种方式是我们练习时常用的方式

2.3 行内样式表

行内样式表(内联样式表)是 在元素标签内部的 style 属性中设定 CSS 样式。适合于修改简单样式

1
<div style="color: red; font-size: 12px;">123</div>
  • style 就是标签的属性
  • 在双引号中间,写法要符合 CSS 规范
  • 可以控制当前的标签设置样式
  • 由于书写繁琐,并且没有体现出结构与样式相分离的思想,不推荐大量使用,只有对当前元素添加简单样式的时候,可以考虑使用

2.4 外部样式表

实际开发都是外部样式表,适合于样式比较多的情况。

核心是:样式单独写到 CSS 文件中,之后把 CSS 文件引入到 HTML 页面中使用。

引入外部样式表分为两步:

  1. 新建一个后缀名为 .css 的样式文件,把所有 CSS 代码都放入此文件中。
  2. 在 HTML 页面中,使用标签引入这个文件。
1
<link rel="stylesheet" href="css文件路径">
属性 作用
rel 定义当前文档与被链接文档之间的关系,在这里需要指定为”stylesheet”,表示被链接的文档是一个样式表文件
href 定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径
  • 使用外部样式表设定 CSS ,通常也被称为外链式或链接式引入,这种方式是开发中常用的方式。

2.5 CSS 引入方式总结

样式表 优点 缺点 使用情况 控制范围
行内样式表 书写方便,权重高 结构样式混写 较少 控制一个标签
内部样式表 部分结构和样式相分离 没有彻底分离 较多 控制一个页面
外部样式表 完全实现结构和样式相分离 需要引入 最多 控制多个页面

3. CSS 字体属性

CSS Fonts(字体)属性用于定义字体系列、大小、粗细、和文字样式(如斜体)。

3.1 字体系列

CSS 使用 font-family 属性定义文本的字体系列。

1
2
3
4
5
6
p {
font-famliy:"微软雅黑";
}
div {
font-family: Arial,"Microsoft Yahei","微软雅黑";
}
  • 各种字体之间必须使用英文状态下的逗号隔开
  • 一般情况下,如果有空格隔开的多个单词组成的字体,加引号
  • 尽量使用系统默认自带字体,保证在任何用户的浏览器中都能正确显示
  • 几个字体:body {font-family “Microsoft Yahei”, tahoma,arial,”Hiragino Sans GB”;}

3.2 字体大小

CSS 使用 font-size 属性定义字体大小。

1
2
3
p {
font-size: 20px;
}
  • px(像素)大小是我们网页的最常用的单位
  • 谷歌浏览器默认的文字大小为 16 px
  • 不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小
  • 可以给 body 指定整个页面文字的大小

3.3 字体粗细

CSS 使用 font-weight 属性设置文本字体的粗细。

1
2
3
p {
font-weight: bold;
}
属性值 描述
norml 默认值(不加粗)
bold 定义粗体(加粗)
100 - 900 400 等同于 normal,而 700 等同于 bold,注意这个数字后面不跟单位

3.4 文字样式

CSS 使用 font-style 属性设置文本的风格。

1
2
3
p {
font-style: normal;
}
属性值 作用
normal 默认值,浏览器会显示标准的字体样式 font-style: normal;
italic 浏览器会显示斜体的字体样式

注意:平时我们很少给文字加斜体,反而要给斜体标签(em,i)改为不倾斜字体。

3.5 字体复合属性

字体属性可以把以上文字样式综合来写,这样可以更节约代码:

1
2
3
body {
font: font-style font-weight font-size/line-height font-family;
}
  • 使用 font 属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开
  • 不需要设置的属性可以省略(取默认值),但必须保留 font-size 和 font-family 属性,否则 font 属性将不起作用

3.6 字体属性总结

属性 表示 注意点
font-size 字号 通常使用的单位是 px 像素,一定要带上单位
font-family 字体 实际工作中按照需求来更改字体
font-weight 字体粗细 加粗是 700 或者 bold,不加粗是 normal 或者 400 ,记住数字不带单位
font-style 字体样式 倾斜是 italic,不倾斜是 normal,实际开发中常用 normal
font 字体连写 1.字体连写注意顺序,不能随意换位置 2.其中字号 和 字体 必须同时出现

4. CSS 文本属性

CSS Text(文本)属性可定义文本的外观,比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等。

4.1 文本颜色

color 属性用于定义文本的颜色。

1
2
3
div {
color: red;
}
表示 属性值
预定义的颜色值 red, green, blue, pink…
十六进制 #FF0000, #FF6600, #29D794
RGB 代码 rgb(255, 0, 0) 或 rgb(100%, 0%, 0%)

4.2 对齐文本

text-align 属性用于设置元素内文本内容的水平对齐方式。

1
2
3
div {
text-align: center;
}
属性值 解释
left 左对齐(默认值)
right 右对齐
center 居中对齐

4.3 装饰文本

text-decoration 属性规定添加到文本的装饰。可以给文本添加下划线、删除线、上划线等。

1
2
3
div {
text-decoration: underline;
}
属性值 描述
none 默认。没有装饰效果(常用)
underline 下划线。a 链接 自带下划线(常用)
overline 上划线(几乎不用)
line-through 删除线(不常用)

总结:重点记住如何添加下划线,如何删除下划线,其余了解即可。

4.4 文本缩进

text-indent 属性用来指定文本的第一行的缩进,通常是将段落的首行缩进。

1
2
3
div {
text-indent: 10px;
}

通过设置该属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值。

1
2
3
p {
text-indent: 2em;
}

em 是一个相对单位,就是当前元素(font-size)1个文字的大小,如果当前元素没有设置大小,则会按照父元素的 1 个文字大小。

4.5 行间距

line-height 属性用于设置行间距的距离(行高)。可以控制文字行与行之间的距离。

4.6 文本属性总结

属性 表示 注意点
color 文本颜色 通常使用 十六进制,比如 #fff
text-align 文本对齐方式 可以设定文字水平的对齐方式
text-indent 文本缩进 通常用于段落首行缩进 2 个字的距离
text-decoration 文本装饰 添加下划线 underline,取消下划线 none
line-height 行高 控制行与行之间的距离

5. CSS 基础选择器

5.1 选择器分类

选择器分为基础选择器和复合选择器两个大类

  • 基础选择器是由单个选择器组成的
  • 基础选择器又包括:标签选择器、类选择器、id选择器和通配符选择器

5.2 标签选择器

标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。

语法:

1
2
3
4
5
6
标签名 {
属性1:属性值1;
属性2:属性值2;
属性3:属性值3;
...
}

作用

标签选择器可以把某一类标签全部选择出来,比如所有的<div>标签和所有的<span>标签。

优点

能快速为页面中同类型的标签统一设置样式。

缺点

不能设计差异化样式,只能选择全部的当前标签。

5.3 类选择器

如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器。

类选择器在 HTML 中以 class 属性表示,在 CSS 中,类选择器以一个点“.”号表示。

语法

结构需要用 class 属性来调用 class 类的意思

1
<div class="red">变红色</div>

注意

  1. 类选择器使用 “.” (英文点号)进行标识,后面紧跟类名(自定义,我们自己命名的)。
  2. 可以理解为给这个标签起了一个名字,来表示。
  3. 长名称或词组可以使用 中横线“-” 来为选择器命名。
  4. 不要使用纯数字、中文等命名,尽量使用英文字母来表示。
  5. 命名要有意义,尽量使别人一眼就知道这个类名的目的。

记忆口诀:样式点定义,结构类调用。一个或多个,开发最常用。

5.4 类选择器-多类名

我们可以给一个标签指定多个类名,从而达到更多的选择目的。这些类名都可以选出这个标签。

简单理解就是一个标签有多个名字。

  1. 多类名使用方式

    (1)在标签 class 属性中写 多个类名

    (2)多个类名中间必须用空格分开

    (3)这个标签就可以分别具有这些类名的样式

1
<div class="red font20">亚瑟</div>
  1. 多类名开发中使用场景
  • 可以把一些标签元素相同的样式(共同的部分)放到一个类里面。
  • 这些标签都可以调用这个公共的类,然后再调用自己独有的类。
  • 从而节省 CSS 代码,统一修改方便。

5.5 id 选择器

id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。

HTML 元素以 id 属性来设置 id 选择器,CSS 中 id 选择器以 “#” 来定义。

语法

1
2
3
4
#id名 {
属性1: 属性值1;
...
}

例如,将 id 为 nav 元素中的内容设置为红色。

1
2
3
#nav {
color: red;
}

注意:id 属性只能在每个 HTML 文档中出现一次。

口诀:样式#定义,结构id调用,只能用一次,别人切忽使用。

id选择器和类选择器的区别

  1. 类选择器(class)好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用。
  2. id 选择器好比人的身份证号,是唯一的,不得重复。
  3. id 选择器和类选择器最大的不同在于使用次数上。
  4. 类选择器在修改样式中用的最多,id 选择器一般用于页面唯一性的元素上,经常和 JavaScript 搭配使用。

5.6 通配选择器

在 CSS 中,通配符选择器使用 “*” 定义,它表示选取页面中所有元素(标签)。

语法

1
2
3
4
* {
属性1:属性值1
...
}
  • 通配符选择器不需要调用,自动就给所有的元素使用样式
  • 特殊情况才使用

5.7 基础选择器总结

基础选择器 作用 特点 使用情况 用法
标签选择器 可以选出所有相同的标签,比如 p 不能差异化选择 较多 p { color: red; }
类选择器 可以选出 1 个或者多个标签 可以根据需求选择 非常多 .nav { color: red; }
id 选择器 一次只能选择 1 个标签 ID 属性只能在每个 HTML 文档中出现一次 一般和 JS 搭配使用 #nav { color: red; }
通配符选择器 选择所有的标签 选择的太多,有部分不需要 特殊情况使用 * { color: red }
  • 不同的选择器运用不同的使用场景,都需要掌握
  • 如果是修改样式,类选择器是使用最多的

6. CSS 复合选择器

6.1 什么是复合选择器

在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。

  • 复合选择器可以更准确、更高效的选择目标元素(标签)
  • 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
  • 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等

6.2 后代选择器(重要)

后代选择器又称为包含选择器,可以选择父元素里面子元素。

后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。

语法:

1
元素1 元素2 {样式声明}

上述语法表示选择元素 1 里面的所有元素 2(后代元素)。

例如:

1
ul li {样式声明}   /* 选择 ul 里面所有的 li 标签元素 */
  • 元素 1 和元素 2 中间用空格隔开
  • 元素 1 是父级,元素 2 是子级,最终选择的是元素 2
  • 元素 2 可以是儿子,也可以是孙子等,只要是元素 1 的后代即可
  • 元素 1 和元素 2 可以是任意基础选择器

6.3 子选择器(重要)

子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。简单理解就是选亲儿子元素。

语法:

1
元素 1 > 元素 2 {样式声明}

上述语法表示选择元素 1 里面的所有直接后代(子元素)元素 2.

例如:

1
div>p {样式声明}     /*  选择 div 里面所有最近一级 p 标签元素  */
  • 元素 1 和元素 2 中间用大于号隔开
  • 元素 1 是父级,元素 2 是子级,最终选择的是元素 2
  • 元素 2 必须是亲儿子,其孙子、重孙之类都不归他管,你也可以叫他亲儿子选择器。

6.4 并集选择器(重要)

并集选择器可以选择多组标签,同时为他们定义相同的样式。通常用于集体声明。

并集选择器是由选择器 通过英文逗号(,)连接而成,任何形式的选择器都可以作为并集选择器的一部分。

语法:

1
元素1,元素2 {样式声明}

上述语法表示 选择元素 1 和元素 2 。

例如:

1
ul,div {样式声明}   /* 选择 ul 和 div 标签元素 */
  • 元素 1 和 元素 2 中间用 逗号隔开
  • 逗号可以理解为 的意思
  • 并集选择器通常用于集体声明

6.5 伪类选择器

伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第 1个,第n个元素。

伪类选择器书写最大的特点是 用冒号(:)表示,比如:hower、 :first-child.

因为伪类选择器很多,比如有链接伪类、结构伪类。

6.6 链接伪类选择器

1
2
3
4
a:link		    /* 选择所有未被访问的链接 */
a:visited /* 选择所有已被访问的链接 */
a:hover /* 选择鼠标指针位于其上的链接 */
a:active /* 选择活动链接(鼠标按下未弹起的链接) */

链接伪类选择器注意事项

  1. 为了确保生效,请按照 LVHA 的顺序声明:link - :visited - :hover - :active。
  2. 记忆法:LV 哈
  3. 因为 a 链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。

链接伪类选择器实际工作开发中的写法:

1
2
3
4
5
6
7
8
9
/* a 是标签选择器  所有的链接 */
a {
color: gray;
}
/* :hover 是链接伪类选择器 鼠标经过 */
a:hover {
color: red;
/* 鼠标经过的时候,由原来的的 灰色 变成了红色 */
}

6.7 :focus 伪类选择器

:focus 伪类选择器用于选取获得焦点的表单元素。

焦点就是光标,一般情况 类表单元素才能获取,因此这个选择器也主要针对于表单元素来说。

1
2
3
input:focus {
background-color: yellow;
}

6.8 复合选择器总结

选择器 作用 特征 使用情况 符号及用法
后代选择器 用来选择后代元素 可以是子孙后代 较多 符号是 空格 .nav a
子代选择器 选择最近一级元素 只选亲儿子 较少 符号是 > .nav>p
并集选择器 选择某些相同样式的元素 可以用于集体声明 较多 符号是 逗号 .nav, .header
链接伪类选择器 选择不同状态的链接 跟链接相关 较多 重点记住 a:hover
:focus 选择器 选择获得光标的表单 跟表单相关 较少 input:focus

7. CSS 的三大特性

CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。

7.1 层叠性

相同的选择器设置相同的样式,此时一个样式就会 覆盖(层叠) 另一个冲突的样式。层叠性主要解决样式冲突的问题

  • 样式冲突,遵循的原则是 就近原则 ,哪个样式离结构近,就执行哪个样式
  • 样式不冲突,不会层叠

7.2 继承性

CSS 中的继承:子标签会继承父标签的某些样式,如文本颜色和字号。简单理解就是:子承父业。

  • 恰当的使用继承可以简化代码,降低 CSS 样式的复杂性
  • 子元素可以继承父元素的样式(text-,font-,line- 这些元素开头的可以继承,以及color属性)
  • 继承性口诀:龙生龙,凤生凤,老鼠生的孩子会打洞

行高的继承性

1
2
3
body {
font: 12px/1.5 Microsoft YaHei;
}
  • 行高可以跟单位也可以不跟单位
  • 如果子元素没有设置行高,则会继承父元素的行高为1.5
  • 此时子元素的行高是:当前子元素的文字大小*1.5
  • body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高

7.3 优先级

当同一个元素指定多个选择器,就会有优先级的产生。

  • 选择器相同,则执行层叠性
  • 选择器不同,则根据选择器权重执行

选择器权重如下表所示:

选择器 选择器权重
继承 或者 * 0,0,0,0
元素选择器 0,0,0,1
类选择器,伪类选择器 0,0,1,0
ID 选择器 0,1,0,0
行内样式 style=”” 1,0,0,0
!important 重要的 无穷大,权重最高

优先级注意点:

  1. 权重是有4组数字组成,但是不会有进位。
  2. 可以理解为类选择器永远大于元素选择器,id选择器永远大于类选择器,以此类推。
  3. 等级判断从左向右,如果某一位数值相同,则判断下一位数值。
  4. 可以简单记忆法:通配符和继承权重为0,标签选择器为1,类(伪类)选择器为10,id选择器100,行内样式表为1000,!important无穷大。
  5. 继承的权重是0 ,如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是0.

权重叠加: 如果是复合选择器,则会有权重叠加,需要计算权重。

  • div ul li —— > 0,0,0,3
  • .nav ul li ——> 0,0,1,2
  • a:hover ——> 0,0,1,1
  • .nav a ——> 0,0,1,1