一、 CSS 基础

1. CSS 简介

  • CSS 的全称为:层叠样式表 ( Cascading Style Sheets ) 。

  • CSS 也是一种标记语言,用于给 HTML 结构设置样式,例如:文字大小、颜色、元素宽高等等。

简单理解: CSS 可以美化 HTML , 让 HTML 更漂亮。

核心思想: HTML 搭建结构, CSS 添加样式,实现了:结构与样式的分离。

2. CSS 的编写位置

2.1 行内样式

  • 写在标签的 style 属性中,(又称:内联样式)。

  • 语法:

<h1 style="color:red;font-size:60px;">欢迎来到小站学习</h1>
  • 注意点:

    style 属性的值不能随便写,写要符合 CSS 语法规范,是 名:值; 的形式。

    行内样式表,只能控制当前标签的样式,对其他标签无效。

  • 存在的问题:

    书写繁琐、样式不能复用、并且没有体现出: 结构与样式分离 的思想,不推荐大量使用,只 有对当前元素添加简单样式时,才偶尔使用。

2.2 内部样式

  • 写在 html 页面内部,将所有的 CSS 代码提取出来,单独放在 <style> 标签中。

  • 语法:

    <style>
    h1 {
    color: red;
    font-size: 40px;
    }
    </style>
  • 注意点:

    1. 标签理论上可以放在HTML文档任意地方,但一般放在标签中。
    2. 此种写法:样式可以复用、代码结构清晰。
  • 存在的问题:

    1. 并没有实现:结构与样式 完全分离 。
    2. 多个 HTML 页面无法复用样式。

2.3 外部样式

  • 写在单独的 .css 文件中,随后在 HTML 文件中引入使用。

  • 语法:

    1. 新建一个扩展名为 .css 的样式文件,把所有 CSS 代码都放入此文件中。

      h1{
      color: red;
      font-size: 40px;
      }
    2. 在 HTML 文件中引入 .css 文件。

      <link rel="stylesheet" href="./xxx.css">
  • 注意点:

  1. 标签要写在 标签中。
  2. 标签属性说明:
  • href :引入的文档来自于哪里。

  • rel :( relation :关系)说明引入的文档与当前文档之间的关系。

  1. 外部样式的优势:样式可以复用、结构清晰、可触发浏览器的缓存机制,提高访问速 度 ,实现了 结构与样式的完全分离

  2. 实际开发中, 几乎都使用外部样式 ,这是 最推荐的使用方式

3. 样式表的优先级

  • 优先级规则: 行内样式 > 内部样式 = 外部样式

    1. 内部样式、外部样式,这二者的优先级相同,且:后面的 会覆盖 前面的(简记:“后来 者居上”)
    2. 同一个样式表中,优先级也和编写顺序有关,且:后面的 会覆盖 前面的(简记:“后来 者居上”)。
分类 优点 缺点 使用频率 作用范围
行内样式 优先级最高 1. 结构与样式未分离 2. 代码结构混乱 3. 样式不能复用 很低 当前标签
内部样式 1. 样式可复用 2. 代码结构清晰 1. 结构与样式未彻底分离 2. 样式不能多页面复用 一般 当前页面
外部样式 1. 样式可多页面复用 2. 代码结构清晰 3. 可触发浏览器的缓存机制 4. 结构与样式彻底分离 需要引入才能使用 最高 多个页面

4. CSS 语法规范

组成部分:

  • 选择器(找到要设置样式的元素)

  • 声明块:设置具体样式(是有一个或多个声明组成),声明格式:属性名:属性值;

最后一个分号可省略,但建议保留

选择器与声明块之间、属性名与属性值之间需保留空格。

  • 注释写法:/* 注释内容 */(示例如下):

    /* 给h1元素添加样式 */
    h1 {
    /* 设置文字颜色为红色 */
    color: red;
    /* 设置文字大小为40px */
    font-size: 40px;
    }

5. CSS 代码风格

  • 展开风格:开发时推荐,便于维护和调试。

    h1 { 
    color: red;
    font-size: 40px;
    }
  • 紧凑风格:项目上线时推荐,可减小文件体积。

    h1{color:red;font-size:40px;}
  • 备注:

    上线前可通过工具将展开风格转换为紧凑风格,节约网络流量。

二、 CSS 选择器

