前端 CSS【此篇学会】

285 阅读44分钟

八月问候月初早安天空公众号首图.jpg

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

想学习前端 css 吗,搞明白看此篇就够了。

一、CSS 初识

1.1 概念

  • 说明

    • CSS(Cascading Style Sheets),通常称为CSS样式表或层叠样式表(级联样式表)
  • 作用

    • 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式
    • CSS 以 HTML 为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等,而且还可以针对不同的浏览器设置不同的样式

1.2 引入 CSS 样式表

1.2.1 行内式(内联样式)

  • 说明

    • 通常称为行内样式、行间样式
    • 通过标签的 style 属性来设置元素的样式
    • HTML 中任何的标签都拥有 style 属性,用来设置行内式
  • 格式

<标签名 style="属性1:属性值1; 属性2:属性值2; 属性3:属性值3;"> 内容 </标签名>
  • 注意

    • style 其实就是标签的属性
    • 样式属性和值中间是 :
    • 多组属性值之间用 : 隔开
    • 只能控制当前的标签和以及嵌套在其中的子标签,造成代码冗余
  • 缺点

    • 没有实现样式和结构相分离

1.2.2 内部样式表(内嵌样式表)

  • 说明

    • 通常称为 内嵌式
    • 是将 CSS 代码集中写在 HTML 文档的 head 头部标签中,并且用 style 标签定义
  • 格式

<style type="text/css">
    标签选择器 {
        属性1: 属性值1;
        属性2: 属性值2;
        属性3: 属性值3;
    }
</style>
  • 注意

    • style 标签一般位于 head 标签中,理论上它可以放在 HTML 文档的任何地方
    • type="text/css" 在 HTML5 中可以省略
    • 只能控制当前的页面
  • 缺点

    • 没有彻底分离

1.2.3 外部样式表(外链式)

  • 说明

    • 通常称为 链入式
    • 是将所有的样式放在一个或多个以 .CSS 为扩展名的外部样式表文件中
    • 通过 link 标签 将外部样式表文件链接到 HTML 文档中
  • 格式

<link rel="stylesheet" type="text/css" href="css文件路径">
  • 注意

    • link 是个单标签
    • link 标签需要放在 head 头部标签中,并且指定 link 标签的三个属性
属性作用
rel定义当前文档与被链接文档之间的关系,需要指定为 "stylesheet",表示被链接的文档是一个样式表文件
type定义所链接文档的类型,需要指定为 "text/css",表示链接的外部文件为 CSS 样式表,可以省略
href定义所链接外部样式表文件的 URL,可以是相对路径,也可以是绝对路径

1.2.4 三种样式表总结

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

1.2.5 CSS 样式规则

  • 代码风格

    • 紧凑格式(Compact)
    选择器或标签名 { 属性名: 属性值; 属性名: 属性值;}
    
    • 展开格式(推荐使用)
    选择器或标签名 {
        属性名: 属性值;
        属性名: 属性值;
    }
    
  • 代码大写

    推荐使用: 样式选择器,属性名,属性值关键字全部使用小写字母书写,属性字符串允许使用大小写。

总结

  • 选择器用于指定 CSS 样式作用的 HTML 标签,花括号内是对该对象设置的具体样式。
  • 属性和属性值以 "键值对" 的形式出现。
  • 属性是对指定的对象设置的样式属性,例如字体大小、文本颜色等。
  • 属性和属性值之间用英文 : 连接。
  • 多个 "键值对" 之间用英文 : 进行区分。

1.2.6 CSS 样式优先级

  • 说明

    CSS 共分为三种样式,分别为 行内样式、内部样式、外部样式

    行内样式写法
    <标签名 style="属性1:属性值1; 属性2:属性值2; 属性3:属性值3;"> 内容 </标签名>
    ​
    内部样式写法
    <style>
        标签选择器 {
            属性1: 属性值1;
            属性2: 属性值2;
            属性3: 属性值3;
        }
    </style>
    ​
    外部样式写法
    <link rel="stylesheet" type="text/css" href="css文件路径">
    

5wT4sJ.png

从上图可以看出样式的优先级的顺序为 行内样式 > 内部样式 > 外部样式

二、 CSS 选择器

2.1 概念

  • 说明

    • 用来找到特点的 HTML 页面元素
    • 通俗的讲,就是把我们想要的标签选择出来
    • 分工明确,也就是说选对人,做对事
    • 选择器分为基础选择器和复合选择器

2.2 CSS 基础选择器

2.2.1 标签选择器

  • 说明

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

标签名 {
    属性1:属性值1; 
    属性2:属性值2; 
    属性3:属性值3;
}
  • 作用

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

    • 能快速为页面中同类型的标签统一样式
  • 缺点

    • 不能设计差异化样式
  • 口诀

标签选择器,
页面同选起。
直接写标签,
全部不放弃。

2.2.2 类选择器

  • 说明

    • 类选择器使用 "." (英文点号) 进行标识,后面紧跟类名
  • 语法

类名选择器
​
.类名 {
    属性1: 属性值1;
    属性2: 属性值2;
    属性3: 属性值3;
}
​
<p class="类名"></p>
  • 优点

    • 可以为元素对象定义单独或相同的样式,可以选择一个或者多个标签
  • 注意

    • 类选择器使用 "." (英文点号) 进行标识,后面紧跟类名(自定义名字)
    • 长名称或词组可以使用中横线来为选择器命名
    • 不要使用纯数字、中文等命名,尽量使用英文字母来表示
  • 口诀

差异化选择
一个或多个
上面点定义
类名别写错
谁用谁调用
class来做
嘿嘿,工作类最多
  • 特殊用法—多类名

    • 说明: 我们可以给标签指定多个类名,方便更多的的选择
    • 注意: 各个类名中间用空格隔开
    • 格式
<div class="类名1 类名2 类名3"></div>

2.2.3 id 选择器

  • 说明

    • id 选择器使用 # 进行标识,后面紧跟 id 名
    • 元素的 id 值是唯一的,只能对应于文档中某一个具体的元素
    • 用法基本和类选择器相同
  • 格式

#id名 {
    属性1: 属性值1;
    属性2: 属性值2;
    属性3: 属性值3;
}
  • id 选择器和 类选择器区别

    • W3C标准规定,在同一页面上,不允许有相同名字的 id 对象出现,但是允许相同名字的 class
    • 类选择器(class) 好比人的名字,是可以多次重复使用的,比如 张伟,刘洋,王伟...等等
    • id 选择器 好比人的身份证号码,全中国是唯一的,不得重复,只能使用一次

