1. HTML构成
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>我利用HBuilder创建的第一个页面</title>
</head>
<body>
写代码是一件非常快乐的事情 happy
</body>
</html>
1.1 文档类型的声明标签
<! DOCTYPE> 文档类型声明,作用就是告诉浏览器使用哪个版本的HTML版本来显示网页
<!DOCTYPE html>
这句代码的意思是:当前页面采取的是HTML5版本来显示网页
注意
- <<!DOCTYPE>>声明位于文档中的最前面的位置,处于 html 标签之前
- <<!DOCTYPE>>不是一个HTML标签,它就是文档类型的声明标签
1.2 语言种类
用来定义当前文档显示的语言
- en定义语言为英语
- zh-CN 定义语言为中文
1.3 字符集
字符集(Character set)是多个字符的集合。以便计算机能够识别和存储各种文字
在< head >标签内,可以通过< meta >标签的charset 属性来规定HTML文档应该使用哪种字符编码
<meta charset='UTF-8'>
charset常用的值
-
GB2312: 简体中文
-
BIG5:繁体中文
-
GBK:包含了GB2312和BIG5
-
UTF-8:万国码,基本包含了全世界所有国家需要用到的字符
2. HTML常用标签
2.1 标题标签
<h1>
我是标题标签,作为标题使用
</h1>
标签语义 :作为标题使用
特点:
- 加了标题的文字会变得加粗,字号也会依次变大
- 一个标题独占一行
口诀
<h1>标题标签</h1>
<h1>标题一共六级选</h1>
<h2>文字加粗一行显</h2>
<h3>由大到小依次减</h3>
<h4>从重到轻随之变</h4>
<h5>语法规范书写后</h5>
<h6>具体效果刷新见</h6>
2.2 段落和换行标签
<p>我是段落标签,可以将HTML文本划分为若干个段落</p>
特点
- 文本在一个段落中会根据浏览器窗口的大小自动换行。
- 段落段落之间保有空隙
<br/>我是换行标签,可以对某段文本进行强制换行
特点
- 我是一个单标签
- 我只是简单开始新的一行,我跟段落不一样,段落之间会有一定的间距
2.3 文本格式化标签
<!-- 加粗标签 -->
<strong> 我是加粗标签 推荐使用</strong>
<b>这是我的另一种写法</b>
<!-- 倾斜标签 -->
<em>我是倾斜标签 推荐使用</em>
<i>这是我的另一种写法</i>
<!-- 删除线标签 -->
<del>我是删除线标签 推荐使用</del>
<s>这是我的另一种写法</s>
<!-- 下划线标签 -->
<ins>我是下划线标签 推荐使用</ins>
<u>这是我的另一种写法</u>
2.4 div和span标签
<div>
我是一个和盒子标签,没有语义,用来装内容,布局网页用的
我一个人占据一整行,可以把我理解为一个 大盒子
</div>
<span>
我也是一个盒子标签,于是用来布局使用的
一行中可以放置多个span标签,可以把我理解为一个 小盒子
</span>
2.5 图像标签和路径
2.5.1图像标签
<img src=“图像URL”/>
src 时< img >标签的必须属性,用于指定图像文件的路径和文件名
所谓属性:简单理解就是 属于这个图像标签的特性
图像标签的其他属性
属性 | 属性值 | 说明 |
---|---|---|
src | 图片路径 | 必须属性 |
alt | 文本 | 替换文本,图像不能正常显示 ,使用文字替换 |
title | 文本 | 提示文本,鼠标放到图像上,显示文字 |
width | 像素 | 设置图像的宽度 |
height | 像素 | 设置图像的高度 |
border | 像素 | 设置图像的边框粗细 |
小贴士
在修改图片宽度和高度时,只需要修改其中的一个属性即可,另外一个会跟着等比例缩放,记得哦
注意
- 图像标签可以拥有多个属性,必须写在标签名后面
- 属性之间不分先后顺序,标签名和属性,属性和属性之间均以空格分开
- 属性采取键值对的格式 ,即 key = “value” 的格式
2.5.2 路径
前期知识铺垫
目录文件夹 : 就是普通的文件夹,里面存放 做页面所需要的相关素材,eg: html,图片等
**根目录 😗*打开目录文件夹的第一层就是根目录
2.5.2.1 相对路径 : 以引用文件所在的位置为参考基础,而建立起来的目录路径
相对路径 | 符号 | 说明 |
---|---|---|
同一级路径 | 图像文件 和 HTML文件 位于 同一级目录下 | |
下一级路径 | / | 图像文件 位于 HTML文件 的下一级 |
上一级路径 | …/ | 图像文件 位于 HTML文件 的上一级 |
**2.5.2.2 绝对路径 :**是指目录下的绝对位置,直到达到目标的位置,通常是从盘符开始的路径 绝对路径符号:\
2.6 超链接标签
语法格式:
<a href="跳转目标" target="目标窗口的弹出方式">文本或图像</a>
属性 | 作用 |
---|---|
href | 用于指定链接目标的url地址(必须属性) |
target | 用于指定链接页面的打开方式,其中_self为默认值,_blank为在新窗口中打开 |
小贴士 :
- 如果href里面的地址是一个文件或者压缩包,则会下载这个文件
- *锚点链接:*点我们点击的链接,可以快速的定位到页面中的某个位置。
- 在链接文本的href属性中,设置属性值为 #名字 的形式,举例: < a href = “#abc”>人物简介
- 找到目标位置,在里面添加一个 id 属性 = 刚才的名字 。举例: < h3 id = “abc”>人物介绍<>
2.7 注释
<!-- 注释语句 --> 快捷键:ctrl + /
2.8 特殊字符
特殊字符 | 描述 | 字符代码 |
---|---|---|
空格 |   ; | |
< | 小于号 | < ; |
> | 大于号 | > ; |
& | 和号 | & ; |
¥ | 人民币 | ¥ ; |
© | 版权 | © ; |
® | 注册商标 | ® ; |
° | 摄氏度 | ° ; |
± | 正负号 | ± ; |
× | 乘号 | × ; |
÷ | 除号 | ÷ ; |
² | 平方2(上标2) | ² ; |
³ | 立方3(上标3) | ³ ; |
2.9 表格标签
表格的作用 : 表格主要是用来展示数据用的
2.9.1 表格的基本语法
<!-- 一行三列 -->
<table>
<tr>
<td> C语言 </td>
<td> Java </td>
<td> Python </td>
</tr>
</table>
2.9.2 表头单元格标签
<table>
<tr>
<!-- 表头 -->
<th>姓名</th>
</tr>
</table>
特点 : 表头单元格里面的 文本内容 会 加粗剧中 显示
2.9.3 表格属性
属性名 | 属性值 | 描述 |
---|---|---|
align | left、center、right | 表格 相对 周围元素 的对齐方式 |
border | 1 或 “” | 表格单元 是否拥有 边框,默认为“”,表示没有边框 |
cellpadding | 像素值 | 单元格边框 与 内容 之间的空白, 默认像素为1 |
cellspacing | 像素值 | 单元格 与 单元格 之间的空白,默认像素为2 |
width | 像素值或百分比 | 表格的宽度 |
height | 像素或百分比 | 表格的高度 |
2.9.4 表格结构标签
< thead > </ thead >: 用于定义表格的头部,< thead >内部必须拥有< tr >标签,一般位于第一行
< tbody ></ tbody >: 用于定义表格主题,主要用于存放数据本体
以上标签都是放在< table ></ table >标签中
<table>
<!-- 头部 -->
<thead>
<tr>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
</thead>
<!-- 主体 -->
<tbody>
<tr>
<td>Lix</td>
<td>男</td>
<td>20</td>
</tr>
</tbody>
</table>
2.9.5 合并单元格
合并单元格的方式
- **跨行合并 :**rowspan=“合并单元格的个数”
- **跨列合并 :**colspan=“合并单元格的个数”
目标单元格 :(写合并代码)
- **跨行 :**最上侧单元格为目标单元格,写合并代码
- **跨列 :**最左侧单元格为目标单元格,写合并代码
合并单元格三部曲 :
- 先确定是跨行还是跨列合并
- 找到目标单元格,写上 合并方式 = 合并单元格的数量 。比如:< td colspan = “2” >< td >
- 删除多余的单元格
<!--
需求:将一个三行三列的单元格进行合并
要求:
1. 第一行的第二个单元格和第三个单元格进行合并
2. 第一列的第二个单元格和第三个单元格进行合并
-->
<!-- 合并前 -->
<table width="500" height="249" border="1" cellspacing="0">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<!-- 合并后 -->
<table width="500" height="249" border="1" cellspacing="0">
<tr>
<td></td>
<td colspan="2"></td> <!-- 第一行的第二个单元格和第三个单元格进行合并 -->
</tr>
<tr>
<td rowspan="2"></td> <!-- 第一列的第二个单元格和第三个单元格进行合并 -->
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
2.10 列表标签
列表标签是用来布局使用的,它最大的特点就是 整齐 、整洁 、 有序 。可分为三大类:无序列表 、有序列表 、自定义列表
无序列表
<ul>
<li>列表1</li>
<li>列表2</li>
<li>列表3</li>
...
</ul>
注意
- 无序列表的各个列表项之间没有顺序级别之分 ,是并列的。 你可以理解为大家平起平坐,没有等级之分
- < ul > </ ul >中只能嵌套
- ,直接在< ul > </ ul>标签中输入其他标签或者文字的做法是不被允许的
- 之间相当于一个容器,可以容纳所有元素
有序列表
<ol>
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
...
</ol>
注意
- 有序列表 会按照 一定的顺序 对内容 进行 有序的排列
- < ol > </ ol >中只能嵌套
- ,直接在< ol > </ ol>标签中输入其他标签或者文字的做法是不被允许的
- < li > </ li >之间相当于一个容器,可以容纳所有元素
自定义列表
使用场景 : 用于对术语或名词进行解释和描述,定义列表的 列表项 前 没有 任何项目符号
<dl>
<dt>名词1</dt>
<dd>名词1 解释1</dd>
<dd>名词1 解释2</dd>
...
</dl>
注意
- < dl ></ dl> 里面只能包含 < dt>和</ dd>
- < dt > 和< dd > 个数没有限制,经常是一个< dt >对应多个< dd >
2.11 表单标签
表单的组成 : 在HTML中,一个完整的表单通常是由 表单域 、表单控件(也称为表单元素) 、提示信息 3部分构成
名称 | 解释 | 作用 |
---|---|---|
表单域 | 包含表单元素的的区域,也就是< form >标签包含的区域 | 实现用户信息的收集合传递,并将信息提交给服务器 |
表单控件 | 用户 在表单中 输入 或者 选择的 内容控件 | |
提示信息 |
2.11.1 表单域
<form action="url地址" method="提交方式" name="表单域名称">
各种表单元素控件
</form>
属性解释
属性 | 属性值 | 作用 |
---|---|---|
action | url 地址 | 用于 指定 接收并处理 表单数据 的 服务器程序 的 url地址 |
method | get/post | 用于设置表单数据的提交方式,取值为get或post |
name | 名称 | 用户指定表单的名称,以区分 同一个页面中 的 多个 表单域 |
2.11.2 表单控件(表单元素)
2.11.2.1 input 输入表单元素
input表单元素 : 用于收集用户信息
<input type="属性值" />
注意
- < input/ > 标签为单标签
- type属性值不同,代表着不同的控件类型
type属性的取值及描述
属性值 | 描述 |
---|---|
button | 定义 按钮 |
checkbox | 定义 复选框 |
file | 定义 输入字段 和 “浏览”按钮,供文件上传 |
hidden | 定义 隐藏的 输入字段 |
image | 定义 图像形式的 提交按钮 |
password | 定义 密码字段,该字段中的字符被掩码 |
radio | 定义 单选按钮 |
reset | 定义 重置按钮,重置按钮会清除表单中的所有数据 |
submit | 定义 提交按钮,提交按钮会把表单数据发送到服务器 |
text | 定义 单行的 输入字段,用户可在其中输入文本,默认宽度为20个字符 |
除去type属性外的 其他属性
属性 | 属性值 | 描述 |
---|---|---|
name | 由用户自定义 | 定义input元素的名称 |
value | 由用户自定义 | 规定input元素的值 |
checked | checked | 规定此input元素首次加载时,应当被选中 |
maxlength | 正整数 | 规定输入字段中的字符的最大长度 |
注意
- name 和 value 是每个表单元素都有的属性值,主要给后台人员使用
- name表单元素的名字,要求 单选按钮 和 复选框 要有相同的name值
label标签
< label >标签用于绑定一个表单元素,当点击< label >标签内的文本时,浏览器就会自动将焦点(光标)转到或者选择对应的表单元素上,增加用户体验
语法
<label for="sex">
<input type="radio" name="sex" id="sex">男
</label>
核心 : < label >标签的 for 属性 应当与相关元素的 id 属性相同
2.11.2.2 select 下拉表单元素
使用场景 : 在页面中,如果有多个选项让用户选择,并且想节约页面空间,我们可以使用 < select >标签定义 下拉列表
语法规范
<select>
<option>选项1</option>
<option>选项2</option>
<option>选项3</option>
...
</select>
注意
- < select>中至少包含一对< option >
- 在中定义 select = “selected" 时,当前项即为默认选中项
2.11.2.3 textarea 文本域元素
使用场景 : 当用户输入内容较多的情况下,我们就可以使用标签。 标签是用于定义多行文本输入的控件
语法:
<textarea row="3" cols="20">
文本内容
</textarea>
注意
- 通过< textarea >标签可以轻松地创建多行文本输入框
- cols = “每行中的字符数” , rows = “显示的行数” 。在实际开发中不会使用,都是通过css来改变大小的
3. CSS简介
3.1 语法规范
CSS规则是由两个主要的部分构成:选择器 和 一条或多条声明
- 选择器 是用于指定CSS样式的 HTML 标签 ,花括号内是该对象设置的具体样式
- 属性和属性值以 “键值对” 的形式出现
- 属性是指定的对象设置的样式属性 例如:字体大小,文本颜色等;
- 属性和属性值之间 用英文 “ :”分开
- 多个 “键值对” 之间 用英文 “ ;” 进行区分
3.2 CSS代码风格
3.2.1 样式格式书写
-
紧凑式
h1 {color:deeppink;font-size: 20px;}
-
展开式 (推荐)
h3 { color: pink; font-size: 20 px; }s
3.2.2 样式大小写
-
小写(推荐)
-
h3 { color: pink; }
-
大写
-
H3 { COLOR: PINK; }
3.2.3 空格规范
- 属性值前面 ,冒号后面,保留一个空格
- 选择器(标签)和 大括号 中间保留一个空格
h3 {
color: pink;
}
4. CSS基础选择器
4.1 选择器的作用
选择器就是 根据不同需求 把不同的标签 选出来,简单来说,就是 选择标签用的
4.2选择器的分类
4.2.1 基础选择器
4.2.1.1 标签选择器
标签选择器(元素选择器):是指 HTML标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的CSS样式
-
语法
标签名 { 属性1: 属性值1; 属性2: 属性值2; 属性3: 属性值3; 属性4: 属性值4; }
-
作用 : 可以把某一类标签全部选择出来
-
优点 : 能快速为页面中同类型的标签统一设置样式
-
缺点 : 不能设计差异化样式,只能选择全部
4.2.1.2 类选择器
类选择器 : 可以差异化的选择不同标签,单独选择一个或者其中的某几个标签
-
语法
.类名 { 属性1: 属性值1; ... }
-
注意
- 类选择器使用 “.”(英文点号)进行标识,后面紧跟类名(自定义,不可以使用标签名字)
- 长名称或词组可以使用 中横线 来为选择器命名
- 不要使用纯数字,中文等命名,尽量使用英文字母来标识
- 命名要有意义,尽量使别人一眼就知道这个类的目的
- 记忆口诀 : 样式点定义,结构类调用。一个或多个,开发最常用。
类选择器-多类名 : 我们可以给一个标签指定**多个类名**,从而达到更多的选择目的,简单理解就是一个标签有多个名字
-
多类名使用方式
<div class="red font20">亚瑟</div> <!-- 1. 在标签class属性中写 多个类名 2. 多个类名中间必须使用 空格 分开 --> <style> .red { color: red; } .font20 { font-size: 20px; } </style>
-
多类名开发中使用的场景
- 可以把一些标签元素**相同的样式(公共部分)** 放到一个类里面
- 这些标签都可以调用这个公共的类,然后再调用自己独有的类(类似于Java中的继承)
- 节省CSS代码,方便维护
4.2.1.3 id选择器
id选择器 : 以id 属性来设置id选择器,CSS中id选择器以 ’#‘ 来定义
-
语法
#id名 { 属性1: 属性值1; ... }
-
记忆口诀 : 样式 # 定义,结构 id 调用,只能调用一次,别人切勿使用
4.2.1.4 通配符选择器
通配符选择器 : 使用 " * " 定义,表示选取页面中的所有标签元素
语法
* {
属性1: 属性值1;
...
}
4.2.2 复合选择器
定义 : 复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。
- 复合选择器可以更准去,更高效的选择目标元素(标签)
- 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
- 常用的复合选择器包括:后代选择器 子选择器 并集选择器 伪类选择器
4.2.2.1 后代选择器
后代选择器 : 又称为 包含选择器 ,可以选择父元素里面的子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔 。当标签发生嵌套时,内层标签就成为了外层标签的后代。
语法
元素1 元素2 {样式声明}
小贴士 : 上述语法表示 选择 元素1 里面的 所有 元素2
- 元素1 和 元素2 中间用 空格隔开
- 元素1 是父级,元素2是子级,最终选择的是元素2
- 元素2可以是儿子,也可以是孙子等,只要是元素1的后代即可
- 元素1和元素2可以是任意基础选择器
代码举例
<style>
/* 我想要把ol里面的小li选出来改为pink */
ol li {
color: pink;
}
/* 把 ol li 里面呢的 a标签文本内容 变为red */
ol li a {
color: red;
}
/* 我想要把 第二个ul 里面的 小li中的 a标签文本内容 选出来 改为yellow */
.nav li a {
color: yellow;
}
</style>
<body>
<ol>
变态写法
<li>我是ol 的孩子</li>
<li>我是ol 的孩子</li>
<li>我是ol 的孩子</li>
<li><a href="#">我是孙子</a></li>
</ol>
<ul>
<li>我是ul 的孩子</li>
<li>我是ul 的孩子</li>
<li>我是ul 的孩子</li>
<li><a href="#">不会变化的</a></li>
</ul>
<ul class="nav">
<li>我是ul 的孩子</li>
<li>我是ul 的孩子</li>
<li>我是ul 的孩子</li>
<li><a href="#">不会变化的</a></li>
<li><a href="#">不会变化的</a></li>
<li><a href="#">不会变化的</a></li>
<li><a href="#">不会变化的</a></li>
</ul>
</body>
4.2.2.2 子选择器
子选择器 : 也称为子元素选择器。只能选择 作为某元素的 最近一级 子元素。简单理解就是 选亲儿子元素
语法
元素1>元素2 {样式声明}
小贴士 : 上述语法表示 选择元素1里面的 所有 直接后代(子元素)元素2
- 元素1 和 元素2 中间用 大于号 隔开
- 元素1是父级,元素2是子级,最终选择的是 元素2
- 元素2必须是亲儿子 ,其孙子,重孙子都不归它管,也可以称它为亲儿子选择器
代码举例
<style>
.nav>a {
color: red;
}
</style>
<div class="nav">
<a href="#">我是儿子</a> //变红
<p>
<a href="#">我是孙子</a> //不变色
</p>
</div>
4.2.2.3 并集选择器
并集选择器: 它可以选择多组标签,同时为他们定义相同的样式。通常用语集体声明
并集选择器 是各选择器 通过英文逗号(,)链接而成
语法
元素1,元素2 { 样式声明 }
小贴士 : 上述语法表示 选择元素1 和 元素2
注意
- 元素1 和 元素2 中间用 逗号 隔开
- 逗号可以理解为 和 的意思
- 并集选择器通常用语集体声明
代码举例
<style>
/* 要求1: 请把熊大和熊二改为粉色 */
div,
p {
color: pink;
}
/* 要求2: 请把熊大和熊二改为粉色 还有 小猪一家改为粉色 */
div,
p,
.pig li {
color: pink;
}
/* 约定的语法规范,我们并集选择器喜欢竖着写 */
/* 一定要注意,最后一个选择器 不需要加逗号 */
</style>
<body>
<div>熊大</div>
<p>熊二</p>
<span>光头强</span>
<ul class="pig">
<li>小猪佩奇</li>
<li>猪爸爸</li>
<li>猪妈妈</li>
</ul>
</body>
4.2.2.4 伪类选择器
伪类选择器 : 它用于某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第一个,第n个元素
伪类选择器书写最大的特点就是:用冒号 表示。 比如 :hover , :first-child
4.2.2.4.1 链接伪类选择器
a:link /* 选择所有未被访问的链接 */
a:visited /* 选择所有已经被访问的链接 */
a:hover /* 选择鼠标指针位于其上的链接 */
a:active /* 选择活动链接(鼠标按下未弹起的链接) */
代码举例
<style>
/* 1.未访问的链接 a:link 把没有点击过的(访问过的)链接选出来 */
a:link {
color: #333;
text-decoration: none;
}
/*2. a:visited 选择点击过的(访问过的)链接 */
a:visited {
color: orange;
}
/*3. a:hover 选择鼠标经过的那个链接 */
a:hover {
color: skyblue;
}
/* 4. a:active 选择的是我们鼠标正在按下还没有弹起鼠标的那个链接 */
a:active {
color: green;
}
</style>
<body>
<a href="#">小猪佩奇</a>
<a href="http://www.xxxxxxxx.com">未知的网站</a>
</body>
链接伪类选择器的注意事项
- 为了确保链接伪类选择生效,请按照 LVHA 的循环顺序声明 。 :link - :visited - :hover - :active . 记忆口诀:love hate
- 因为 a链接 在浏览器中具有默认的样式,所以我们实际开发工作中,都需要给链接单独指定样式
链接伪类选择器在实际开发工作中的写法
//a 是标签选择器 所有的链接
a {
color: gray;
}
// :hover 是链接伪类选择器 鼠标经过
a:hover {
color: red; //鼠标经过的时候,由原来的 灰色 变成了 红色
}
代码举例
<style>
body {
color: red;
}
a {
color: #333;
text-decoration: none;
}
a:hover {
color: #369;
text-decoration: underline;
}
</style>
<body>
<a href="#">小猪佩奇</a>
<a href="http://www.xxxxxxxx.com">未知的网站</a>
</body>
4.2.2.4.2 :focus 选择器
:focus 它用于选取获得焦点的表单元素
焦点就是光标,一般情况< input > 类表单元素才能获取,因此这个选择器也主要针对于 表单元素来说。
input:focus {
background-color:yellow
}
代码举例
<style>
/* // 把获得光标的input表单元素选取出来 */
input:focus {
background-color: pink;
color: red;
}
</style>
<body>
<input type="text">
<input type="text">
<input type="text">
</body>
5. CSS字体属性
5.1 font-family
font-family : 定义 文本 的字体系列
标签名 {
font-family: Arial,"Mircrosoft Yahei","微软雅黑";
}
注意
- 各种字体之间必须使用英文状态下的逗号隔开
- 一般情况下,如果有空格隔开的多个单词组成的字体,加引号(单引号,双引号都可以)
- 尽量使用系统默认自带的字体,保证在任何用户的浏览器中都能正确显示
5.2 font-size
font-size : 定义 字体大小
p {
font-size: 20px;
}
注意
- px (像素)大小是我们网页的最常用单位
- 谷歌浏览器默认的文字大小为16px
- 不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确的大小,不要默认大小
- 可以给body指定整个页面文字的大小
5.3 font-weight
font-weight : 定义 文本字体 的 粗细
P {
font-weight: bold;
}
属性值 | 描述 |
---|---|
normal | 默认值(不加粗字体) |
bold | 定义粗体(加粗字体) |
100~900(推荐) | 400等同于normal,700等同于bold。数字后面不跟单位 |
5.4 font-style
font-style : 设置 文本的风格
P {
font-style: normal;
}
属性值 | 作用 |
---|---|
normal | 默认值浏览器会显示标准的字体样式 |
italic | 浏览器会显示斜体的字体样式 |
注意: 平时很少给文字加斜体,反而给斜体标签(em,i)改为不倾斜字体
5.5 font
font : 字体复合属性 可以把文字样式综合来写,从而达到节约代码,快速开发的目的
语法格式
body {
font: font-style font-weight font-size/font-height font-family
}
//使用前
body {
font-style: italic;
font-weight: 600;
font-size: 50px;
font-family: "Microsoft Yahei";
}
//使用后
body {
font: italic 600 50px "Microsoft Yahei";
}
注意
-
使用 font 属性时,必须按照上面语法格式中的顺序书写,不能更换顺序 , 并且各个属性间以 空格 隔开
-
不需要设置的属性可以省略(取默认值),但 必须保留 font-size 和 font-family 属性 ,否则 font 属性不起作用
6. CSS文本属性
6.1 color
color : 文本颜色 用于定义文本的颜色
div {
color: red;
}
属性 | 属性值 |
---|---|
预定义颜色 | red,green,blue…,(填写英文单词) |
十六进制(推荐) | #FF0000,#FF6600,#28E34… |
RGB代码 | rgb(255,0,0) 或 rgb(100%,0%,0%) |
6.2 text-aligh
text-align : 文本对齐 用于设置元素内 文本内容的 水平对齐方式
div {
text-align: center;
}
属性值 | 解释 |
---|---|
left | 左对齐(默认值) |
right | 右对齐 |
center | 剧中对齐 |
6.3 text-decoration
text-decoration : 文本修饰 规定添加到文本的修饰,可以给文本添加 下划线 ,上出现 .上划线 等
div {
text-decoration: underline;
}
属性值 | 描述 |
---|---|
none | 默认,没有装饰线(最常用) |
underline | 下划线,链接 a 自带下划线(常用) |
overline | 上划线(几乎不用) |
line-through | 删除线(不常用) |
<!-- 去除 超链接 下面的 下划线 -->
<style>
a {
text-decoration: none;
}
</style>
<body>
<div>
<a href="#">封神榜</a>
</div>
</body>
6.4 text-indent
text-indent : 文本缩进 用来指定文本的第一行的缩进,通常是段落的首行缩进
<style>
P {
text-indent: 20px;
}
</style>
<!-- 通过设置该属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值 -->
<style>
p {
text-indent: 2em; //首行缩进2个字的距离
}
</style>
em 是一个相对单位,就是当前元素 (font-size) 1个文字的大小 ,如果当前元素没有设置大小,则会按照父元素的1个文字的大小
6.5 line-height
line-height : 行高 用于设置行与行之间的距离,可以控制文字与行之间的距离 行间距 = 文本高度 + 上间距 + 下间距
<style>
p {
line-height: 30px;
}
</style>
6.6 list-style
补充 : 去掉 li 前面的项目符号(小圆点)
语法
<style>
list-style: none;
<style>
7. CSS引入方式
7.1 行内样式(行内式)
行内样式 : 也称为内联样式, 它是 在元素标签内部的style属性中设定CSS样式。适用于简单的样式
<div style="color:red; font-size: 12px">
我爱CSS
</div>
7.2 内部样式(嵌入式)
内部样式 : 也称为 内嵌样式 ,是写到HTML页面内部,是将所有的CSS代码抽取出来,单独放到一个< style >标签中
<style>
<div> {
color: red;
font-size: 12px;
}
</style>
注意
- < style >标签理论上可以放在HTML文档的任何地方,但一般会放在文档的< head >标签中
- 通过此种方式,可以方便控制当前整个页面中的元素样式设置
- 代码结构清晰,但是并没有实现结构与样式完全分离
- 使用内部样式设定CSS,通常也被称为**嵌入式引入** ,这种方式是我们练习时常用的方式
7.3 外部样式(链接式)【推荐】
外部样式 : 实际开发中都是外部样式表,它适合于样式比较多的情况,核心是 : 样式单独写到CSS文件中,之后把CSS文件引入到HTML页面中
步骤 :
- 新建一个后缀名为.css的样式文件,把所有的CSS代码放到此文件中。
- 在HTML页面中,使用< link > 标签引入这个文件
<link rel="stylesheet" href="css文件路径">
属性 | 作用 |
---|---|
rel | 定义当前文档与被链接文档之间的关系。stylesheet表示被链接的文档是一个样式表文件 |
href | 定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径 |
8. Emmet 语法
8.1 Emmet语法快速生成html标签
-
生成标签 直接输入标签名称 按tab键即可 比如: div 然后按tab键 就可以生成 < div > </ div >
<!-- div 按tab键 --> <body> <div></div> </body>
-
如果想要生成多个相同的标签 加上*就可以了 比如:div * 3 就可以快速生成3个div标签
<!-- div*3 按tab键 --> <body> <div></div> <div></div> <div></div> </body>
-
如果有父子级关系的标签 ,可以用 > 。比如:ul>li 就可以生成 < ul >< li ></ li ></ ul >
<!-- ul>li 按tab键 --> <body> <ul> <li></li> </ul> </body>
-
如果有兄弟关系的标签,用 + 就可以了。 比如:div+p
<!-- div+p 按tab键 --> <body> <div></div> <p></p> </body>
-
如果生成带有类名或者id名字的 ,直接 .类名 或者 #名称 按tab键就可以了
<!-- .abc 按tab键 --> <body> <div class="abc"></div> </body> <!-- #bar 按tab键 --> <div id="bar"></div> <!-- span.nav 按tab键 --> <body> <span class="nav"></span> </body> <!-- span#main 按tab键 --> <body> <span id="main"></span> </body>
-
如果想要生成的div类名是由顺序的,可以使用自增符号 $
<!-- .demo$*5 按tab键--> <body> <div class="demo1"></div> <div class="demo2"></div> <div class="demo3"></div> <div class="demo4"></div> <div class="demo5"></div> </body> <!-- span.demo$*3 按tab键 --> <body> <span class="demo1"></span> <span class="demo2"></span> <span class="demo3"></span> </body>
-
如果想要在生成的标签内部写内容,可以用 { } 表示
<!-- div{我爱CSS} 按tab键 --> <body> <div>我爱CSS</div> </body> <!-- div{$}*4 按tab键 --> <body> <div>1</div> <div>2</div> <div>3</div> <div>4</div> </body>
8.2 Emmet语法快速生成CSS样式
<style>
.one {
text-align: center; //tac 按tab键
text-indent: 2em; //ti2em 按tab键
width: 100px; //w100 按tab键
height: 200px; //h200 按tab键
line-height: 26px; //lh26px 按tab键
text-decoration: none; //tdn 按tab键
}
</style>
9. CSS的元素显示模式
9.1 什么是元素的显示模式
元素的显示模式 : 它就是 元素(标签)以什么方式进行显示 。比如 < div > 自己独占一行、一行可以放多个< span >标签
HTML元素一般分为 块元素 和 行内元素 两种类型
9.2 元素显示模式的分类
9.2.1 块元素
常见的块元素有 : h1 ~ h6、p、div、ul、ol、li等,其中 div 标签是 最典型的块元素
块元素的特点
- 比较霸道,自己独占一行
- 高度,宽度,外边距以及内边距都可以控制
- 宽度默认是容器(父级宽度)的100%
- 是一个容器及盒子,里面可以放 行内元素 或者 块级元素
注意
- 文字类的元素内不能使用块级元素
- p标签主要用于存放文字,因此p里面不能放块级元素,特别是不能放div
- 同理,h1 ~ h6 等都是文字类块级标签,里面也不能放其他块级元素
9.2.2 行内元素
常见的行内元素有 : a、strong、b、em、i、del、s、ins、u、span等,其中 span 标签是 最典型的行内元素 。有的地方也将行内元素称为 内敛元素
行内元素的特点
- 相邻 行内元素 在一行上,一行可以显示多个
- 高、宽 直接设置是无效的
- 默认宽度 就是 它本身内容的宽度
- 行内元素只能容纳 文本 或 其他行内元素
注意
- 链接里面不能在放链接
- 特殊情况链接 < a > 里面可以放块级元素,但是要给< a >转换一下块级模式最安全
9.2.3 行内块元素
在行内元素找那个有几个特殊的标签: < img/>、< input/>、< td >,它们同时具有 块级元素 和 行内元素 的特点
行内块元素的特点
- 和相邻行内元素(行内块)在一行上,但是他们之间会有空白间隙,一行可以显示多个(行内元素的特点)
- 默认宽度就是它本身内容的宽度(行内元素的特点)
- 高度,行高,外边距以及内边距都可以控制(块级元素的特点)
9.3 元素显示模式的转换
场景 : 特殊情况下,我们需要元素模式的转换,简单理解:一个模式的元素 需要 另外一种模式的特性。比如想要增加链接< a >的处罚范围
转换方式 :
- 转换为块元素 :display:block
- 转换为行内元素 :display:inline
- 转换为行内块 :display:inline-block
代码举例
<style>
a {
width: 150px;
height: 50px;
background-color: pink;
/* 把 行内元素 a 转换为 块级元素 */
display: block;
}
div {
width: 300px;
height: 100px;
background-color: purple;
/* 把 div 块级元素 转换为 行内元素 */
display: inline;
}
span {
width: 300px;
height: 30px;
background-color: skyblue;
/* 把 span 行内元素 转换为 行内块元素 */
display: inline-block;
}
</style>
<body>
<a href="#">金星阿姨</a>
<a href="#">金星阿姨</a>
<div>我是块级元素</div>
<div>我是块级元素</div>
<span>行内元素转换为行内块元素</span>
<span>行内元素转换为行内块元素</span>
</body>
9.4 小技巧:单行文字垂直居中
方案 : 让 文字的高度 等于 盒子的高度
代码举例
<style>
div {
width: 200px;
height: 40px; //盒子的高度
background-color: pink;
line-height: 40px; //文字的高度(行高)
}
</style>
<body>
<div>我要居中</div>
</body>
单行文字垂直居中的原理 : 行高是由 上空隙 + 文字本身高度 + 下空隙 三部分组成,行高的上空隙和下空隙把文字挤到了中间。
- 如果行高小于盒子的高度 :文子会偏上展示
- 如果行高大于盒子的高度: 文字会偏下展示
10. CSS的背景
10.1 背景颜色
background-color : 该属性定义了元素的背景颜色
background-color:颜色值;
小贴士 : 一般情况下 元素背景颜色默认值是 transparent(透明) ,我们也可以手动指定背景颜色为透明色。
10.2 背景图片
background-image : 该属性描述了元素的背景图像。实际开发 常见于logo或者一些装饰性的小图片或者是超大的背景图片
它的优点是:非常便于控制位置 。(精灵图也是一种运用场景)
background-image: none | url(url)
参数值 | 作用 |
---|---|
none | 无背景图(默认的) |
url | 使用绝对或者相对地址指定背景图像 |
10.3 背景平铺
background-repeat : 如果需要在HTML页面上对背景图片进行平铺,可以使用此属性
background-repeat: repeat | no-repeat | repeat-x | repeat-y
属性值 | 作用 |
---|---|
repeat | 背景图像在纵向和横向上平铺(默认的) |
no-repeat | 背景图像不平铺 |
repeat-x | 背景图像在横向上平铺 |
repeat-y | 背景图像在纵向上平铺 |
10.4 背景图片位置
background-position : 该属性可以改变图片在背景中的位置
background-position: x y;
小贴士 : 参数代表的意思是 : x坐标 和 y坐标。可以是 方位名词 或者 精确单位
参数值 | 说明 |
---|---|
length | 百分数 | 由 浮点数字 和 单位标识符 组成的长度值 |
position | top | center | bottom | left | center | right 方位名词 |
10.4.1 参数是方位名词
- 如果指定的两个值都是方位名词,则两个值前后顺序无关。例如:left top 和 top left 效果一致
- 如果只指定了一个方位名词,另一个值省略,则第二个值默认剧中对齐
代码举例
<style>
div {
width: 300px;
height: 300px;
background-color: pink;
background-image: url(images/logo.png);
background-repeat: no-repeat;
/* background-position: 方位名词; */
/* background-position: center top; */
/* background-position: right center; */
/* 如果是方位名词 right center 和 center right 效果是等价的 跟顺序没有关系 */
/* background-position: center right; */
/* 此时 水平一定是靠右侧对齐 第二个参数省略 y 轴是 垂直居中显示的 */
/* background-position: right; */
/* 此时 第一个参数一定是 top y轴 顶部对齐 第二个参数省略x 轴是 水平居中显示的 */
background-position: top;
}
</style>
10.4.2 参数是方位名词
- 如果参数值是精确坐标,那么第一个肯定是x坐标,第二个一定是y坐标
- 如果只指定一个数值,那该数值一定是x坐标,另一个默认垂直剧中
代码举例
<style>
div {
width: 300px;
height: 300px;
background-color: pink;
background-image: url(images/logo.png);
background-repeat: no-repeat;
/* 20px 50px; x轴一定是 20 y轴一定是 50 */
/* background-position: 20px 50px; */
/* background-position: 50px 20px; */
/* 20px 指定x轴距离为 20px y轴默认垂直居中 */
background-position: 20px;
}
</style>
10.4.3 参数是混合单位
如果指定的两个值是 精确单位 和 方位名词 混合使用,则第一个值是 x坐标 , 第二个值是 y坐标
代码举例
<style>
div {
width: 300px;
height: 300px;
background-color: pink;
background-image: url(images/logo.png);
background-repeat: no-repeat;
/* 20px center 一定是x 为 20 y 是 center 等价于 background-position: 20px */
/* background-position: 20px center; */
/* 水平是居中对齐 垂直是 20 */
background-position: center 20px;
}
</style>
10.5 背景图像固定(背景附着)
background-attachment : 该属性设置 背景图像是否固定 或者 随着页面的其余部分滚动
background-attchment 可以制作视差滚动效果
background-attchment: scroll | fixed
参数 | 作用 |
---|---|
scroll | 背景图像是随着对象内容滚动 |
fixed | 背景图像固定 |
10.6 背景复合写法
为了简化背景属性的代码,我们可以将这些属性合并简写在同一个属性 background 中,从而节约代码量
当使用简写属性时,没有特定的书写顺序,一般习惯约定顺序为:
background:背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;
background: transparent url(image.jpg) repeat-y fixed top;
小贴士 : 实际开发中提倡这种写法
代码举例
<style>
body {
/* background-image: url(images/bg.jpg);
background-repeat: no-repeat;
background-position: center top; */
/* 把背景图片固定住 */
/* background-attachment: fixed;
background-color: black; */
background: black url(images/bg.jpg) no-repeat fixed center top;
color: #fff;
font-size: 20px;
}
</style>
<body>
<p>天王盖地虎, pink老师一米五</p>
<p>天王盖地虎, pink老师一米五</p>
<p>天王盖地虎, pink老师一米五</p>
...
<p>天王盖地虎, pink老师一米五</p>
<p>天王盖地虎, pink老师一米五</p>
<p>天王盖地虎, pink老师一米五</p>
</body>
10.7 背景色半透明
background : 背景颜色半透视效果
background: rgba(0,0,0,0.3);
- 最后一个参数是alpha透明度,取值范围在 0 ~ 1 之间
- 我们习惯把0.3 的 0 省略掉,写为background: rgba(0,0,0,.3);
- 注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响
- CSS3 新增属性,是IE9+ 版本浏览器才支持的
- 但是现在实际开发,我们不太关注兼容性写法了,可以放心使用
11. CSS的三大特性
11.1 层叠性
相同选择器 给设置形同的样式,此时一个样式就会**覆盖(层叠)**另外一个冲突的样式。
层叠性 主要解决 样式冲突 的问题
层叠的原则 :
- 样式冲突,遵循的原则是 就近原则 ,哪个样式离结构近,就执行哪个样式
- 样式不冲突,不会层叠
代码举例
<style>
div {
color: red;
font-size: 12px;
}
div {
color: pink; // pink 会覆盖掉 上面的 red , 但是不会覆盖font-size
}
</style>
<body>
<div>长江后浪推前浪,前浪死在沙滩上</div>
</body>
11.2 继承性
CSS中的继承:子标签会继承父标签的某些样式,如文本颜色和字号。简单理解就是:子承父业
- 恰当地使用继承 可以简化代码,降低CSS样式的复杂性
- 子元素可以继承父元素的样式(text- 、font- 、line- ,这些开头的可以继承,以及color属性)
代码举例
<style>
div {
color: pink;
font-size: 14px;
}
</style>
<body>
<div>
<p>龙生龙,凤生凤,老鼠生的孩子会打洞</p>
</div>
</body>
11.2.1 行高的继承性
body{
font: 12px/1.5 Mircrosoft YaHei
}
- 行高可以跟单位,也可以不跟单位
- 如果子元素没有设置行高,则会继承父元素的行高1.5
- 此时子元素的行高是:当前子元素的文字大小*1.5
- body行高 1.5 这样写法的最大优势就是里面子元素可以根据自己文字大小,自动调整行高
代码举例
<style>
body {
color: pink;
/* font: 12px/24px 'Microsoft YaHei'; */
font: 12px/1.5 'Microsoft YaHei';
}
div {
/* 子元素继承了父元素 body 的行高 1.5 */
/* 这个1.5 就是当前元素文字大小 font-size 的1.5倍 所以当前div 的行高就是21像素 */
font-size: 14px;
}
p {
/* 1.5 * 16 = 24 当前的行高 */
font-size: 16px;
}
/* li 么有手动指定文字大小 则会继承父亲的 文字大小 body 12px 所以 li 的文字大小为 12px
当前li 的行高就是 12 * 1.5 = 18
*/
</style>
<body>
<div>粉红色的回忆</div>
<p>粉红色的回忆</p>
<ul>
<li>我没有指定文字大小</li>
</ul>
</body>
11.3 优先级
当同一个元素指定多个选择器,就会有优先级的产生
- 选择器相同。则执行层叠性
- 选择器不同,则根据 选择器权重 执行
选择器权重表
选择器 | 选择器权重 |
---|---|
继承 或者 * | 0,0,0,0 |
元素选择器 | 0,0,0,1 |
类选择器,伪类选择器 | 0,0,1,0 |
ID选择器 | 0,1,0,0 |
行内样式 style=“” | 1,0,0,0 |
!important 重要的 | 无穷大 |
优先级注意点
选择器权重表可以简记忆:通配符和继承权重为 0 、标签选择器为 1 、类(伪类)选择器为10、id选择器为 100、行内样式为 1000、!important 无穷大。
继承的权重是 0 ,如果该元素标签被直接选中,不管父元素权重有多高,子元素得到的权重都是 0
代码举例
<style>
/* 父亲的权重是 100 */
#father {
color: red!important;
}
/* p继承的权重为 0 */
/* 所以以后我们看标签到底执行哪个样式,就先看这个标签有么有直接被选出来 */
p {
color: pink;
}
body {
color: red;
}
/* a链接浏览器默认制定了一个样式 蓝色的 有下划线 a {color: blue;}*/
a {
color: green;
}
</style>
<body>
<div id="father">
<p>你还是很好看</p>
</div>
<a href="#">我是单独的样式</a>
</body>
权重叠加问题
权重叠加 : 如果是复合选择器,则会有权重叠加,需要计算权重
- div ul li ----------> 0,0,0,3
- .nav lu li ----------> 0,0,1,2
- a:hover ----------> 0,0,1,1
- .nav a ----------> 0,0,1,1
代码举例
<style>
/* 复合选择器会有权重叠加的问题 */
/* 权重虽然会叠加,但是永远不会有进位 */
/* ul li 权重 0,0,0,1 + 0,0,0,1 = 0,0,0,2 2 */
ul li {
color: green;
}
/* li 的权重是 0,0,0,1 1 */
li {
color: red;
}
/* .nav li 权重 0,0,1,0 + 0,0,0,1 = 0,0,1,1 11 */
.nav li {
color: pink;
}
</style>
<body>
<ul class="nav">
<li>大猪蹄子</li>
<li>大肘子</li>
<li>猪尾巴</li>
</ul>
</body>
12. 盒子模型
12.1 盒子模型的组成
所谓盒子模型 : 就是把HTML页面中的布局元素看做是一个矩形的盒子,也就是一个盛装内容的容器
CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边框 、外边距 、内边距 、和 实际内容 。
12.1.1 边框(border)
border 可以设置元素边框,边框有三部分组成:边框宽度(粗细) 、边框样式 、边框颜色
border: border-width || border-style || border-color
属性 | 作用 |
---|---|
border-width | 定义边框粗细、单位是px |
border-style | 边框样式 |
border-color | 边框颜色 |
**边框简写方式 **
border: 1px solid red; //没有顺序之分
//注意:边框会影响盒子的实际大小
边框分开写法
border-top: 1px solid red; /*只设定上边框,其余同理*/
代码举例
<style>
div {
width: 300px;
height: 200px;
/* border-width 边框的粗细 一般情况下都用 px */
border-width: 5px;
/* border-style 边框的样式 solid 实线边框 dashed 虚线边框 dotted 点线边框*/
border-style: solid;
/* border-style: dashed; */
/* border-style: dotted; */
/* border-color 边框的颜色 */
border-color: pink;
/* 边框的复合写法 简写 */
border: 5px solid pink;
}
</style>
<body>
<div></div>
</body>
12.1.1.1 border-collapse
border-collapse : 表格的细线边框,该属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框
语法
border-collapse: collapse;
- collapse单词是 合并 的意思
- border-collapse:collapse;表示相邻边框合并在一起
代码举例
<style>
table {
width: 500px;
height: 249px;
}
th {
height: 35px;
}
table,
td, th {
border: 1px solid pink;
/* 合并相邻的边框 */
border-collapse: collapse;
font-size: 14px;
text-align: center;
}
</style>
<body>
<table align="center" cellspacing="0">
<thead>
<tr>
<th>排名</th>
<th>关键词</th>
<th>趋势</th>
<th>进入搜索</th>
<th>最近七日</th>
<th>相关链接</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>鬼吹灯</td>
<td><img src="down.jpg"></td>
<td>456</td>
<td>123</td>
<td> <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a> </td>
</tr>
<tr>
<td>1</td>
<td>鬼吹灯</td>
<td><img src="down.jpg"></td>
<td>456</td>
<td>123</td>
<td> <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a> </td>
</tr>
<tr>
<td>3</td>
<td>西游记</td>
<td><img src="up.jpg"></td>
<td>456</td>
<td>123</td>
<td> <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a> </td>
</tr>
<tr>
<td>1</td>
<td>鬼吹灯</td>
<td><img src="down.jpg"></td>
<td>456</td>
<td>123</td>
<td> <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a> </td>
</tr>
<tr>
<td>1</td>
<td>鬼吹灯</td>
<td><img src="down.jpg"></td>
<td>456</td>
<td>123</td>
<td> <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a> </td>
</tr>
<tr>
<td>1</td>
<td>鬼吹灯</td>
<td><img src="down.jpg"></td>
<td>456</td>
<td>123</td>
<td> <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a> </td>
</tr>
</tbody>
</table>
</body>
12.1.2 内边距(padding)
padding 属性用于设置内边距,即 边框 与 内容 之间的距离
属性 | 作用 |
---|---|
padding-left | 左内边距 |
padding-right | 右内边距 |
padding-top | 上内边距 |
padding-bottom | 下内边距 |
复合写法 (简写)
值的个数 | 表达意思 |
---|---|
padding:5px; | 1个值,代表上下左右都有5像素的边框 |
padding:5px 10px; | 2个值,代表上下内边距是5像素,左右内边距是10像素 |
padding:5px 10px 20px; | 3个值,代表上内边距5像素,左右内边距10像素,下内边距20像素 |
padding:5px 10px 20px 30px; | 4个值,上是5像素,右 10像素,下 20像素,左 30像素 |
注意 : 内边距会影响盒子的实际大小
12.1.2.1 新浪导航案例
<style>
.nav {
/* div盒子的宽度没有给,默认占满整行,也就是100% */
height: 41px;
border-top: 3px solid #ff8500;
border-bottom: 1px solid #edeef0;
background-color: #fcfcfc;
line-height: 41px;
}
.nav a {
/*
核心:
将每个a标签先转换为行内块元素
接着,不要给每个标签宽度,而是用padding撑开盒子,这样就能保证文字之间的距离都是相等的
*/
/* a属于行内元素 此时必须要转换 行内块元素 */
display: inline-block;
height: 41px;
padding: 0 20px; /*使用padding ,撑开每个盒子,保证文字之间的距离都是相等的*/
font-size: 12px;
color: #4c4c4c;
text-decoration: none;
}
.nav a:hover {
background-color: #eee;
color: #ff8500;
}
</style>
<body>
<div class="nav">
<a href="#">新浪导航</a>
<a href="#">手机新浪网</a>
<a href="#">移动客户端</a>
<a href="#">微博</a>
<a href="#">关注我</a>
</div>
</body>
12.1.2.2 padding 不会撑开盒子大小的情况
如果盒子本身没有指定 width / height ,则此时padding不会撑开盒子的大小
代码案例
<style>
h1 {
/* width: 100%; */
height: 200px;
background-color: pink;
padding: 30px;
}
div {
width: 300px;
height: 100px;
background-color: purple;
}
div p {
padding: 30px;
background-color: skyblue;
/* 当孩子和父亲的宽度一样的时候,孩子不需要在给高度和宽度,此时在给孩子padding值,也不会超过父亲的范围了 */
}
</style>
<body>
<h1></h1>
<div>
<p></p>
</div>
</body>
12.1.3 外边距(margin)
margin : 该属性用于设置外边距,即控制盒子与盒子之间的距离
属性 | 作用 |
---|---|
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
小贴士 : margin 的简写方式代表的意义 跟padding完全一致
12.1.3.1 外边距典型应用
外边距可以让块级盒子 水平剧中 ,但是必须满足两个条件
- 盒子必须指定宽度(width)
- 盒子左右的外边距都设置为auto
语法
.header{
width: 960px;
margin:0 auto;
}
常见的写法
- margin-left: auto;margin-right:auto;
- margin:auto;
- margin:0 auto;
注意 : 以上都是让块级元素水平剧中,行内块元素 或者 行内元素 水平剧中 给 父元素添加 text-align:center 即可
代码举例
<style>
.header {
width: 900px;
height: 200px;
background-color: pink;
margin: 100px auto; //让行内元素或者行内块元素水平居中
}
/* 行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可 */
</style>
<body>
<div class="header">
<span>里面的文字</span>
</div>
<div class="header">
<img src="down.jpg" alt="src 的图片路径">
</div>
</body>
12.1.3.2 嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距 同时 子元素也有 上外边距,此时父元素会塌陷较大的外边距值
解决方案
- 可以为父元素定义上边框
- 可以为父元素定义上内边距
- 可以为父元素添加 overflow: hidden
代码举例
<style>
.father {
width: 400px;
height: 400px;
background-color: purple;
margin-top: 50px;
/* border: 1px solid red; */
/* border: 1px solid transparent; */
/* padding: 1px; */
overflow: hidden;
}
.son {
width: 200px;
height: 200px;
background-color: pink;
margin-top: 100px;
}
</style>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
12.1.4 清除内外边距
网页元素很多都带有默认的内外边距,而且不同的浏览器默认的值也不一致。因此我们在布局前,首先要清除一下网页元素的内外边距
*{
padding: 0; /* 清除内边距 */
margin: 0; /* 清除外边距 */
}
注意 : 行内元素 为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
代码举例
<style>
/* 这句话也是我们css 的第一行代码 */
* {
margin: 0;
padding: 0;
}
span {
background-color: pink;
margin: 20px;
}
</style>
<body>
123
<ul>
<li>abcd</li>
</ul>
<span>行内元素尽量只设置左右的内外边距</span>
</body>
13. 圆角边框
border-radius : 用于设置元素的外边框圆角
语法
border-radius: length;
小贴士
- 参数值可以为数值或百分比的形式
- 如果一个正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%
- **如果是个矩形,设置为高度的一半就可以做
- 该属性是一个简写属性,可以跟四个值,分别代表 左上角 、右上角 、右下角 、左下角
- 分开写:border-top-left-radius 、border-top-right-radius 、border-bottom-right-radi us 、border-bottom-left-radius
代码举例
<style>
.yuanxing {
width: 200px;
height: 200px;
background-color: pink;
/* border-radius: 100px; */
/* 50% 就是宽度和高度的一半 等价于 100px */
border-radius: 50%;
}
.juxing {
width: 300px;
height: 100px;
background-color: pink;
/* 圆角矩形设置为高度的一半 */
border-radius: 50px;
}
.radius {
width: 200px;
height: 200px;
/* border-radius: 10px 20px 30px 40px; */
/* border-radius: 10px 40px; */
border-top-left-radius: 20px;
background-color: pink;
}
</style>
<body>
1. 圆形的做法:
<div class="yuanxing"></div>
2. 圆角矩形的做法:
<div class="juxing"></div>
3. 可以设置不同的圆角:
<div class="radius"></div>
</body>
14. 盒子阴影
box-shadow : 该属性为盒子添加阴影
语法
box-shadow: h-shadow v-shadow blur spread color inset;
值 | 描述 |
---|---|
h-shadow | 必须。水平阴影的位置,允许负值 |
v-shadow | 必须。垂直阴影的位置,允许负值 |
blur | 可选。模糊距离。 |
spread | 可选。阴影的尺寸 |
color | 可选。阴影颜色。请参阅 CSS 颜色值。 |
inset | 可选。将外部阴影(outset)改为内部阴影 |
注意
- 默认的是外部阴影(outset),但是不可以写这个单词,否则导致阴影无效
- 盒子阴影不占用空间,不会影响其他盒子的排列
代码举例
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
margin: 100px auto;
/* box-shadow: 10px 10px; */
}
/* 原先盒子没有影子,当我们鼠标经过盒子就添加阴影效果 */
div:hover {
box-shadow: 10px 10px 10px -4px rgba(0, 0, 0, .3);
}
</style>
<body>
<div></div>
</body>
15. 文字阴影
text-shadow : 该属性为文字添加阴影
语法
text-shadow: h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必须。水平阴影的位置,允许负值 |
v-shadow | 必选。垂直阴影的位置,允许负值。 |
blur | 可选。模糊的距离 |
color | 可选。阴影的颜色。参阅CSS颜色值 |
代码举例
<style>
div {
font-size: 50px;
color: orangered;
font-weight: 700;
text-shadow: 5px 5px 6px rgba(0, 0, 0, .3);
}
</style>
<body>
<div>
你是阴影,我是火影
</div>
</body>
16. CSS浮动
16.1 传统网页布局的三种方式
16.1.1 普通流(标准流/文档流)
所谓标准流: 就是标签按照规定好默认的方式排列
- 块级元素会独占一行,从上向下顺序排列。常用元素:div、hr、p、h1 ~ h6、ul、lo、dl、from、table
- 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em等
注意 : 实际开发中,一个页面基本都包含这三种布局方式
16.1.2 浮动
16.1.2.1 为什么需要浮动
有很多网页布局效果,标准流是没有办法完成的,因此就可以利用浮动完成布局。因为浮动可以改变元素标签的排列方式
浮动最典型的应用 :可以让多个块级元素一行内排列显示
*网页布局的第一准则 :*多个块级元素纵向排列 找 标准流,多个块级元素横向排列 找 浮动
16.1.2.2 什么是浮动
float 属性用于创建浮动框,将其移动到一边,直到左边缘 或 右边缘 触及包含块 或 另一个浮动框的边缘
语法
选择器 { float: 属性值; }
属性值 | 描述 |
---|---|
none | 元素不浮动(默认值) |
left | 元素向 左 浮动 |
right | 元素向 右 浮动 |
代码举例
<style>
.left,
.right {
float: left;
width: 200px;
height: 200px;
background-color: pink;
}
.right {
float: right;
}
</style>
<body>
<div class="left">左青龙</div>
<div class="right">右白虎</div>
</body>
16.1.2.3 浮动的特性(重点)
-
浮动元素会脱离标准流(脱标) 特点:不在保留原先的位置
<style> /* 设置了浮动(float)的元素会: 1. 脱离标准普通流的控制(浮)移动到指定位置(动)。 2.浮动的盒子不在保留原先的位置 */ .box1 { float: left; width: 200px; height: 200px; background-color: pink; } .box2 { width: 300px; height: 300px; background-color: rgb(0, 153, 255); } </style> <body> <div class="box1">浮动的盒子</div> <div class="box2">标准流的盒子</div> </body>
-
浮动的元素会一行内显示 并且 元素顶部对齐
<style> div { float: left; width: 200px; height: 200px; background-color: pink; } .two { background-color: purple; height: 249px; } .four { background-color: skyblue; } </style> <body> <div>1</div> <div class="two">2</div> <div>3</div> <div class="four">4</div> </body>
注意 : 浮动的元素是互相贴靠的在一起的(不会有间隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐
-
浮动的元素会具有行内块元素的特性
<style> /* 任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性。 */ span, div { float: left; width: 200px; height: 100px; background-color: pink; } /* 如果行内元素有了浮动,则不需要转换块级\行内块元素就可以直接给高度和宽度 */ p { float: right; height: 200px; background-color: purple; } </style> <body> <span>1</span> <span>2</span> <div>div</div> <p>ppppppp</p> </body>
小贴士
-
任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后 具有行内块元素相似的特性
-
如果块级盒子没有设置宽度,默认宽度父级一样宽,但是添加浮动之后,它的大小根据内容来决定(如上面的 p标签)
-
浮动的盒子中间是没有缝隙的,紧挨着一起排列
-
行内元素同理
案例 1 小米官网
<style> * { margin: 0; padding: 0; } li { list-style: none; } .box { width: 1226px; height: 285px; background-color: pink; margin: 0 auto; } .box li { width: 296px; height: 285px; background-color: purple; float: left; margin-right: 14px; } /* 这里必须写 .box .last 要注意权重的问题 20 */ .box .last { margin-right: 0; } </style> <body> <ul class="box"> <li>1</li> <li>2</li> <li>3</li> <li class="last">4</li> </ul> </body>
案例2 小米官网
<style> .box { width: 1226px; height: 615px; background-color: pink; margin: 0 auto; } .left { float: left; width: 234px; height: 615px; background-color: purple; } .right { float: left; width: 992px; height: 615px; background-color: skyblue; } .right>div { float: left; width: 234px; height: 300px; background-color: pink; margin-left: 14px; margin-bottom: 14px; } </style> <body> <div class="box"> <div class="left">左青龙</div> <div class="right"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> <div>7</div> <div>8</div> </div> </div> </body>
案例3 常见网页布局
<style> /* 清除内外边距 */ * { margin: 0; padding: 0; } /* 清除小 li 的 小圆点 样式 */ li { list-style: none; } .top { height: 50px; background-color: gray; } .banner { width: 980px; height: 150px; background-color: gray; margin: 10px auto; } .box { width: 980px; margin: 0 auto; height: 300px; background-color: pink; } .box li { float: left; width: 237px; height: 300px; background-color: gray; margin-right: 10px; } .box .last { margin-right: 0; } /* 只要是通栏的盒子(和浏览器一样宽) 不需要指定宽度 */ .footer { height: 200px; background-color: gray; margin-top: 10px; } </style> <body> <div class="top">top</div> <div class="banner">banner</div> <div class="box"> <ul> <li>1</li> <li>2</li> <li>3</li> <li class="last">4</li> </ul> </div> <div class="footer">footer</div> </body>
-
16.1.2.4 浮动布局注意点
1. 浮动和标准流的父盒子搭配使用
- 先用标准流的父元素排列上下位置,之后 内部子元素 采取浮动排列左右位置
2. 一个元素浮动了,理论上 其余的兄弟元素也要浮动
- 一个盒子里面有多个盒子,如果其中一个盒子浮动了,那么其他的兄弟也应该浮动,以防引起问题
- 浮动的盒子只会影响 浮动盒子后面的 标准流,不会影响 前面的标准流
16.1.2.5 为什么需要清除浮动
问题 : 由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子的高度变为0,此时就会影响下面的标准流盒子
原因 : 由于浮动元素不在占有原文档流的位置,所以它会对后面的元素排版产生影响
16.1.2.6 清除浮动
语法
选择器{clear:属性值;}
属性值 | 描述 |
---|---|
left | 不允许左侧有浮动(清除左侧浮动的影响) |
right | 不允许右侧有浮动(清除右侧浮动的影响) |
both(常用) | 同时清除左右两侧的浮动 |
清除浮动的策略是:闭合浮动
清除浮动的本质 : 清除 浮动元素 脱离 标准流 造成的影响
清除浮动的方法
-
额外标签法 也称为隔墙法 W3C推荐的做法
额外标签法: 它的做法是在浮动元素末尾添加一个空的标签
代码案例
<style> .box { width: 800px; border: 1px solid blue; margin: 0 auto; } .damao { float: left; width: 300px; height: 200px; background-color: purple; } .ermao { float: left; width: 200px; height: 200px; background-color: pink; } .footer { height: 200px; background-color: black; } .clear { clear: both; } </style> <body> <div class="box"> <div class="damao">大毛</div> <div class="ermao">二毛</div> <div class="ermao">二毛</div> <div class="ermao">二毛</div> <div class="ermao">二毛</div> <!-- <div class="clear"></div> --> <!-- 这个新增的盒子要求必须是块级元素不能是行内元素 --> <span class="clear"></span> </div> <div class="footer"></div> </body>
优点 : 通俗易懂,书写方便
缺点 : 添加许多无意义的标签,结构化比较差
注意 : 要求这个新的空标签必须是块级元素
-
父级添加 overflow 属性
可以给 父级 添加 overflow属性,将其属性值设置为 hidden 、auto 、或 scroll
子不教,父之过,注意是给父元素添加代码
代码案例
<style> .box { /* 清除浮动 */ overflow: hidden; width: 800px; border: 1px solid blue; margin: 0 auto; } .damao { float: left; width: 300px; height: 200px; background-color: purple; } .ermao { float: left; width: 200px; height: 200px; background-color: pink; } .footer { height: 200px; background-color: black; } </style> <body> <div class="box"> <div class="damao">大毛</div> <div class="ermao">二毛</div> </div> <div class="footer"></div> </body>
优点 : 代码简洁
缺点 : 无法显示溢出的部分
-
父级添加 after 伪元素
:after 方式是 额外标签法 的 升级版。
.clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6、7 专有 */ *zoom: 1; }
代码案例
<style> .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6、7 专有 */ *zoom: 1; } .box { width: 800px; border: 1px solid blue; margin: 0 auto; } .damao { float: left; width: 300px; height: 200px; background-color: purple; } .ermao { float: left; width: 200px; height: 200px; background-color: pink; } .footer { height: 200px; background-color: black; } </style> <body> <div class="box clearfix"> <div class="damao">大毛</div> <div class="ermao">二毛</div> </div> <div class="footer"></div> </body>
优点 : 没有添加标签,结构简单
缺点 : 照顾低版本浏览器
-
父级添加 双伪元素
也是给父元素添加
.clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; }
代码案例
<style> .clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; } .box { width: 800px; border: 1px solid blue; margin: 0 auto; } .damao { float: left; width: 300px; height: 200px; background-color: purple; } .ermao { float: left; width: 200px; height: 200px; background-color: pink; } .footer { height: 200px; background-color: black; } </style> <body> <div class="box clearfix"> <div class="damao">大毛</div> <div class="ermao">二毛</div> </div> <div class="footer"></div> </body>
优点 : 代码简洁
缺点 : 照顾低版本浏览器
16.1.3 定位
16.1.3.1 为什么需要定位
定位可以让盒子自由的在某个盒子内移动位置或者固定屏幕中的某个位置,并且可以压住其他盒子
16.1.3.2 定位的组成
定位 : 将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子
定位 = 定位模式 + 边偏移
1. 定位模式
定位模式决定元素的定位方式,它通过CSS的position属性来设置,其值可以分为四个:
值 | 语义 |
---|---|
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
2. 边偏移
边偏移就是定位的盒子移动到最终位置。有 top 、bottom 、left 、right 4个属性
边偏移 | 示例 | 描述 |
---|---|---|
top | top:80px | 顶端偏移量,定义元素相对于其父元素上边线的距离 |
bottom | bottom: 80px | 底部偏移量,定义元素相对于其父元素下边线的距离 |
left | left: 80px | 左侧偏移量,定义元素相对于其父元素左边线的距离 |
right | right: 80px | 右侧偏移量,定义元素相对于其父元素右边线的距离 |
16.1.3.2.1 静态定位 static(了解)
静态定位 是元素的默认定位方式 ,无定位的意思
语法
选择器{ position: static; }
- 静态定位按照标准流的特性摆放位置,它没有边偏移
- 静态定位在布局时很少用到
16.1.3.2.2 相对定位 relative(重要)
相对定位 是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)
语法
选择器{ position: relative; }
相对定位的特点 :(务必记住)
- 它是相对于自己原来的位置来移动的(移动位置的时候 参照点 是 自己原来的位置)
- 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保留原来的位置)
代码案例
<style>
.box1 {
position: relative;
top: 100px;
left: 100px;
width: 200px;
height: 200px;
background-color: pink;
}
.box2 {
width: 200px;
height: 200px;
background-color: deeppink;
}
</style>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
因此,相对定位并没有脱标,它最典型的应用是给绝对定位当爹的…
16.1.3.2.3 绝对定位 absolute(重要)
-
如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(document文档)
代码案例
<style> .father { width: 500px; height: 500px; background-color: skyblue; } .son { position: absolute; /* top: 10px; left: 10px; */ /* top: 100px; right: 200px; */ left: 0; bottom: 0; width: 200px; height: 200px; background-color: pink; } </style> <body> <div class="father"> <div class="son"></div> </div> </body>
-
如果祖先元素有定位(相对,绝对,固定定位),则以最近一级的 有定位的 祖先元素为参考点移动位置
代码案例
<style> .yeye { position: relative; width: 800px; height: 800px; background-color: hotpink; padding: 50px; } .father { width: 500px; height: 500px; background-color: skyblue; } .son { position: absolute; left: 30px; bottom: 10px; width: 200px; height: 200px; background-color: pink; } </style> <body> <div class="yeye"> <div class="father"> <div class="son"></div> </div> </div> </body>
-
绝对定位不再占有原先的位置(脱标)
16.1.3.2.4 固定定位 fixed(重要)
固定定位 : 是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时 元素的位置不会改变
语法
选择器{ position: fixed; }
固定定位的特点 :(务必记住)
-
以浏览器的可视窗口为参照点移动元素
- 跟父元素没有任何关系
- 不随滚动条滚动
-
固定定位不在占有原先的位置
固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。
代码案例
<style>
.dj {
position: fixed;
top: 100px;
left: 40px;
}
</style>
<body>
<div class="dj">
<img src="images/pvp.png" alt="">
</div>
<p>请尽情吩咐妲己,主人</p>
<p>请尽情吩咐妲己,主人</p>
<p>请尽情吩咐妲己,主人</p>
...省略30行...
<p>请尽情吩咐妲己,主人</p>
<p>请尽情吩咐妲己,主人</p>
</body>
固定定位小技巧 :固定在版心右侧位置
小算法
- 让固定定位的盒子 left:50%,走到浏览器可视区(也可以看做版心)的一半位置
- 让固定定位的盒子 margin-left:版心宽度的一半距离。多走 版心宽度的一半位置
这样就可以让固定定位的盒子贴着版心右侧对齐了
代码案例
<style>
.w {
width: 800px;
height: 1400px;
background-color: pink;
margin: 0 auto;
}
.fixed {
position: fixed;
/* 1. 走浏览器宽度的一半 */
left: 50%;
/* 2. 利用margin 走版心盒子宽度的一半距离 */
margin-left: 405px;
width: 50px;
height: 150px;
background-color: skyblue;
}
</style>
<body>
<div class="fixed">固定盒子</div>
<div class="w">版心盒子 800像素</div>
</body>
16.1.3.3 子绝父相的由来
这句话的意思是:子级是绝对定位的话,父级要用相对定位
- 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
- 父盒子需要加定位 限制子盒子 在 父盒子内显示
- 父盒子布局时,需要占有位置,因此父亲只能是相对定位
这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级
总结 : 因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位
16.1.3.4 粘性定位 sticky(了解)
粘性定位 可以被认为是 相对定位 和 固定定位 的混合。
语法
选择器 {position: sticky; top: 10px; }
粘性定位的特点
- 以浏览器的可视窗口为参照点移动元素(固定定位特点)
- 粘性定位占有原先的位置(相对定位的特点)
- 必须添加 top、left、right、bottom其中一个才有效
跟页面滚动搭配使用,兼容性不好,IE不支持。
代码案例
<style>
body {
height: 3000px;
}
.nav {
/* 粘性定位 */
position: sticky;
top: 0;
width: 800px;
height: 50px;
background-color: pink;
margin: 100px auto;
}
</style>
<body>
<div class="nav">我是导航栏</div>
</body>
16.1.3.5 定位总结
定位模式 | 是否脱标 | 移动位置 | 是否常用 |
---|---|---|---|
static 静态定位 | 否 | 不能使用边偏移 | 很少 |
relative 相对定位 | 否(占有位置) | 相对于自身位置移动 | 常用 |
absolute 绝对定位 | 是(不占有位置) | 带有定位的父级 | 常用 |
fixed 固定定位 | 是(不占有位置) | 浏览器可视区 | 常用 |
sticky 粘性定位 | 否(占有位置) | 浏览器可视区 | 当前阶段少 |
17. CSS属性 书写顺序
建议遵循以下顺序
- 布局定位 : display / position / float / clear / visibility / overflow (建议display第一个写)
- 自身属性 : width / height / margin / padding / border / background
- 文本属性 : color / font / text-decoration / text-align / vertical-align / white-space / break-word
- 其他属性 (CSS3): content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …
18. 技巧篇
18.1 导航栏注意点
实际开发中,我们不会直接用链接 a 而是用 li 包含链接(li + a)的做法
19. Flex
19.1 概念
- 开启flex布局的元素叫 flex container
- flex container 里面的直接子元素叫flex item
19.2 特点
当flex container中的子元素变成了flex item时,有 以下特点
- flex item 的布局将受flex container属性的设置来进行控制和布局
- flex item 不再严格区分块级元素和行内级元素
- flex item 默认情况下是包含内容的,但是可以设置宽度和高度
**设置display属性为flex 或者 inline-flex可以成为 flex container **
- flex:flex container以block-level形式存在
- inline-flex:flex container以inline-level形式存在
19.3 属性
应用在flex container 上的 CSS属性
- flex-flow
- flex-direction
- flex-wrap
- justify-content
- align-items
- align-conteng
应用在flex items 上的 CSS属性
- flex-grow
- flex-basis
- flex-shrink
- order
- align-self
- flex
flex container 的属性
flex-direction
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
flex-direction: column;
}
.item{
width: 120px;
height: 120px;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
itemRandomColor.js文件
function getRandomColor(){
return `rgb(${Math.random()*255}, ${Math.random()*255}, ${Math.random()*255})`
}
const itemEls = document.querySelectorAll(".item")
for (const item of itemEls){
item.style.backgroundColor = getRandomColor()
}
flex-wrap
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
flex-wrap: wrap;
}
.item{
width: 120px;
height: 120px;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5<div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
flex-flow
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
flex-flow: wrap reverse;
}
.item{
width: 120px;
height: 120px;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5<div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
justify-content
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
justify-content: space-between;
}
.item{
width: 100px;
height: 100px;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
align-items
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
align-items: center;
}
.item{
width: 100px;
height: 100px;
}
.item1{
height: 50px;
}
.item2{
height: 120px;
}
.item3{
height: 90px;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
align-content
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
flex-wrap: wrap;
align-content: center;
}
.item{
width: 100px;
height: 100px;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
<div class="item item6">6</div>
<div class="item item7">7</div>
<div class="item item8">8</div>
<div class="item item9">9</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
flex item 的属性
order
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
}
.item{
width: 120px;
height: 120px;
}
.item1{
order: 7;
}
.item2{
order: 4;
}
.item3{
order: 9;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
align-self
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
align-items: center;
justify-content: center;
}
.item{
width: 120px;
height: 120px;
}
.item2{
align-self: start;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
flex-grow
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
}
.item{
width: 120px;
height: 120px;
flex-grow: 1;
}
.item2{
flex-grow: 2;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
flex-shrink
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
}
.item{
width: 120px;
height: 120px;
flex-shrink: 0;
}
.item2{
flex-shrink: 1;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
flex-basis
<style>
.container{
width: 500px;
height: 500px;
background-color: #ccc;
display: flex;
}
.item{
/* width: 120px; */
flex-basis: 120px;
height: 120px;
}
</style>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">我是abcdefghigklmnopqrstuvwxyz</div>
<div class="item item3">3</div>
</div>
<script src="../布局_Flex/js/itemRandomColor.js"></script>
</body>
flex
(…持续更新中)