1. CSS基本选择器

1.1 通配选择器

  • 作用:选中所有 HTML 元素。

  • 语法:

    * {
    属性名: 属性值;
    }
  • 举例:

    * {
    color: orange;
    font-size: 40px;
    }

备注:常用于清除默认样式。

1.2 元素选择器

  • 作用:为页面中同种元素统一设置样式。

  • 语法:

    标签名 {
    属性名: 属性值;
    }
  • 举例:

    h1 {
    color: orange;
    font-size: 40px;
    }
    p {
    color: blue;
    font-size: 60px;
    }

备注:无法实现差异化设置。例如上面的代码中,所有的p元素效果都一样。

1.3 类选择器

  • 作用:根据元素的 class 值选中特定元素。

  • 语法:

    .类名 {
    属性名: 属性值;
    }
  • 举例:

    .speak {
    color: red;
    }
    .answer {
    color: blue;
    }
  • 注意点:

    1. 元素的 class 属性值不带 .,CSS 类选择器需带 .
    2. class 值建议用英文与数字组合,多单词用 - 连接,命名需见名知意。
    3. 一个元素不能重复写 class 属性,但可写多个值(用空格隔开),如 <h1 class="speak big">你好啊</h1>

1.4 ID 选择器

  • 作用:根据元素的 id 属性值精准选中唯一元素。

  • 语法:

    #id值 {
    属性名: 属性值;
    }
  • 举例:

    #earthy {
    color: red;
    font-size: 60px;
    }
  • 注意点:

    1. id 属性值由字母、数字、下划线、短杠组成,以字母开头,区分大小写,无空格。
    2. 一个元素只能有一个 id 属性,多个元素的 id 值不能重复。
    3. 元素可同时拥有 id 和 class 属性。

1.5 基本选择器总结

基本选择器 特点 用法
通配选择器 选中所有标签,一般用于清除样式 * {color:red}
元素选择器 选中所有同种标签,不能差异化选择 h1 {color:red}
类选择器 选中所有特定类名的元素,使用频率高 .say {color:red}
ID 选择器 选中特定 id 值的唯一元素 #earthy {color:red}

2. CSS 复合选择器

复合选择器基于基本选择器组合而成,可快速精准选中复杂结构中的元素。

2.1 交集选择器

  • 作用:选中同时符合多个条件的元素(即 “既… 又…”)。

  • 语法:选择器 1 选择器 2 选择器 3… 选择器 n {}

  • 举例:

    /* 选中类名为beauty的p元素 */
    p.beauty {
    color: blue;
    }
    /* 选中类名包含rich和beauty的元素 */
    .rich.beauty {
    color: green;
    }
  • 注意点:

    1. 有标签名时,标签名需写在前面。
    2. 不建议使用 id 选择器或通配选择器作为交集条件。
    3. 不能出现两个元素选择器(一个元素不能同时是两种标签)。
    4. 常用形式:元素选择器 + 类选择器。

2.2 并集选择器

  • 作用:选中多个选择器对应的元素(即 “要么… 要么…”),又称分组选择器。

  • 语法:选择器 1, 选择器 2, 选择器 3, … 选择器 n {}

  • 举例:

    #peiqi,
    .rich,
    .beauty {
    font-size: 40px;
    background-color: skyblue;
    width: 200px;
    }
  • 注意点:

    1. 建议竖着书写,便于阅读。
    2. 任何类型的选择器都可作为并集的一部分。
    3. 常用于集体声明,缩小样式表体积。

2.3 HTML元素间的关系

  1. 父元素:直接包裹某个元素的元素。

  2. 子元素:被父元素直接包含的元素。

  3. 祖先元素:父元素及父元素的父元素等(父元素属于祖先元素)。

    备注:父元素,也算是祖先元素的一种。

    例如:张三的父亲,也算是张三的祖先,但一般还是称呼:父亲。

  4. 后代元素:子元素及子元素的子元素等(子元素属于后代元素)。

    备注:子元素,也算是后代元素的一种。

    例如:张三的儿子,也算是张三的后代,但一般还是称呼:儿子。

  5. 兄弟元素:具有相同父元素的元素。