2.2.4 通配符选择器

  • 说明

    • * 号表示,意思是选择所有的标签
    • 它是所有选择器中作用范围最广的,能匹配页面中所有的元素
  • 格式

* {
    属性1: 属性值1
    属性2: 属性值2
    属性3: 属性值3
}
  • 注意

    • 会匹配页面所有的元素,降低页面响应速度,不建议随便使用

2.2.5 基础选择器总结

选择器作用缺点使用情况
标签选择器选出所有相同的标签不能差异化选择较多
类选择器选出 1个 或者 多个标签可以根据需求选择非常多
id 选择器一次只能选择 1个 标签只能使用一次不推荐使用
通配符选择器选择所有的标签选择的太多,有部分不需要不推荐使用

2.3 复合选择器

  • 说明:

    • 为了可以选择更准确更精细的目标元素标签
    • 由两个或多个基础选择器,通过不同的方式组合而成

2.3.1 后代选择器

  • 说明

    • 通常称为包含选择器
    • 写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔
    • 当标签发生嵌套时,内层标签成为外层标签的后代
  • 作用

    • 用来选择元素或元素组的子孙后代
  • 格式

父级 子级 {
    属性: 属性值1;
    属性: 属性值2;
}

2.3.2 子元素选择器

  • 说明

    • 子元素选择器只能选择作为某元素子元素(亲儿子)的元素
    • 写法就是把父级标签写在前面,子级标签写在后面,中间跟一个 > 进行连接
  • 格式

父级 > 子级 {
    属性: 属性值1;
    属性: 属性值2;
}
  • 注意

    • 这里的子级元素指的是 亲儿子,不包含 重孙子之类

2.3.3 交集选择器

  • 说明

    • 由两个选择器构成
    • 选择的标签必须满足: 既有标签一的特点,也有标签二的特点
    • 两个选择器之间不能有空格
    • 交集选择器 可以理解为 并且的意思
  • 格式

意思是 选择的是 p 标签中类名为 one 的标签
p.one {
    属性: 属性值1;
    属性: 属性值2;
}

2.3.4 并集选择器(群组选择器)

  • 说明

    • 也叫群组选择器
    • 多个标签需要相同样式的话,可以使用并集选择器,可以让代码更简洁
    • 任何形式的选择器都可以作为并集选择器的一部分
    • 用逗号隔开,可以理解为 和 的意思
  • 格式

意思是 p 标签 和 类名为 one 的标签 和 h1 定义了如下的属性
p,.one,h1 {
    属性: 属性值1;
    属性: 属性值2;
}

2.3.5 链接伪类选择器

  • 说明

    • : 表示
    • 用于向某些选择器添加特殊的效果
  • 功能

选择器例子描述
:linka:link默认样式
:visiteda:visited访问过链接的状态
:hovera:hover鼠标移到链接上时的状态
:activea:active鼠标点击链接不松开时的状态
  • 格式
<style>
    /*默认样式*/
    a:link{      
      color: red;
      font-size: 100px;
    }
    
    /*访问过超链接的状态*/
    a:visited{   
      color: green;
    }
    
    /*鼠标移到当前超链接时的样式*/
    a:hover{    
      color: blue;
      font-size: 20px;
    }
    
    /*鼠标左键点击超链接不松开时的样式*/
    a:active{   
      color: yellow;
    }
  </style>
  • 注意

    • 写的时候,它们的熟悉怒尽量不要颠倒,按照 l v h a 的顺序,否则可能引起错误
    • 因为叫链接伪类,所以都是利用 交集选择器,比如: a:link
    • 因为 a 超链接标签具有默认样式,一般都需要单独指定样式

2.3.6 伪元素选择器

1.1 介绍伪元素选择器

  • 说明

    • 它是一个附加至选择器末的关键词
    • 用于设置元素指定部分的样式
  • 功能

选择器例子描述
::afterp::after在每个 <p> 元素之后插入内容
::beforep::before在每个 <p> 元素之前插入内容
::first-letterp::first-letter为每个 <p> 元素的首字母添加样式
::first-linep::first-line为每个 <p> 元素的首行添加样式
::selectionp::selection为用户鼠标选择的元素部分添加样式

1.2 ::after 伪元素

  • 说明

    • 用于在元素内容之后插入一些内容
  • 应用

    • <style>
          p::after {
              content: "world";
          }
      </style><body>
          <p>hello </p>
      </body>
      
    • 效果如下

      5yvFoV.png

1.3 ::before 伪元素

  • 说明

    • 用于在元素内容之前插入一些内容
  • 应用

    • <style>
          p::before {
              content: "海绵宝宝最好的朋友是";
          }
      </style><body>
          <p>派大星</p>
      </body>
      
    • 效果如下

      5yvMe1.png

1.4 ::first-letter 伪元素

  • 说明

    • 用于向文本的首字母添加属性样式

    • 只适用于块级元素

    • 只可以使用以下属性

      • 字体属性
      • 颜色属性
      • 背景属性
      • margin-外边距属性
      • padding-内边距属性
      • border-边框属性
      • text-decoration-文本修饰属性
      • vertical-align-垂直对齐属性(仅当 "float" 为 "none"时)
      • text-transform-控制文本大小写属性
      • line-height-行高属性
      • float-设置浮动属性
      • clear-清除浮动属性
  • 应用

    • <style>
          p::first-letter {
              color: red;
              font-size: 26px;
              border: 1px solid orange;
          }
      </style><body>
          <p>我想变有钱</p>
      </body>
      
    • 效果如下

      5yvIYT.png

1.5 ::first-line 伪元素

  • 说明

    • 用于向文本的首行添加属性样式

    • 只适用于块级元素

    • 只可以使用以下属性

      • 字体属性
      • 颜色属性
      • 背景属性
      • word-spacing-字间距属性
      • letter-spacing-字符间距属性
      • text-decoration-文本修饰属性
      • vertical-align-垂直对齐属性
      • text-transform-控制文本大小写属性
      • line-height-行高属性
      • clear-清除浮动属性
  • 应用

    • <style>
          p::first-line {
              color: red;
              font-size: 24px;
          }
      </style>
      
      <body>
          <p>人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
              人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
              人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。
              人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。
          </p>
      </body>
      
    • 效果如下

      5yxthT.png

1.6 ::selection 伪元素

  • 说明

    • 用于被用户使用鼠标或其他设备选中的内容添加属性样式

    • 只可以使用以下属性

      • color-内容颜色属性
      • background-背景颜色属性
      • cursor-鼠标样式
      • outline-轮廓线
  • 应用

    • <style>
          p::selection {
              color: white;
              background-color: orange;
          }
      </style><body>
          <p>人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
              人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
              人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。
              人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。
          </p>
      </body>
      
    • 效果如下

      5yxXvQ.png

2.3.7 属性选择器

  • 说明

    • 根据元素的属性及属性值来选择元素
  • 功能

选择器描述
[attribute]用于选取带有指定属性的元素
[attribute=value]用于选取带有指定属性和值的元素
[attribute~=value]用于选取属性值中包含指定词汇的元素
[attribute=value]用于选取带有以指定值开头的属性值的元素,该值必须是整个单词。
[attribute^=value]匹配属性值以指定值开头的每个元素
[attribute$=value]匹配属性值以指定值结尾的每个元素
[attribute*=value]匹配属性值中包含指定值的每个元素
  • 格式
<style>
    /*只使用属性名*/
    h2[title]{
    color: red;
    }

    /*根据多个属性名进行选择*/
    a[href][title]{
    font-size: 20px;
    }

    /*!*既有属性名又有属性值*!*/
    h2[title='标题']{
    color: yellow;
    }

    /*要求与属性名和属性值保持一致 完全匹配*/
    p[class='c1']{
    color: red;
    }

    /*不完全匹配*/
    p[class~='c1']{
    color: blue;
    }
 </style>

2.3.8 兄弟选择器

  • 说明

    • 可选择紧接在另一元素后的元素,且二者有相同父元素

    • 两种方式

      • '+' 相邻兄弟选择器表示某元素后相邻的兄弟元素,也就是紧挨着的
      • '~' 普通兄弟选择器表示某元素后所有同级的指定元素,强调所有的
  • 格式

    • 相邻兄弟选择器
    <style>
        /*相邻兄弟选择器*/
        h1+p{
            color: red;
        }
    </style>
    
    <h1>我是老大</h1>
    <p>我是老二</p>
    <p>我是老三</p>
    

    效果如下:

    5Fjog1.png

    • 普通兄弟选择器
    <style>
        /*普通兄弟选择器*/
        h1~p{
            color: red;
        }
    </style><h1>我是老大</h1>
    <p>我是老二</p>
    <p>我是老三</p>
    

    效果如下:

    5FjxCd.png

三、 CSS 样式属性

3.1 文字文本样式

  • font 字体

    • font-size: 大小
    作用: font-size 属性用于设置字号
    ​
    格式:
    标签名或选择器 {
        font-size:20px;
    }
    
    单位:
    1. 分两种: 相对长度单位、绝对长度单位
    2. 相对长度单位比较常用,推荐使用像素单位px,绝对长度单位使用较少
    
    相对长度单位说明
    em相对于当前对象内文本的字体尺寸
    px像素,最常用,推荐使用
    绝对长度单位说明
    in英寸
    cm厘米
    mm毫米
    pt
    注意:
    1. 我们文字大小以后,基本就用 px 了,其他单位很少使用
    2. 谷歌浏览器默认的字体大小为 16px
    3. 不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小,一般给 body 指定整个页面文字的大小
    
    • font-family: 字体
    作用: font-family 用于设置哪一种字体
    
    格式:
    标签名或选择器{
        font-family:Arial,"微软雅黑","黑体时";
    }
    
    说明
    1. 网页中常用的字体有宋体、微软雅黑、黑体等,例如将网页中所有段落文本的字体设置为 微软雅黑。
    2. 可以同时指定多个字体,中间以逗号隔开,表示如果浏览器不支持第一个字体,则会尝试下一个,直接找到合适的字体,如果都没有,则以我们电脑默认的字体为准。
    
    注意:
    1. 各种字体之间必须使用英文状态下的逗号隔开
    2. 中文字体需要加英文状态下的引号,英文字体一般不需要加引号,设置英文字体时必须位于中文字体名之前
    3. 如果字体名中包含空格、# 等符号,则该字体必须加英文状态下的单引号或双引号,例如 font-family: "Times New Roman"。
    4. 尽量使用系统默认字体,保证在任何用户的浏览器中都能正确显示。
    
    CSS Unicode 字体
    说明:
    1. 在 CSS 中设置字体名称,直接写中文是可以的,但是文件编码(GB2312、UTF-8等)不匹配时会产生乱码的错误。
    2. xp 系统不支持类似 微软雅黑 的中文。
    3. 在 CSS 中直接使用 Unicode 编码来写字体名称可以避免这些错误,使用 Unicode 写中文字体名称,浏览器是可以正确的解析的。
    
    格式:
    
    标签名或选择器 {
        /* 设置字体为 "微软雅黑" */
        font-family: "\5FAE\8F6F\96c5\9ED1";  
    }
    
    字体名称英文名称Unicode 编码
    宋体SimSun\5B8B\4F53
    新宋体NSimSun\65B0\5B8B\4F53
    黑体SimHei\9ED1\4F53
    微软雅黑Microsoft YaHei\5FAE\8F6F\96C5\9ED1
    楷体_GB2312KaiTi_GB2312\6977\4F53_GB2312
    隶书LiSu\96B6\4E66
    幼圆YouYuan\5E7C\5706
    华文细黑STXihei\534E\6587\7EC6\9ED1
    细明体MingLiU\7EC6\660E\4F53
    新细明体PMingLiU\65B0\7EC6\66OE\4F53
    • font-weight: 字体粗细
    作用: 用来将文本加粗
    
    格式:
    标签名或选择器 {
        /* 设置字体为加粗 */
        font-weight: bold;
    }
    
    属性值描述
    normal默认值(不加粗)
    bold或strong定义粗体(加粗的)
    100~900400等同于 normal,而 700等同于 bold
    • font-style: 字体风格
    说明: 用于设置字体倾斜或正常字体
    
    格式:
    标签名或选择器 {
        /* 设置字体为倾斜 */
        font-style: italic;
    }
    
    属性作用
    normal默认值,浏览器会显示标准的字体样式
    italic浏览器会显示斜体的字体样式
    • font: 综合设置字体样式
    作用: 用于对字体样式进行综合设置
    
    格式:
    标签或选择器 {
        font: font-style属性值 font-weight属性值 font-size属性值或line-height属性值 font-family属性值;
    }
    
    注意:
    1. 使用 font 属性时,必须按上面语法格式中的顺序书写,不能更换顺序,各个属性以空格隔开。
    2. 其中不需要设置的属性可以省略(取默认值),但必须保留 font-size 和 font-family 属性,否则 font 属性将不起作用
    
    • font 总结
    属性表示注意点
    font-size字号我们通常用的单位是 px 像素,一定要写单位
    font-family字体实际工作中按照团队约定来写字体
    font-weight字体粗细加粗是 700,不加粗是 normal 或者 400,数字不要跟单位
    font-style字体样式记住倾斜是 italic,不倾斜是 normal
    font字体连号字体连写是有顺序的,不能随意换位置,其中字号和字体必须同时出现
  • 外观属性

    • color: 文本颜色
    作用: color 属性用于定义文本的颜色 
    
    格式:
    color: red;
    
    注意:
    在实际工作中,用 16进制的写法比较多
    
    表示属性值
    预定义的颜色值red,green,blue,pink....等等
    十六进制#FF0000,#29D794.....等等
    RGB 代码rgb(255,0,0) 或 rgb(100%,0%,0%)
    • text-align: 文本水平对齐方式
    作用: text-align 属性用于设置文本内容的水平对齐
    
    格式:
    标签名或选择器 {
        /* 设置文本内容为左对齐 */
        text-align: left;
    }
    
    注意:
    是让盒子里面的内容对齐,不是让盒子对齐
    
    属性说明
    left左对齐(默认值)
    right右对齐
    center居中对齐
    • line-height: 行间距
    作用: 用于设置行间距,就是行与行之间的距离,即字符的垂直间距,一般称为行高。
    
    单位:
    line-height 常用的属性值单位分别为 像素px,相对值em和百分比%,通常 像素px 用的比较多。
    
    格式:
    一般情况下,行距比字号大 7,8像素左右就可以了
    标签名或选择器 {
        /* 设置行高为24像素 */
        line-heigth: 24px;
    }
    

    行高测量方法如下图:

    5m91KS.png

    单行文本垂直居中
    ​
    说明:
    1. 文字的行高等于盒子的高度
    2. 行高 = 上距离 + 内容高度 + 下距离
    

    看下图:

    5mC1Rx.png

    行高和高度的三种关系
    1. 如果行高等于高度,文字会垂直居中
    2. 如果行高大于高度,文字会偏下
    3. 如果行高小于高度,文字会偏上
    
    • text-indent: 首行缩进
    作用: 用于设置首行文本的缩进
    
    属性值:
    可以为不同单位的数值,em 字符宽度的倍数,或相对于浏览器窗口宽度的百分比%,允许使用负值。
    1em 就是一个字的宽度,如果是汉字的段落,1em 就是一个汉字的宽度
    建议使用 em 作为设置单位
    
    格式:
    标签名或选择器{
        /* 首行缩进2个字符 */
        text-indent: 2em;
    }
    
    • text-decoration: 文本的装饰
    作用: 用于给链接修改装饰效果
    
    格式:
    标签名或选择器 {
        /* 设置文本删除线 */
        text-decoration: line-through;
    }
    
    描述
    none默认,定义标准的文本,取消下划线
    underline定义文本下的一条线
    overline定义文本上的一条线
    line-through定义删除线
    • list-style: 设置列表默认的样式
    作用: 用于修改或去掉列表默认的样式
    
    格式:
    标签选择器 {
        /* 去掉列表默认的样式 */
        list-style: none;
    }
    

    常用的 list-style 属性值

    描述
    none无标记
    disc实心圆(默认)
    circle空心圆
    square实心方块
    decimal数字
    • border-radius: 设置圆角边框
    说明
    1. 用来设置一个直角形 圆角的弧度
    2. 属性值可以为 数值或百分比的形式
    
    格式
    标签选择器 {
        border-radius: 20%;
    }
    
    • box-shadow: 设置盒子阴影
    格式
    标签选择器 {
        box-shadow: 水平阴影 垂直阴影 模糊距离(虚实) 阴影尺寸(影子大小) 阴影颜色 内/外阴影;
    }
    
    描述
    h-shadow必需,水平阴影的位置,允许负值
    v-shadow必需,垂直阴影的位置,允许负值
    blur可选,模糊距离
    spread可选,阴影的尺寸
    color可选,阴影的颜色
    inset可选,将外部阴影(outset)改为内部阴影
    注意:
    1. 前两个属性是必须写的,其余的可以省略
    2. 外阴影(outset)是默认的,但是不能写,想要内阴影可以写 inset
    