2.4 后代选择器

  • 作用:选中指定元素中符合要求的后代元素。

  • 语法:选择器 1 选择器 2 选择器 3 … 选择器 n {}(先写祖先,再写后代,空格表示 “… 中的”)

  • 举例:

    /* 选中ul中的所有li */
    ul li {
    color: red;
    }
    /* 选中ul中所有li中的a */
    ul li a {
    color: orange;
    }
    /* 选中类名为subject元素中的所有li */
    .subject li {
    color: blue;
    }
    /* 选中类名为subject元素中的类名为front-end的li */
    .subject li.front-end {
    color: blue;
    }
  • 注意点:

    1. 最终选中的是后代,不是祖先。
    2. 儿子、孙子、重孙子等都属于后代。
    3. 需符合 HTML 嵌套规则(如 p 中不能嵌套 h1~h6)。

2.5 子代选择器

  • 作用:选中指定元素中符合要求的子元素(仅儿子元素)。

  • 语法:选择器 1 > 选择器 2 > 选择器 3 > … 选择器 n {}(> 表示 “… 的子代”)

  • 举例:

    /* div中的子代a元素 */
    div>a {
    color: red;
    }
    /* 类名为persons的元素中的子代a元素 */
    .persons>a {
    color: red;
    }
  • 注意点:仅选中直接子元素,不包含孙子、重孙子等后代元素。

2.6 兄弟选择器

  • 相邻兄弟选择器:选中指定元素后紧挨着的下一个兄弟元素。

    • 语法:选择器 1 + 选择器 2 {}

    • 举例:

      /*选中 div 后相邻的兄弟 p 元素)*/
      div+p {
      color:red;
      }
  • 通用兄弟选择器:选中指定元素后所有符合条件的兄弟元素。

    • 语法:选择器 1~ 选择器 2 {}

    • 举例:

      /*选中 div 后的所有兄弟 p 元素*/
      div~p {
      color:red;
      }
  • 注意点:两种选择器均只选中下方的兄弟元素。

2.7 属性选择器

  • 作用:选中属性值符合要求的元素。

  • 语法及举例:

    div[title]{color:red;} /* 选中具有title属性的div元素 */
    div[title="atguigu"]{color:red;} /* 选中title属性值为atguigu的div元素 */
    div[title^="a"]{color:red;} /* 选中title属性值以a开头的div元素 */
    div[title$="u"]{color:red;} /* 选中title属性值以u结尾的div元素 */
    div[title*="g"]{color:red;} /* 选中title属性值包含g的div元素 */

2.8 伪类选择器

  • 作用:选中元素的特殊状态(“伪” 指不是真实的类,是元素的状态)。

(1)动态伪类

  • :link:超链接未被访问的状态。
  • :visited:超链接访问过的状态。
  • :hover:鼠标悬停在元素上的状态。
  • :active:元素被激活的状态(按下鼠标不松开)。
  • 注意点:需遵循 LVHA 顺序(link → visited → hover → active)。
  • :focus:表单元素获取焦点时的状态(通过点击、触摸或 tab 键选中)。

(2)结构伪类

常用伪类:

  • :first-child:所有兄弟元素中的第一个。

  • :last-child:所有兄弟元素中的最后一个。

  • :nth-child (n):所有兄弟元素中的第 n 个。

  • :first-of-type:所有同类型兄弟元素中的第一个。

  • :last-of-type:所有同类型兄弟元素中的最后一个。

  • :nth-of-type (n):所有同类型兄弟元素中的第 n 个。

    n 的取值规则:

    1. 0 或不写:选不中任何元素。
    2. n:选中所有子元素。
    3. 1~ 正整数:选中对应序号的子元素。
    4. 2n 或 even:选中序号为偶数的子元素。
    5. 2n+1 或 odd:选中序号为奇数的子元素。
    6. n+3:选中前 3 个子元素。

了解类伪类:

:nth-last-child (n) 所有兄弟元素中的倒数第 n 个。
:nth-last-of-type (n)所有同类型兄弟元素中的 倒数第n个 。
:only-child选择没有兄弟的元素(独生子女)。
:only-of-type选择没有同类型兄弟的元素。
:root 根元素。
:empty内容为空元素(空格也算内容)。

(3)否定伪类

  • :not (选择器):排除满足括号中条件的元素。

(4)UI 伪类

  • :checked:被选中的复选框或单选按钮。
  • :enable:可用的表单元素(无 disabled 属性)。
  • :disabled:不可用的表单元素(有 disabled 属性)。