3.2 背景(background)

  • 背景颜色(color)
格式:
标签名或选择器 {
    background-color: 颜色值; 
}
​
默认的值是 transparent 透明的
  • 背景图片(image)
格式:
标签名或选择器 {
    background-image: url(路径名);
}
​
注意:
背景图片后面的地址,url 不要加引号。
参数作用
none无背景图(默认)
url使用绝对或相对地址指定背景图像
  • 背景平铺(repeat)
格式:
标签名或选择器 {
    /* 背景图像在横向上平铺 */
    background-repeat: repeat-x;
}
参数作用
repeat背景图像在纵向和横向上平铺(默认的)
no-repeat背景图像不平铺
repeat-x背景图像在横向上平铺
repeat-y背景图像在纵向上平铺
  • 背景位置(position)
说明:
1. 必须先指定 background-image 属性。
2. position 后面是 x坐标和 y坐标,可以使用方位名词或者精确单位。
3. 如果指定两个值,两个值都是方位名字,则两个值前后顺序无关,比如 left top 和 top left 效果一致。
4. 如果只指定了一个方位名词,另一个值默认居中对齐。
5. 如果 position 后面是精确坐标,那么第一个肯定是 x,第二个是 y。
6. 如果只指定了一个数值,那该数值一定是 x 坐标,y 坐标默认垂直居中。
7. 如果指定的两个值是 精确单位和方位名字混合使用,第一个值是 x 坐标,第二个值是 y 坐标。

格式:
标签名或选择器 {
    background-position: left top;
}
  • 背景附着
说明:
背景附着就是设置背景是滚动的还是固定的

格式:
标签名或选择器 {
    /* 背景图像固定 */
    background-attachment: fixed;
}
参数作用
scroll背景图像是随对象内容滚动
fixed背景图像固定
  • 背景简写
说明:
background属性值的书写顺序官方并没有强制标准,为了可读性,建议大家如以下格式中写

格式:
标签名或选择器 {
    background: 背景颜色 背景图片地址 背景平铺 背景滚动 背景位置;
}
  • 背景透明
说明:
1. 背景透明通常一般使用 rgba 属性来设置。
2. 还有一个 opacity 属性,但是 opacity 属性为元素的背景添加透明度时,它所有的子元素都继承相同的透明度,会使元素中的文本也会变透明。
3. rgba 属性有4个属性值,rgba(red,grenn,blue,alpha),alpha 参数是介于 0.0(完全透明) 和 1.0 (完全不透明) 之间的数字。

格式:
标签名或选择器 {
    /* 30% 不透明的绿色背景 */
    background: rgba(0,128,0,0.3)
}

注意:
我们也可以把 alpha 属性值 0.30 省略掉,这样写 rgba(0,128,0,.3)
  • 背景总结
属性作用
background-color背景颜色预定义的颜色/十六进制/RGB代码
background-image背景图片url(图片路径)
background-repeat是否平铺repeat/no-repeat/repeat-x/repeat-y
background-position背景位置length/position 分别是 x 和 y 坐标,如果有精确数字单位,则必须按照先 X 后 Y 的写法
background-attachment背景固定还是滚动scroll/fixed
背景简写更简化背景颜色 背景图片地址 背景平铺 背景滚动 背景位置,它们没有顺序
背景透明让盒子半透明background: rgba(0,0,0,0.3),后面必须是4个值

3.3 标签显示模式(display)

说明:
1. 标签以什么方式进行显示,比如 div 自己占一行,比如 span 一行可以放很多个。
2. HTML 标签一般分为块标签和行内标签两种类型,它们也称块元素和行内元素。
  • 块级元素(block-level)
说明:
常用的块元素有 <h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等,其中<div>标签是最典型的块元素。
​
特点:
1. 比较霸道,自己独占一行。
2. 高度、宽度、外边距以及内边距都可以控制。
3. 宽度默认是容器(父级宽度)的 100%4. 是一个容器及盒子,里面可以放行内或者块级元素。
​
注意:
1. 只有 文字 才能组成段落,因此 p 标签里面不能放块级元素,特别是不能放 div 标签。
2. 同理还有 h1~h6, dt 他们都是文字类块级标签,里面不能放其他块级元素。
  • 行内元素(inline-level)
说明:
常见的行内元素有<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>等,其中 <span> 标签最典型的行内元素,也叫内联元素。
​
特点:
1. 相邻行内元素在一行上,一行可以显示多个。
2. 高、宽直接设置是无效的。
3. 默认宽度就是它本身内容的宽度。
4. 行内元素只能容纳文本或其他行内元素。
​
注意:
1. 链接里面不能再放链接。
2. 特殊情况 a 里面可以放块级元素,但是给 a 转换一下块级模式最安全。
  • 行内块元素(inline-block)
说明:
在行内元素中有几个特殊的标签分别是<img />、<input />、<td>,可以对它们设置宽高和对齐属性,通常称为行内块元素。

特点:
1. 和相邻行内元素、行内块元素在一行上,但是会有空白缝隙,一行可以显示多个。
2. 默认宽度就是它本身内容的宽度。
3. 宽、高、行高、外边距以及内边距都可以控制。
  • 三种模式总结
元素模式元素排列设置样式默认宽度包含
块级元素一行只能放一个块级元素可以设置宽度高度容器的100%容器级可以包含任何标签
行内元素一行可以放多个行内元素不可以设置宽度高度它本身内容的宽度容纳文本或其他行内元素
行内块元素一行放多个行内块元素可以设置宽度和高度它本身内容的宽度
  • 标签显示模式转换(display)
格式:
标签名或选择器 {
    /* 转换为行内元素 */
    display: inline;
    
    /* 转换为块级元素 */
    display: block;

    /* 转换为行内块元素 */
    display: inline-block;
}

四、 CSS 三大特性

4.1 层叠性

  • 概念

    所谓层叠性是指多种 CSS 样式的叠加。

    是浏览器处理冲突的一个能力,如果一个属性通过两个相同选择器设置到同一个元素上,那么这个时候一个属性就会将另一个属性层叠掉。

  • 原则

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

    长江后浪推前浪,前浪死在沙滩上。

效果如下:

5usSB9.png

4.2 CSS 继承性

  • 概念

    子标签会继承父标签的某些样式,如文本颜色和字号大小。

    想要设置一个可继承的属性,只需将它应用于父元素即可。

    简单的理解就是: 子承父业。

  • 注意

    恰当的使用继承可以简化代码,降低 CSS 样式的复杂性,比如有很多子级都需要某个样式,可以给父级指定一个,这些子级继承过来就好了。

    子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color 属性)

  • 口诀

    龙生龙,凤生凤,老鼠生的孩子会打洞。

效果如下:

5ucVjU.png

4.3 CSS 优先级

  • 概念

    定义CSS样式时,经常出现两个或更多规则应用在同一元素上,此时

    • 选择器相同,则执行层叠性
    • 选择器不同,就会出现优先级的问题
  • 权重计算公式

    值从左到右,左面的最大,一级大于一级,数位之间没有进制,级别之间不可超越。

标签选择器计算权重公式
继承或者 *0,0,0,0
每个元素(标签选择器)0,0,0,1
每个类,伪类0,0,1,0
每个 ID0,1,0,0
每个行内样式 style=""1,0,0,0
!important∞无穷大

权重叠加

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

注意:
数位之间没有进制,比如: 0,0,0,5 + 0,0,0,5 = 0,0,0,10 而不是 0,0,1,0
所以不会存在10个 div 能赶上一个类选择器的情况

五、CSS 注释

说明:
在需要注释的内容前使用 /* 标记开始注释
在内容的结尾使用 */ 结束
举例:
标签选择器 {
    /* 字体大小 */
    font-size: 20px
}

六、 盒子模型

6.1 看透网页布局的本质

  • 首先利用 CSS 设置好盒子的大小,然后摆放盒子的位置
  • 最后把网页元素比如文字图片等等,放入盒子里面
  • 以上两步就是网页布局的本质

5QSij0.png

6.2 盒子模型(Box Model)

  • 说明

    • 就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
    • 盒子模型有元素的内容、边框(border)、内边距(padding)和外边距(margin)组成。
    • 盒子里面的文字和图片等元素是内容区域
    • 盒子的厚度 我们称为盒子的边框
    • 盒子内容与边框的距离是内边距
    • 盒子与盒子之间的距离是外边距

标准盒子模型

5QSvKx.png

6.3 盒子边框(border)

5Q9fBV.png

  • 语法
标签选择器 {
    border: border-width 或 border-style 或 border-color 
}
属性作用
border-width定义边框粗细,单位是 px
border-style边框的样式
border-color边框颜色

边框的样式

边框的样式属性描述
none没有边框即忽略所有边框的宽度(默认值)
solid边框为单实线
dashed边框为虚线
dotted边框为点线

6.4 内边距(padding)