(5)其他伪类(了解)

  • :target:选中锚点指向的元素。
  • :lang ():根据 lang 属性值选择元素。

2.9 伪元素选择器

  • 作用:选中元素中的特殊位置。
  • 常用伪元素:
    • ::first-letter:选中元素中的第一个文字。
    • ::first-line:选中元素中的第一行文字。
    • ::selection:选中被鼠标选中的内容。
    • ::placeholder:选中输入框的提示文字。
    • ::before:在元素最开始位置创建子元素(必须用 content 属性指定内容)。
    • ::after:在元素最后位置创建子元素(必须用 content 属性指定内容)。

3. 选择器的优先级(权重)

通过不同的选择器,选中相同的元素 ,并且为相同的样式名设置不同的值时,就发生了样式的冲突。 到底应用哪个样式,此时就需要看优先级了。

  • 简单描述

    行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器。

  • 详细描述:

    (1)权重计算方式

    权重格式为 (a, b, c):

    • a:ID 选择器的个数。
    • b:类、伪类、属性选择器的个数。
    • c:元素、伪元素选择器的个数。
选择器 权重
ul>li (0,0,2)
div ul>li p a span (0,0,6)
#atguigu .slogan (1,1,0)
#atguigu .slogan a (1,1,1)
#atguigu .slogan a:hover (1,2,1)

(2)比较规则

按从左到右顺序依次比较,当前位数值大则优先级高,后续不再对比。

  • 示例:(1,0,0) > (0,2,2)、(1,1,0) > (1,0,3)、(1,1,3) > (1,1,2)

    (3)特殊规则

  • 行内样式权重大于所有选择器。

  • !important 的权重最高,大于行内样式和所有选择器。

三、CSS三大特性

1. 层叠性

  • 概念:样式冲突时,按选择器优先级进行样式覆盖(层叠)。
  • 样式冲突:元素同一样式名被设置不同值。

2. 继承性

  • 概念:元素会自动继承父元素或祖先元素的某些样式,优先继承离得近的祖先元素。
  • 常见可继承属性:text-、font-、line-*、color 等(可通过 MDN 查询属性是否可继承)。

3. 优先级

  • 简单规则:!important > 行内样式 > ID 选择器 > 类选择器 > 元素选择器 > 通配选择器 > 继承的样式。
  • 注意:并集选择器的权重需分开计算每个部分。

四、CSS常用属性

1. 像素的概念

  • 屏幕由 “像素(px)” 组成,像素点越小,内容越清晰细腻。

  • 注意:电脑缩放设置可能影响测量结果,实际开发参考设计稿设置宽高。

2. 颜色的表示

2.1 颜色名

2.2 rgb 或 rgba

  • 基于红、绿、蓝三原色组合,a 表示透明度。

  • 语法:

    color: rgb(255, 0, 0); /* 红色 */
    color: rgba(255, 0, 0, 0.5); /* 半透明红色 */
    color: rgb(100%, 0%, 0%); /* 百分比表示,较少用 */
  • 规律:

    1. 三原色值相同时呈现灰色,值越大灰色越浅。
    2. rgb (0,0,0) 为黑色,rgb (255,255,255) 为白色。
    3. rgba 前三位格式需一致(均为 0~255 或百分比)。

2.3 HEX 或 HEXA

  • 原理同 rgb,用 6 位十六进制数(分成 3 组)表示,HEXA 新增透明度。

  • 语法:

    color: #ff0000; /* 红色 */
    color: #f98; /* 简写,等价于 #ff9988 */
    color: #f986; /* 带透明度的简写,等价于 #ff998866 */
  • 注意:IE 浏览器不支持 HEXA。

2.4 HSL 或 HSLA

  • HSL:通过色相(0360°)、饱和度(0%100%)、亮度(0%~100%)表示颜色。

  • HSLA:在 HSL 基础上添加透明度。

  • 语法:color: hsl(0, 100%, 50%); /* 红色 */

3. CSS 字体属性

3.1 字体大小(font-size)

  • 作用:控制字体大小。

  • 语法:

    div { 
    font-size: 40px;
    }
  • 注意点:

    1. Chrome 浏览器默认字体大小 16px,最小支持 12px,0px 会自动消失。
    2. 不同浏览器默认字体大小可能不同,建议明确设置。
    3. 通常给 body 设置 font-size,子元素可继承。
  • 借助控制台看样式:

3.2 字体族(font-family)

  • 作用:控制字体类型。

  • 语法:

    div { 
    font-family: "STCaiyun","Microsoft YaHei",sans-serif;
    }
  • 注意点:

    1. 英文名字兼容性更好,可查询字体英文名。
    2. 字体名含空格时需用引号包裹。
    3. 可设置多个字体,按顺序查找,最后建议添加 serif(衬线字体)或 sans-serif(非衬线字体)。

3.3 字体风格(font-style)

  • 作用:控制字体是否为斜体。

  • 常用值:

    1. normal:正常(默认值)。
    2. italic:斜体(使用字体自带效果,推荐)。
    3. oblique:斜体(强制倾斜)。
  • 语法:

    div { 
    font-style: italic;
    }

3.4 字体粗细(font-weight)

  • 作用:控制字体粗细。

  • 常用值:

    1. 关键词:lighter(细)、normal(正常)、bold(粗)、bolder(很粗,多数字体不支持)。
    2. 数值:100~1000(无单位),100~300 等价于 lighter,400~500 等价于 normal,600+ 等价于 bold。
  • 语法:

    div { 
    font-weight: bold;
    }

    div {
    font-weight: 600;
    }

3.5 字体复合写法(font)

  • 作用:合并字体相关属性。

  • 规则:

    1. 必须包含字体大小和字体族。
    2. 字体族在最后,字体大小在倒数第二位。
    3. 各属性间用空格隔开。
  • 语法:

    div { 
    font: italic bold 40px "Microsoft YaHei";
    }

4. CSS 文本属性

4.1 文本颜色(color)

  • 作用:控制文字颜色。

  • 可选值:颜色名、rgb/rgba、HEX/HEXA、HSL/HSLA(开发中常用 rgb/rgba 或 HEX/HEXA)。

  • 语法:

    div { 
    color: rgb(112,45,78);
    }

4.2 文本间距

  • 字母间距:letter-spacing(属性值为 px,正负值分别增大 / 缩小间距)。
  • 单词间距:word-spacing(通过空格识别单词,属性值为 px)。

4.3 文本修饰(text-decoration)

  • 作用:控制文本装饰线。

  • 常用值:

    1. none:无装饰线(常用,如清除超链接下划线)。
    2. underline:下划线。
    3. overline:上划线。
    4. line-through:删除线。
  • 可搭配值:dotted(虚线)、wavy(波浪线)、颜色。

  • 语法:

    a { 
    text-decoration: none;
    }

4.4 文本缩进(text-indent)

  • 作用:控制文本首字母缩进。

  • 语法:

    div { 
    text-indent: 40px;
    }

    属性值为 CSS 长度单位,如 px。

4.5 文本水平对齐(text-align)

  • 作用:控制文本水平对齐方式。

  • 常用值:left(左对齐,默认)、right(右对齐)、center(居中对齐)。

  • 语法:

    div { 
    text-align: center;
    }

4.6 细说 font-size

  1. 由于字体设计原因,文字最终呈现的大小,并不一定与font-size 的值一致,可能大,也可能小。
  2. 通常情况下,文字相对字体设计框,并不是垂直居中的,通常都靠下 一些。

4.7行高(line-height)

  • 作用:控制一行文字的高度。
  • 可选值:
    1. normal:浏览器默认值。
    2. px:固定像素值。
    3. 数字:自身 font-size 的倍数(常用)。
    4. 百分比:自身 font-size 的百分比。
  • 语法:div { line-height: 60px; }div { line-height: 1.5; }
  • 注意点:
    1. 行高过小可能导致文字重叠,最小值为 0,不能为负数。
    2. 行高可继承,建议用数字表示。
    3. 应用场景:多行文字控制行间距;单行文字让 height = line-height 实现垂直居中(非绝对居中,不影响观感)。

4.8文本对齐_垂直

  1. 顶部:无需任何属性,在垂直方向上,默认就是顶部对齐。

  2. 居中:对于单行文字,让 height = line-height 即可。

    问题:多行文字垂直居中怎么办?—— 后面我们用定位去做。

  3. 底部:对于单行文字,目前一个临时的方式:

    l ine-height = ( height × 2) - font-size - x

    备注:x是根据字体族,动态决定的一个值。

    问题:垂直方向上的底部对齐,更好的解决办法是什么?—— 后面我们用定位去做。