5QCc5D.png

  • 说明

    padding 属性用于设置内边距,是指边框与内容之间的距离。

  • 设置

属性作用
padding-left左内边距
padding-right右内边距
padding-top上内边距
padding-bottom下内边距
当我们给盒子指定 padding 值后,发现:
1. 内容和边框有了距离,添加了内边距
2. 盒子会变大了
  • padding 的值
值的个数描述
1个值padding: 上下左右内边距
2个值padding: 上下内边距 左右内边距
3个值padding: 上内边距 左右内边距 下内边距
4个值padding: 上内边距 右内边距 下内边距 左内边距
  • 内盒尺寸计算(元素实际大小)
1. 高度
元素高度 = 内容高度 + 内边距 + 边框
​
2. 宽度
元素宽度 = 内容宽度 + 内边距 + 边框
​
盒子实际的大小 = 内容的宽度和高度 + 内边距 + 边框 
  • 内边距产生的问题
问题: 会撑大原来的盒子
解决方法: 
1. 通过给设置了宽度的盒子,减去相应的内边距的值,维持盒子原来的大小。
例如: 盒子宽高各 100px,内边距设置为 10px, 想要维持盒子原来的大小的话,
把宽高的值减去内边距的值,也就是宽高各为 80px 即可。

6.5 外边距

  • 说明

    margin属性用于设置外边距,就是控制盒子和盒子之间的距离。

  • 设置

属性作用
margin-left左外边距
margin-right右外边距
margin-top上外边距
margin-bottom下外边距
  • 块级盒子水平居中

    • 说明

      • 盒子必须指定了宽度(width)
      • 将左右的外边距都设置为 atuo
格式:
标签选择器 {
    width: 600px;
    margin: 0 auto;
}
​
常见的写法,以下方式也可以
1. margin-lef: auto; margin-right: auto;
2. margin: auto;
3. margin: 0 auto;
  • 文字居中和盒子居中区别

    • 说明

      • 盒子内的文字水平居中是 text-align: center,而且还可以让 行内元素和行内块居中对齐
      • 块级盒子水平居中 左右 margin 改为 auto;
格式:
​
标签选择器 {
    /* 文字 行内元素 行内块元素水平居中 */
    text-align: center;
    /* 块级盒子水平居中 */
    margin: 10px auto;
}
  • 插入图片和背景图片区别

    • 说明

      • 插入图片用的最多,比如产品展示的图片,移动位置靠盒子模型 padding 和 margin属性
      • 背景图片一般用于小图标背景或者超大背景图片,只能通过 background-position属性 来更改位置
格式:
​
标签选择器 {
    /* 图片大小 */
    width: 200px;
    height: 200px;
    /* 更改插入图片的位置 */
    margin: 10px 20px;
}
​
标签选择器 {
    /* 背景图片大小 */
    width: 200px;
    height: 200px;
    background: url(图片路径);
    /* 更改背景图片的位置 */
    background-position: 30px 50px;
}
  • 清除元素的默认内外边距

5QuILF.png

  • 说明

    • 为了更灵活方便的控制网页中的元素,制作网页时,我们需要将元素的默认内外边距清除。
格式:
​
* {
    /* 清除内边距 */
    padding: 0;
    /* 清除外边距 */
    margin: 0;
}
​
注意:
行内元素为了照顾兼容性,尽量只设置左右外边距,不要设置上下内外边距。
  • 外边距合并

    说明: 使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。

    • 相邻块元素垂直外边距的合并
    说明:
    1. 当上下相邻的两个块元素相遇时,如果上面的元素有下外边距 margin-bottom
    2. 下面的元素有上外边距 margin-top,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和,它会取两个值中较大者
    3. 这种现象被称为相邻块元素垂直外边距的合并(也称为外边距塌陷)
    

    5Ql0Yj.png

    解决方法:
    1. 尽量只给一个盒子添加 margin 值
    
    • 嵌套块元素垂直外边距的合并(塌陷)
    说明
    1. 对于两个嵌套关系的块元素,如果父元素没有上内边距及边框
    2. 父元素的上外边距会与子元素的上外边距发生合并
    3. 合并后的外边距为两者中的较大者
    

    5Q8uwT.png

    解决方法:
    1. 可以为父元素定义上边框
    2. 可以为父元素定义上内边距
    3. 可以为父元素添加 overflow: hidden 属性
    

6.6 盒子模型布局稳定性

  • 说明

    • 建议按照 优先使用 宽度(width) 其次 内边距(padding) 再次 外边距(margin)来布局
    width > padding > margin
    
  • 原因

    • margin 会有外边距合并问题
    • padding 会影响盒子大小,需要进行加减计算其次使用
    • width 没有问题,建议优先使用

七、浮动(float)

7.1 CSS 布局的三种机制

CSS 提供了3种机制来设置盒子的摆放位置,分别是普通流(标准流)、浮动和定位。

  1. 普通流(标准流)
1. 块级元素会独占一行,从上向下顺序排列
常用元素: divhrph1~h6uloldlformtable;
​
2. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行
常用元素: spanaiem等;
  1. 浮动

    让盒子从普通流中浮起来,主要作用让多个块级盒子一行显示。

  2. 定位

    将盒子定在浏览器的某一个位置,CSS离不开定位。

7.2 为什么需要浮动?

  1. 如何让多个盒子(div)水平排列成一行?
  2. 如何实现盒子的左右对齐?
依据前面学到的知识,用 `display` 标签 转换为行内块元素(inline-block),但是它有缺点:
1. 它可以实现多个元素一行显示,但是中间会有空白缝隙,不能满足以上第一个问题。
2. 它不能实现以上第二个问题,盒子左右对齐。
所以 我们需要浮动来完成网页布局

7.3 什么是浮动(float)

  1. 概念:
元素的浮动是指设置了浮动属性的元素会
1. 脱离标准普通流的控制
2. 移动到指定位置
  1. 作用
1. 让多个盒子(div)水平排列成一行,使得浮动成为布局的重要手段。
2. 可以实现盒子的左右对齐等等。
3. 浮动最早是用来控制图片,实现文字环绕图片的效果。
  1. 语法
标签选择器 {
    float: 属性值;
}
属性值描述
none元素不浮动(默认值)
left元素向左浮动
right元素向右浮动

浮动口诀 float ----- 浮 漏 特

  1. 浮动口诀之 浮

    浮:漂浮在普通流的上面,脱离标准流,俗称"脱标"。