4.9 vertical-align

作用:用于指定同一行元素之间,或 表格单元格 内文字的 垂直对齐方式。

常用值:

  1. baseline (默认值):使元素的基线与父元素的基线对齐。
  2. top:使元素的顶部与其所在行的顶部对齐。
  3. middle :使元素的中部与父元素的基线加上父元素字母x的一半对齐
  4. bottom:使元素的底部与其所在行的底部对齐。

特别注意: vertical-align 不能控制块元素。

5. CSS列表属性

列表相关的属性,可以作用在 ul、ol、li 元素上。

CSS 属性名 功能 属性值
list-style-type 设置列表符号 none(不显示,常用)、square(实心方块)、disc(圆形)、decimal(数字)、lower-roman(小写罗马字)、upper-roman(大写罗马字)、lower-alpha(小写字母)、upper-alpha(大写字母)
list-style-position 设置列表符号的位置 inside(li 内部)、outside(li 外部)
list-style-image 自定义列表符号 url (图片地址)
list-style 复合属性 无数量、顺序要求

6. CSS表格属性

  1. 边框相关属性(其他元素也能用):

    CSS 属性名 功能 属性值
    border-width 边框宽度 CSS 长度值
    border-color 边框颜色 CSS 颜色值
    border-style 边框风格 none(默认)、solid(实线)、dashed(虚线)、dotted(点线)、double(双实线)
    border 复合属性 无数量、顺序要求

    注意:

    1. 以上4个边框相关的属性,其他元素也可以用,这是我们第一次遇见它们。

    2. 在后面的盒子模型中,我们会详细讲解边框相关的知识。

  2. 表格都有属性金table可用

    CSS 属性名 功能 属性值
    table-layout 设置列宽度 auto(自动,默认)、fixed(固定列宽,平均分)
    border-spacing 单元格间距 CSS 长度值(生效前提:单元格边框不合并)
    border-collapse 合并单元格边框 collapse(合并)、separate(不合并)
    empty-cells 隐藏无内容单元格 show(显示,默认)、hide(隐藏)(生效前提:单元格不合并)
    caption-side 设置表格标题位置 top(上面,默认)、bottom(下面)

7. CSS 背景属性

CSS 属性名 功能 属性值
background-color 设置背景颜色 CSS 颜色值(默认 transparent,透明)
background-image 设置背景图片 url (图片地址)
background-repeat 设置背景重复方式 repeat(重复,默认)、repeat-x(水平重复)、repeat-y(垂直重复)、no-repeat(不重复)
background-position 设置背景图位置 两个值(水平:left/center/right;垂直:top/center/bottom),仅写一个值时另一个为 center;也可通过坐标(x,y)设置
background 复合属性 无数量、顺序要求

8. CSS鼠标属性

CSS 属性名 功能 属性值
cursor 设置鼠标光标样式 pointer(小手)、move(移动图标)、text(文字选择器)、crosshair(十字架)、wait(等待)、help(帮助)

扩展:自定义鼠标图标

/* 自定义鼠标光标 */
cursor: url("./arrow.png"),pointer;

五、CSS盒子模型

1. CSS 长度单位

  • px:像素(固定单位)。
  • em:相对元素自身 font-size 的倍数。
  • rem:相对根元素(html 标签)font-size 的倍数。
  • %:相对父元素计算。

注意:CSS 长度必须加单位,否则样式无效。

2. 元素的显示模式

  • 块元素(block)

    又称:块级元素

    特点:

    1. 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的。
    2. 默认宽度:撑满父元素。
    3. 默认高度:由内容撑开。
    4. 可以通过 CSS 设置宽高。
  • 行内元素(inline)

    又称:内联元素

    特点:

    1. 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
    2. 默认宽度:由内容撑开。
    3. 默认高度:由内容撑开。
    4. 无法通过 CSS 设置宽高。
  • 行内块元素(inline-block)

    又称:内联块元素

    特点:

    1. 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
    2. 默认宽度:由内容撑开。
    3. 默认高度:由内容撑开。
    4. 可以通过 CSS 设置宽高。
  • 注意:元素早期只分为:行内元素、块级元素,区分条件也只有一条:”是否独占一行”,如果按照这种 分类方式,行内块元素应该算作行内元素。

3. 总结各元素的显示模式

  • 块元素(block)

    1. 主体结构标签:<html><body>
    2. 排版标签:<h1>~<h6><hr><p><pre><div>
    3. 列表标签:<ul><ol><li><dl><dt><dd>
    4. 表格相关标签:<table><tbody><thead><tfoot><tr><caption>
    5. <form><option>
  • 行内元素(inline)

    1. 文本标签:<br><em><strong><sup><sub><del><ins>
    2. <a><label>
  • 行内块元素(inline-block)

    1. 图片:<img>
    2. 单元格:<td><th>
    3. 表单控件:<input><textarea><select><button>
    4. 框架标签:<iframe>

4. 修改元素的显示模式

描述
none 元素隐藏(不占位置)
block 元素作为块级元素显示
inline 元素作为行内元素显示
inline-block 元素作为行内块元素显示

5. 盒子模型的组成

CSS 会把所有的HTML元素都看成一个盒子,所有的样式也都是基于这个盒子。

  1. margin(外边距): 盒子与外界的距离。
  2. border(边框): 盒子的边框。
  3. padding(内边距): 紧贴内容的补白区域。
  4. content(内容):元素中的文本或后代元素都是它的内容。

图示如下:

盒子的大小 = content + 左右 padding+ 左右 border

注意:外边距 margin 不会影响盒子的大小,但会影响盒子的位置。

6. 盒子内容区(content)

CSS 属性名 功能 属性值
width 设置内容区宽度 长度
max-width 设置内容区最大宽度 长度
min-width 设置内容区最小宽度 长度
height 设置内容区高度 长度
max-height 设置内容区最大高度 长度
min-height 设置内容区最小高度 长度

注意:

  • max-width/min-width 一般不与 width 同用;
  • max-height/min-height 一般不与 height 同用。

7. 关于默认宽度

所谓的默认宽度,就是不设置 width 属性时,元素所呈现出来的宽度

总宽度 = 父的 content — 自身的左右 margin

内容区的宽度 = 父的 content — 自身的左右 margin — 自身的左右 border — 自身的左右 padding

8. 盒子内边距(padding)

CSS 属性名 功能 属性值
padding-top 上内边距 长度
padding-right 右内边距 长度
padding-bottom 下内边距 长度
padding-left 左内边距 长度
padding 复合属性 1~4 个长度值,规则如下:1 个值:四个方向均为该值2 个值:上下、左右3 个值:上、左右、下4 个值:上、右、下、左

9. 盒子边框(border)

CSS 属性名 功能 属性值
border-style 边框风格(复合属性) none(默认)、solid(实线)、dashed(虚线)、dotted(点线)、double(双实线)
border-width 边框宽度(复合属性) 长度(默认 3px)
border-color 边框颜色(复合属性) 颜色(默认黑色)
border 复合属性 无顺序、数量要求
border-top/border-right/border-bottom/border-left 单独设置某方向边框 同上,可拆分为 border - 方向 - style/width/color

10. 盒子外边距_margin

CSS 属性名 功能 属性值
margin-left 左外边距 CSS 长度值
margin-right 右外边距 CSS 长度值
margin-top 上外边距 CSS 长度值
margin-bottom 下外边距 CSS 长度值
margin 复合属性 1~4 个长度值,规则同 padding

10.1 margin 注意事项

  1. 子元素 margin 参考父元素 content 计算。
  2. 上、左 margin 影响自身位置;下、右 margin 影响后续兄弟元素位置。
  3. 块级和行内块元素可完美设置四个方向 margin;行内元素上下 margin 无效。
  4. 块级元素设置左右 margin 为 auto 可实现水平居中。
  5. margin 值可为负数。

10.2 margin 塌陷问题

什么是 margin 塌陷?

​ 第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上。

如何解决 margin 塌陷?

  1. 给父元素设置不为 0 的 padding。
  2. 给父元素设置宽度不为 0 的 border。
  3. 给父元素设置 overflow:hidden。

10.3 margin 合并问题

什么是 margin 合并?

​ 上面兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加。

如何解决 margin 塌陷?