.box1 {
    width: 300px;
    height: 300px;
    background-color: red;
    float: left;
}
​
.box2 {
    width: 400px;
    height: 400px;
    background-color: green;
}
​
<div class="box1"></div>
<div class="box2"></div>

效果如下:

53m94s.png

  • float 属性会让盒子漂浮在标准流的上面,所以第二个标准流的盒子跑到浮动盒子的底下了。
  1. 浮动口诀之 漏

    漏:把自己原来的位置漏给下面标准流的盒子,就是不占有原来位置,是脱离标准流的,我们俗称"脱标"。

我们看个立体图:

5GAKo9.png

就是一个盒子跑到了另一个盒子的下面,被压起来了,遮挡起来了

  1. 浮动口诀之 特

    浮动----特性 float 属性会改变元素 display 属性。

    任何元素都可以浮动,浮动元素会生成一个块级框,而不论它本身是何种元素,生成的块级框和我们前面的行内块极其相似。

水平排列案例
​
div {
width: 300px;
height: 300px;
color: white;
/* 转换为行内块元素,可以水平显示,但是之间有缝隙,不方便处理 */
/* display: inline-block; */
/* 设置浮动属性,也可以水平排列,并且没有缝隙 */
float: left;
}
​
.box1 {
background-color: red;
}
​
.box2 {
background-color: green;
}
​
.box3 {
background-color: blueviolet;
}
​
​
<div class="box1">我是盒子1</div>
<div class="box2">我是盒子2</div>
<div class="box3">我是盒子3</div>

效果如下:

5GZhYd.png

浮动的元素互相贴靠一起的,如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。

  1. 浮动(float) 小结

    我们使用浮动的核心目的————让多个块级盒子在同一行显示,因为这是我们最常见的一种布局方式。

    特点说明
    加了浮动的盒子是浮起来的,漂浮在其他标准流盒子的上面
    加了浮动的盒子是不占位置的,它原来的位置漏给了标准流的盒子
    特别注意: 浮动元素会改变 display 属性,类似转换为了行内块,但是元素之间没有空白缝隙

7.4 浮动(float)的应用

  1. 浮动和标准流的父盒子搭配

    我们知道,浮动是脱标的,会影响下面的标准流元素,此时,我们需要给浮动的元素添加一个标准流的父亲,这样,最大化的减小了对其他标准流的影响。

    浮动应用案例效果图

    5GmJVU.png

    导航栏案例

    5Gn7Ox.png

    注意,实际重要的导航栏中,我们不会直接用链接 a 而是用 li 包含链接(li+a) 的做法
    1. li+a 语义更清晰,一看这就是有条理的列表型内容
    2. 如果直接用 a,搜索引擎容易辨别为有堆砌关键字嫌疑(故意堆砌关键字容易被搜索引擎有降权的风险),从而影响网站排名。
    

7.5 浮动(float)扩展

7.5.1 浮动元素与父盒子的关系

  • 子盒子的浮动参照父盒子对齐
  • 不会与父盒子的边框重叠,也不会超过父盒子的内边距

5GMy6A.png

7.5.2 浮动元素与兄弟盒子的关系

说明
在一个父级盒子中,如果前一个兄弟盒子是:
1. 浮动的,那么当前盒子会与前一个盒子的顶部对齐。
2. 普通流的,那么当前盒子会显示在前一个兄弟盒子的下方。
​
注意:
浮动只会影响当前的或者是后面的标准流盒子,不会影响前面的标准流。

5GQlHP.png

建议:
如果一个盒子里面有多个子盒子,其中一个盒子浮动了,其他兄弟也应该浮动,防止引起问题。

7.6 CSS 清除浮动

7.6.1 为什么要清除浮动?

答:因为父级盒子很多情况下,不方便给高度,但是子盒子浮动就不占有位置,导致父级盒子高度塌陷,也就是说父级盒子高度为 0 ,由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响,准确的说,并不是清除浮动,而是清除浮动的影响。

清除浮动之后,父级就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了

  • 举例

    • <style>
          .box {
              width: 600px;
              border: 1px solid red;
          }
      ​
          .box div {
              float: left;
              width: 200px;
              height: 200px;
              margin-right: 10px;
              background-color: rgb(0, 200, 255);
          }
      </style><body>
          <div class="box">
              <div></div>
              <div></div>
          </div>
      </body>
      
    • 效果如下

      5clEwR.png

7.6.2 清除浮动的方法

  1. 额外标签法(隔墙法)
  • 举例

    • <style>
          .box {
              width: 600px;
              border: 1px solid red;
          }
      
          .box div {
              float: left;
              width: 200px;
              height: 200px;
              margin-right: 10px;
              background-color: rgb(0, 200, 255);
          }
      </style>
      
      <body>
          <div class="box">
              <div></div>
              <div></div>
              <p style="clear: both;"></p>
          </div>
      </body>
      
    • 效果如下

      5clfcF.png

  • 分析

    • 原理:添加一个空块级元素标签,利用 CSS 的 clear: both; 清除浮动,让父级盒子可以自动获取高度
    • 注意一定要添加块级元素标签
  1. 父级添加 overflow 属性方法
  • 举例

    • <style>
          .box {
              width: 600px;
              border: 1px solid red;
              overflow: hidden;
          }
      ​
          .box div {
              float: left;
              width: 200px;
              height: 200px;
              margin-right: 10px;
              background-color: rgb(0, 200, 255);
          }
      </style><body>
          <div class="box">
              <div></div>
              <div></div>
          </div>
      </body>
      
    • 效果如下

      5clfcF.png

  • 分析

    • 原理

      • 因为 CSS 的 BFC 机制,全称是块级格式化上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,这个块级元素内部的排版完全独立。

      • 作用:独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,也就是说包含块会把浮动元素的高度也计算在内,所以就不用清除浮动来撑起包含块的高度。

      • 形成 BFC 的条件

        • 1、浮动元素,float 除 none 以外的值;
        • 2、定位元素,position(absolute,fixed) ;
        • 3、display 为以下其中之一的值 inline-block,table-cell,table-caption;
        • 4、overflow 除了 visible 以外的值(hidden,auto,scroll);
  1. 使用 ::after 伪元素清除浮动
  • 举例

    • <style>
          .box {
              width: 600px;
              border: 1px solid red;
          }
      ​
          .box div {
              float: left;
              width: 200px;
              height: 200px;
              margin-right: 10px;
              background-color: rgb(0, 200, 255);
          }
      ​
          .box::after {
              content: "";
              display: block;
              clear: both;
          }
      </style><body>
          <div class="box">
              <div></div>
              <div></div>
          </div>
      </body>
      
    • 效果如下

      5clfcF.png

  • 分析

    • 原理:元素生成伪类的作用和效果相当于额外标签法的原理,这个更简单便捷。
  1. 使用双伪元素清除浮动
  • 举例

    • <style>
          .box {
          width: 600px;
          border: 1px solid red;
          }
      ​
          .box div {
          float: left;
          width: 200px;
          height: 200px;
          margin-right: 10px;
          background-color: rgb(0, 200, 255);
          }
      ​
          .box::after,.box::before {
          content: "";
          display: block;
          clear: both;
          }
      </style>
      
    • 效果如下

      5clfcF.png