​ 无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了。

11. 处理内容溢出

CSS 属性名 功能 属性值
overflow 处理溢出内容 visible(显示,默认)、hidden(隐藏)、scroll(显示滚动条)、auto(自动显示滚动条)
overflow-x 水平方向溢出处理 同 overflow
overflow-y 垂直方向溢出处理 同 overflow

注意:

  1. overflow-x 、 overflow-y 不能一个是 hidden ,一个是 visible ,是实验性属性,不 建议使用。
  2. overflow 常用的值是 hidden 和 auto ,除了能处理溢出的显示方式,还可以解决很多 疑难杂症。

12. 隐藏元素的方式

方式一:visibility

属性 visibility 属性默认值是 show ,如果设置为 hidden ,元素会隐藏。
元素看不见了,还占有原来的位置(元素的大小依然保持)。

方式二: display

属性设置 display:none ,就可以让元素隐藏。
彻底地隐藏,不但看不见,也不占用任何位置,没有大小宽高。

13. 样式的继承

有些样式会继承,元素如果本身设置了某个样式,就使用本身设置的样式;但如果本身没有设置某个样 式,会从父元素开始一级一级继承(优先继承离得近的祖先元素)。

会继承的 css 属性

字体属性、文本属性(除了vertical-align)、文字颜色 等。

不会继承的 css 属性

边框、背景、内边距、外边距、宽高、溢出方式 等。

一个规律:能继承的属性,都是不影响布局的,简单说:都是和盒子模型没关系的

14. 默认样式

  • 常见元素默认样式:a 元素有下划线和默认颜色、h1~h6 有上下 margin 和加粗、p 元素有上下 margin、ul/ol 有左 padding、body 有 8px 外边距等。
  • 优先级:元素默认样式 > 继承样式,重置默认样式需直接选中该元素。

15.布局小技巧

16. 元素之间的空白问题

产生的原因:
行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。

解决方案:

  1. 方案一: 去掉换行和空格(不推荐)。
  2. 方案二: 给父元素设置 font-size:0 ,再给需要显示文字的元素,单独设置字体大小(推 荐)。

17. 行内块的幽灵空白问题

产生原因:

​ 行内块元素与文本的基线对齐,而文本的基线与文本最底端之间是有一定距离的。

解决方案:

  1. 方案一: 给行行内块设置 vertical ,值不为 baseline 即可,设置为 middel 、 bottom 、 top 均可。
  2. 方案二: 若父元素中只有一张图片,设置图片为 display:block 。
  3. 方案三: 给父元素设置 font-size: 0 。如果该行内块内部还有文本,则需单独设置 fontsize 。

六、浮动

1. 浮动的简介

在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。

2. 元素浮动后的特点

  1. 脱离文档流。
  2. 默认宽高由内容撑开,可设置宽高。
  3. 不独占一行,可与其他元素共用一行。
  4. 无 margin 合并和塌陷问题,可完美设置四个方向 margin 和 padding。
  5. 不会被当作文本处理(无行内块的空白问题)。

3. 浮动小练习

练习1:盒子1右浮动,效果如下

练习2:盒子1左浮动,效果如下

练习3:所有盒子都浮动,效果如下

练习4:所有盒子浮动后,盒子3落下来,效果如下

4. 解决浮动产生的影响

4.1 元素浮动后会有哪些影响

对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟 无影响。

对父元素的影响: 不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元 素。

4.2 解决浮动产生的影响(清除浮动)

  1. 给父元素指定高度(简单但不灵活)。

  2. 给父元素设置浮动(会带来其他布局问题)。

  3. 给父元素设置 overflow: hidden(简单有效)。

  4. 在所有浮动元素后添加块级元素,设置 clear: both(额外增加 DOM 元素)。

  5. 给父元素添加伪元素(推荐):

    .parent::after {
    content: "";
    display: block;
    clear: both;
    }

布局中的一个原则:设置浮动的时候,兄弟元素要么全都浮动,要么全都不浮动。

5. 浮动布局小练习

6.浮动相关属性

CSS 属性 功能 属性值
float 设置浮动 left(左浮动)、right(右浮动)、none(不浮动,默认)
clear 清除浮动影响 left(清除左浮动影响)、right(清除右浮动影响)、both(清除左右浮动影响)

七、定位