7.6.3 清除浮动总结

  1. 父级没高度
  2. 子盒子浮动了
  3. 影响下面布局了,我们就应该清除浮动了
清除浮动的方式优点缺点
额外标签法(隔墙法)通俗易懂,书写方便添加许多无意义的标签,结构化较差
父级 overflow: hidden;书写简单溢出隐藏
父级 after 伪元素结构语义化正确由于 IE6-7不支持 :after,兼容性问题
父级双伪元素结构语义化正确由于 IE6-7不支持 :after,兼容性问题

八、定位

8.1 为什么使用定位

5G5uB4.png

我们如果想要实现如上图框选的效果,就需要我们学习定位的知识来进行实现。
​
```css
说明:
1. 将盒子定在某一个位置,自由的漂浮在其他盒子(包括标准流和浮动)的上面
2. 三种布局机制的上下顺序
    1) 标准流在最底层----> 浮动的盒子在中间层-----> 定位的盒子在最上层
```

8.2 定位详解

说明
定位也是用来布局的,由两部分组成:
1. 定位模式
2. 边偏移
  1. 边偏移
说明
1. 简单说,我们定位的盒子,是通过边偏移来移动位置的。
2. 在 CSS 中,通过 topbottomleftright 属性定义元素的边偏移。
3. 定位的盒子有了边偏移才有价值,一般情况下,凡是有定位地方必定有边偏移。
边偏移属性示例描述
toptop: 80px顶端偏移量,定义元素相对于其父元素上边线的距离
bottombottom: 80px底部偏移量,定义元素相对于其父元素下边线的距离
leftleft: 80px左侧偏移量,定义元素相对于其父元素左边线的距离
rightright: 80px右侧偏移量,定义元素相对于其父元素右边线的距离
  1. 定位模式(position)
说明
在 CSS 中,通过 position 属性定义元素的定位模式
​
语法
标签选择器 {
    positon: 属性值;
}

定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式

语义
static静态定位
relative相对定位
absolute绝对定位
fixed固定定位

5GoOhR.png

  • 静态定位(static)

    说明
    1. 静态定位是元素的默认定位方式,无定位的意思,它相当于 border 里面的 none,不要定位的时候用。
    2. 静态定位按照标准流特性摆放位置,它没有边偏移。
    3. 静态定位在布局时几乎不用。
    
  • 相对定位(relative)

    说明
    1. 相对于 自己原来在标准流中位置来移动的。
    2. 原来在标准流的区域继续占有,后面的盒子仍然以标准流的方式对待它。
    

    效果图:

    5Gbab8.png

  • 绝对定位(absolute)

说明
1. 绝对定位是元素以带有定位的父级元素来移动位置(拼爹型)
2. 完全脱标———— 完全不占位置
3. 如果父元素没有定位,则以浏览器为准定位

效果如下:

5GxPMj.png

父元素有定位时
将元素依据最近的已经定位(绝对、固定或相对定位)的父元素进行定位。

5Gxwyd.png

注意:
1. 因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用。
2. 定位口诀——子绝父相
    1) 意思就是子级用绝对定位,父级要用相对定位。
  • 固定定位(fixed)
说明
1. 固定定位是绝对定位的一种特殊形式,如果说绝对定位是一个矩形,那么固定定位就类似于正方形。
2. 完全脱标——完全不占位置。
3. 只认浏览器的可视窗口——浏览器可视窗口 + 边偏移属性 来设置元素的位置;
    1) 跟父元素没有任何关系,单独使用的
    2) 不随滚动条滚动

5JpcY6.png

8.3 定位(position)扩展

  1. 绝对定位的盒子居中
说明
1. 绝对定位/固定定位的盒子不能通过设置 margin: 0 auto; 设置水平居中。
2. left: 50%;  让盒子的左侧移动到父级元素的水平中心位置。
3. margin-left: -100px; 让盒子向左移动自身宽度的一半。

5JPVoR.png

  1. 堆叠顺序(z-index)
说明
1. 在使用定位布局时,可能会出现盒子重叠的情况。
2. 加了定位的盒子,默认后来者居上,后面的盒子会压住前面的盒子。
3. 应用 z-index 层叠等级属性可以调整盒子的堆叠顺序
​
特点
1. 属性值: 正整数、负整数或 0,默认值是 0,数值越大,盒子越靠上。
2. 如果属性值相同,则按照书写顺序,后来居上。
3. 数字后面不能加单位。
​
格式
标签选择器 {
    z-index: 0;
}
​
注意:
1. 只能应用于相对定位、绝对定位和固定定位的元素。
2. 其他标准流、浮动和静态定位无效。

5Ji3cT.png

  1. 定位改变 display 属性
display 是显示模式,可以改变显示模式有以下方式:
1. 可以用 inline-block 转换为行内块
2. 可以用浮动 float 默认转换为行内块(并不完全一样,因为浮动是脱标的)
3. 绝对定位和固定定位也和浮动一样,默认转换为行内块。
​
所以说,一个行内的盒子,如果加了浮动、固定定位和绝对定位,不用转换,直接就可以给这个盒子设置宽和高等。
​
注意:
浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题,没有接触浮动、定位以前是用 padding、border、overflow来解决的。

九、CSS 版心

  1. 说明

    版心(可视区)指的是网页中的主体内容区域,一般在浏览器窗口中水平居中显示,常见的宽度值为 960px、980px、1000px、1200px等。

  2. 布局流程

    为了提高网页制作的效率,布局时通常需要遵守一定的布局流程

    • 确定页面的版心(可视区)
    • 分析页面中的行模块,以及每个行模块中的列模块
    • 制作 HTML 结构
    • CSS 初始化,运用盒子模型的原理,通过 div + css 布局来控制网页的各个模块

如下图所示就是小米商城网页的版心

5w51rn.png

结尾

感谢阅读,css 的特性相对来说也是比较多的,但是当我们学会之后,我们可以让页面变得非常的漂亮,谁不会喜欢漂亮的呢。