HTML5+CSS3学习与实践

文章目录


学习资料

【尚硅谷前端html+css零基础教程,2023最新前端开发html5+css3视频-哔哩哔哩】

HTML4

开发者文档

w3c官网:www.w3c.org
W3School:www.w3cschool.cn
MDN:developer.mozilla.org —— 平常用的最多

HTML标准结构

文档声明

  1. 作用:告诉浏览器当前网页的版本。

  2. 写法:
    旧写法:要依网页所用的HTML版本而定,写法有很多。

    具体有哪些写法请参考:W3C官网-文档声明 (了解即可,千万别背!)

    新写法:一切都变得简单了! W3C 推荐使用 HTML5的写法。

    <!DOCTYPE html><!DOCTYPE HTML><!doctype html>
    
  3. 注意:文档声明,必须在网页的第一行,且在 html 标签的外侧。

字符编码

  1. 平时编写代码时,统一采用 UTF-8 编码(最稳妥)。
  2. 为了让浏览器在渲染 html 文件时,不犯错误,可以通过 meta 标签配合 charset 属性指定字符编码。
<head>
	<meta charset="UTF-8"/>
</head>

设置语言

  1. 主要作用:
    (1)让浏览器显示对应的翻译提示。
    (2)有利于搜索引擎优化
  2. 具体写法:
<html lang="zh-CN">

标签

排版标签

标签名标签含义单 / 双标签
h1 - h6标题
p段落
div没有任何含义,用于整体布局
  1. h1最好写一个,h2 - h6能适当多写 。
  2. h1 - h6不能互相嵌套,例如:h1标签中最好不要写h2标签了。
  3. p标签很特殊!它里面不能有:h1 - h6pdiv标签。

语义化标签

  • 概念:用特定的标签,去表达特定的含义。
  • 原则:标签的默认效果不重要(后期可以通过 CSS 随便控制效果),语义最重要!
  • 举例:对于 h1 标签,效果是文字很大 (不重要),语义是网页主要内容 (很重要)。
  • 优势:
    • 代码结构清晰可读性强。
    • 有利于 SEO (搜索引擎优化)。
    • 方便设备解析(如屏幕阅读器、盲人阅读器等)。

块级元素 与 行内元素

  1. 块级元素:独占一行(排版标签都是块级元素)。

  2. 行内元素:不独占一行(目前只学了:input,稍后会学习更多)。

  3. 使用规则:

    1. 块级元素行内元素(简单记:块级元素中几乎什么都能写)。
    2. 行内元素行内元素,但不能块级元素
    3. 一些特殊的规则:
      • h1~h6不能互相嵌套。
      • p中不要写块级元素。
        我们以后还会学到一些特殊的规则,但不会很多。
  4. 备注说明:

    marquee元素设计的初衷是:让文字有动画效果,但如今我们可以通过CSS来实现了,而且还可以实现的更加炫酷,所以marquee标签已经:过时了(废弃了),不推荐使用。我们只是在开篇的时候,用他做了一个引子而已,在后续的学习过程中,这些已经废弃的标签,我们直接跳过。

文本标签

  1. 用于包裹:词汇、短语等。
  2. 通常写在排版标签里面。
  3. 排版标签更宏观(大段的文字),文本标签更微观(词汇、短语)。
  4. 文本标签通常都是行内元素。

常用的:

标签名标签语义单 / 双 标签
em要着重阅读的内容
strong十分重要的内容(语气比em要强)
span没有语义,用于包裹短语的通用容器

生活中的例子:div是大包装袋,span是小包装袋。

图片标签

  • img标签,常用属性:
    • src:图片路径
    • alt:图片描述
    • width:图片宽度
    • height:图片高度

超链接

常用属性
  • a标签,常用属性:
    • href:要跳转的具体位置
    • target:跳转时如何打开页面,常用值:_self在本页签中打开,_blank在新页签中打开。

注意点:

  1. 代码中多个空格、多个回车,都会被浏览器解析成一个空格!
  2. 虽然a是行内元素,但a元素可以包裹除它自身外的任何元素!
  3. 若浏览器无法打开文件,则会引导用户下载。
  4. 若想强制触发下载,请使用download属性,属性值即为下载文件的名称。
跳转锚点

什么是锚点? —— 网页中的一个标记点。

具体使用方式:

第一步设置锚点:

<!-- 第一种方式:a标签配合name属性 -->
<a name="test1"></a>

<!-- 第二种方式:其他标签配合id属性 -->
<h2 id="test2">我是一个位置</h2>

注意点:

  1. 具有href属性的a标签是超链接,具有name属性的a标签是锚点
  2. nameid都是区分大小写的,且id最好别是数字开头。

第二步:跳转锚点

<!-- 跳转到test1锚点 -->
<a href="#test1">去test1锚点</a>

<!-- 跳到本页面顶部 -->
<a href="#">回到顶部</a>

<!-- 跳转到其他页面锚点 -->
<a href="demo.html#test1">去demo.html页面的test1锚点</a>
唤起指定应用

通过a标签,可以唤起设备应用程序。

<!-- 唤起设备拨号 -->
<a href="tel:10010">电话联系</a>

<!-- 唤起设备发送邮件 -->
<a href="mailto:10010@qq.com">邮件联系</a>

<!-- 唤起设备发送短信 -->
<a href="sms:10086">短信联系</a>

列表

有序列表

概念:有顺序或侧重顺序的列表

<ol>
	<li>把冰箱门打开</li>
	<li>把大象放进去</li>
	<li>把冰箱门关上</li>
</ol>
无序列表

概念:无顺序或不侧重顺序的列表

<ul>
	<li>成都</li>
	<li>上海</li>
</ul>
列表嵌套

概念:列表中某项内容,又包含一个列表(注意:嵌套时,请务必把结构写完整)。

<h2>我想去的几个城市</h2>
<ul>
	<li>成都</li>
	<li>
		<span>上海</span>
		<ul>
			<li>外滩</li>
			<li>杜莎夫人蜡像馆</li>
		</ul>
	</li>
</ul>

注意:li标签最好写在ulol中,不要单独使用。

自定义列表
  1. 概念:所谓自定义列表,就是一个包含术语名称以及术语描述的列表。
  2. 一个dl就是一个自定义列表,一个dt就是一个术语名称,一个dd就是一个术语描述(可以有多个)。
<h2>如何高效的学习</h2>
<dl>
	<dt>做好笔记</dt>
	<dd>笔记是我们以后复习的一个抓手</dd>
	<dt>多加练习</dt>
	<dd>别怕出错</dd>
</dl>

表格

基本结构

一个完整的表格由:表格标题表格头部表格主体表格脚注,四部分组成。
在这里插入图片描述

  • 表格涉及到的标签:
    • table:表格
    • caption:表格标题
    • thead:表格头部
    • tbody:表格主体
    • tfoot:表格脚注
    • tr:每一行
    • thtd:每一个单元格(备注:表格头部中用th,表格主体、表格脚注中用:td

具体编码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表格</title>
</head>
<body>
    <table border="1">
        <!-- 表格标题 -->
        <caption>学生信息</caption>
        <!-- 表格头部 -->
        <thead>
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>民族</th>
                <th>政治面貌</th>
            </tr>
        </thead>
        <!-- 表格主体 -->
        <tbody>
            <tr>
                <td>张三</td>
                <td></td>
                <td>18</td>
                <td>汉族</td>
                <td>团员</td>
            </tr>
            <tr>
                <td>李四</td>
                <td></td>
                <td>20</td>
                <td>满族</td>
                <td>群众</td>
            </tr>
            <tr>
                <td>王五</td>
                <td></td>
                <td>19</td>
                <td>回族</td>
                <td>党员</td>
            </tr>
            <tr>
                <td>赵六</td>
                <td></td>
                <td>21</td>
                <td>壮族</td>
                <td>团员</td>
            </tr>
        </tbody>
        <!-- 表格脚注 -->
        <tfoot>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>共计:4人</td>
            </tr>
        </tfoot>
    </table>
</body>
</html>

在这里插入图片描述

常用属性
  • table:表格
    • width:设置表格宽度
    • height:设置表格最小高度,表格最终高度可能比设置的值大。
    • border:设置表格边框宽度。
    • cellspacing:设置单元格之间的间距。
  • thead:表格头部
    • height:设置表格头部高度。
    • align:设置单元格的水平对齐方式,可选值:left左对齐、center中间对齐、right右对齐
    • valign:设置单元格的垂直对齐方式,可选值:top顶部对齐、middle中间对齐、bottom底部对齐
  • tbody:表格主体:常用属性与thead相同
  • tr:行:常用属性与thead相同
  • tfoot:表格脚注:常用属性与thead相同
  • td:普通单元格
    • width:设置单元格的宽度,同列所有单元格全都受影响
    • heigth:设置单元格的高度,同行所有单元格全都受影响
    • align:设置单元格的水平对齐方式
    • valign:设置单元格的垂直对齐方式
    • rowspan:指定要跨的行数
    • colspan:指定要跨的列数
  • th:表头单元格:常用属性与td相同

注意点:

  1. <table>元素的border属性可以控制表格边框,但border值的大小,并不控制单元格边框的宽度,只能控制表格最外侧边框的宽度,这个问题如何解决?—— —— 后期靠CSS控制。
  2. 给某个thtd设置了宽度之后,他们所在的那一列的宽度就确定了。
  3. 给某个thtd设置了高度之后,他们所在的那一行的高度就确定了。

具体编码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表格_常用属性</title>
</head>
<body>
    <table border="1" width="500" height="300" cellspacing="0">
        <!-- 表格标题 -->
        <caption>学生信息</caption>
        <!-- 表格头部 -->
        <thead height="50" align="center" valign="middle">
            <tr>
                <th width="50" height="50" align="right" valign="bottom">姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>民族</th>
                <th>政治面貌</th>
            </tr>
        </thead>
        <!-- 表格主体 -->
        <tbody height="520" align="center" valign="middle">
            <tr  height="50" align="center" valign="middle">
                <td>张三</td>
                <td></td>
                <td>18</td>
                <td>汉族</td>
                <td>团员</td>
            </tr>
            <tr>
                <td>李四</td>
                <td></td>
                <td>20</td>
                <td>满族</td>
                <td>群众</td>
            </tr>
            <tr>
                <td>王五</td>
                <td></td>
                <td>19</td>
                <td>回族</td>
                <td>党员</td>
            </tr>
            <tr>
                <td align="right" valign="top">赵六</td>
                <td></td>
                <td>21</td>
                <td>壮族</td>
                <td>团员</td>
            </tr>
        </tbody>
        <!-- 表格脚注 -->
        <tfoot height="50" align="center" valign="middle">
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>共计:4人</td>
            </tr>
        </tfoot>
    </table>
</body>
</html>

在这里插入图片描述

跨行与跨列
  1. rowspann:指定要跨的行数
  2. colspan:指定要跨的列数
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width= , initial-scale=1.0">
    <title>表格_跨行与跨列</title>
</head>
<body>
    <table border="1" cellspacing="0">
        <caption>课程表</caption>
        <thead>
            <tr>
                <th>项目</th>
                <th colspan="5">上课</th>
                <th colspan="2">活动与休息</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>星期</td>
                <td>星期一</td>
                <td>星期二</td>
                <td>星期三</td>
                <td>星期四</td>
                <td>星期五</td>
                <td>星期六</td>
                <td>星期日</td>
            </tr>
            <tr>
                <td rowspan="4">上午</td>
                <td>3-2</td>
                <td>3-3</td>
                <td>3-4</td>
                <td>3-5</td>
                <td>3-6</td>
                <td>3-7</td>
                <td rowspan="4">休息</td>
            </tr>
            <tr>
                <td>4-2</td>
                <td>4-3</td>
                <td>4-4</td>
                <td>4-5</td>
                <td>4-6</td>
                <td>4-7</td>
            </tr>
            <tr>
                <td>5-2</td>
                <td>5-3</td>
                <td>5-4</td>
                <td>5-5</td>
                <td>5-6</td>
                <td>5-7</td>
            </tr>
            <tr>
                <td>6-2</td>
                <td>6-3</td>
                <td>6-4</td>
                <td>6-5</td>
                <td>6-6</td>
                <td>6-7</td>
            </tr>
            <tr>
                <td rowspan="2">下午</td>
                <td>7-2</td>
                <td>7-3</td>
                <td>7-4</td>
                <td>7-5</td>
                <td>7-6</td>
                <td>7-7</td>
                <td rowspan="2">休息</td>
            </tr>
            <tr>
                <td>8-2</td>
                <td>8-3</td>
                <td>8-4</td>
                <td>8-5</td>
                <td>8-6</td>
                <td>8-7</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

在这里插入图片描述

常用标签补充

br:换行
hr:分隔
pre:按原文显示(一般用于在页面中嵌入大段代码)

注意点:

  1. 不要用<br>来增加文本之间的行间隔,应使用后面即将学到的CSS margin属性。
  2. <hr>的语义是分隔,如果不想要语义,只是想画一条水平线,那么应当使用CSS完成。

表单

基本结构
  • form:表单
    • action:用于指定表单的提交地址
    • target:用于控制表单提交后,如何打开页面,常用值:_self:在本窗口打开、_blank:在新窗口打开
    • method:请求方式,可选值:getpost
提交按钮
<input type="submit" value="点我提交表单">
<button>点我提交表单</button>

注意:

  1. button标签type属性的默认值是submit
  2. button不要指定name属性。
  3. input标签编写的按钮,使用value属性指定按钮文字。
重置按钮
<input type="reset" value="点我重置">
<button type="reset">点我重置</button>

注意点:

  1. button不要指定name属性。
  2. input标签编写的按钮,使用value属性指定按钮文字。
禁用表单控件

给表单控件的标签设置disabled即可禁用表单控件。

inputtextareabuttonselectoption都可以设置disabled属性

label标签

label标签可与表单控件相关联,关联之后点击文字,与之对应的表单控件就会获取焦点。

两种与label关联方式如下:
1、让label标签的for属性的值等于表单控件的id
2、把表单控件套在label标签的里面。

fieldset 与 legend 的使用(了解即可)

fieldset可以为表单控件分组、legend标签是分组的标题

在这里插入图片描述
在这里插入图片描述

框架标签

  • iframe:框架(在网页中嵌入其他文件)
    • name:框架名字,可以与target属性配合。
    • width:框架的宽度。
    • height:框架的高度。
    • frameborder:是否显示边框,值:0或者1。

iframe标签的实际应用:

  1. 在网页中嵌入广告。
  2. 与超链接或表单的target配合,展示不同的内容。

HTML全局属性

  • id:给标签指定唯一标识,注意:id是不能重复的。
  • class:给标签指定类名,随后通过CSS就可以给标签设置样式。
  • style:给标签设置CSS样式。
  • dir:内容的方向,值:ltrrtl,注意不能在<head><html><meta><script><style><title>中使用。
  • title:给标签设置一个文字提示,一般超链接和图片用的比较多。
  • lang:给标签指定语言,注意不能在<head><html><meta><script><style><title>中使用。

meta 元信息

  1. 配置字符编码
    <meta charset="utf-8">
    
  2. 针对IE了浏览器的兼容性配置
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    
  3. 针对移动端的配置(移动端课程中会详细讲解)
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
  4. 配置网页关键字
    <meta name="keywords" content="8-12个英文逗号隔开的单词/词语">
    
  5. 配置网页描述信息
    <meta name="description" content="80字以内的一段话,与网站内容相关">
    
  6. 针对搜索引擎爬虫配置
    <meta name="robots" content="此处可选值见下表">
    

在这里插入图片描述

  1. 配置网页作者
    <meta name="author" content="tony">
    
  2. 配置网页生成工具
    <meta name="generator" content="Visual Studio Code">
    
  3. 配置定义网页版权信息
    <meta name="copyright" content="2023-2027@版权所有">
    
  4. 配置网页自动刷新(如下代码含义:10秒去百度)
    <meta http-equiv="refresh" content="10;url=http://www.baidu.com">
    

CSS3

CSS简介

在这里插入图片描述
CSS的全称为:层叠样式表(Cascading Style Sheets)。
CSS也是一种标记语言,用于给HTML结构设置样式,例如:文字大小、颜色、元素宽高等等。

简单理解:CSS可以美化HTML,让HTML更漂亮。
核心思想:HTML搭建结构,CSS添加样式,实现了:结构与样式的分离。

CSS的编写位置

行内样式

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

语法:

<h1 style="color:red;font-size:60px;">欢迎来到尚硅谷学习</h1>

注意点:

  1. style属性的值不能随便写,写要符合CSS语法规范,是名:值;的形式。
  2. 行内样式表,只能控制当前标签的样式,对其他标签无效。

存在的问题:

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

内部样式

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

语法:

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

注意点:

  1. <style>标签理论上可以放在HTML文档的任何地方,但一般都放在<head>标签中。
  2. 此种写法:样式可以复用、代码结构清晰。

存在的问题:

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

外部样式

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

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

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

2、在HTML文件中引入.css文件。

<link rel="stylesheet" href="./xxx.css">

注意点:

  1. <link>标签要写在<head>标签中。
  2. <link>标签属性说明:href引入的文档来自于哪里,rel(relation:关系)说明引入的文档于当前文档之间的关系。
  3. 外部样式的优势:样式可以复用、结构清晰、可触发浏览器的缓存机制,提高访问速度,实现了结构于样式的完全分离
  4. 实际开发中,几乎都使用外部样式,这是最推荐的使用方式!

样式表的优先级

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

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

语法规范

CSS语法由两部分构成:

选择器:找到要添加样式的元素。

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

备注1:最后一个声明后的分号理论上能省略,但最好还是写上。
备注2:选择器与声明块之间,属性名与属性值之间,均有一个空格,理论上能省略,但最好还是写上。

在这里插入图片描述
注释的写法:

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

代码风格

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

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

紧凑风格 —— —— 项目上线时推荐,可减少文件体积。

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

备注:

项目上线时,我们会通过工具将【展开风格】的代码,变成【紧凑风格】,这样可以减少文件体积,节约网络流量,同时也能让用户打开网页时速度更快。

选择器

基本选择器

通配选择器

作用:可以选中所有的HTML元素。

语法:

* {
	属性名: 属性值;
}

举例:

* {
	/* 选中所有元素 */
	color: orange;
	font-size: 40px;
}

备注:目前来看通配选择器貌似有点鸡肋,但后面清除样式时,会对我们有很大帮助,后面会详细讲。

元素选择器

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

语法:

标签名 {
	属性名: 属性值;
}

举例:

/* 选中所有h1元素 */
h1 {
	color: orange;
	font-size: 40px;
}

/* 选中所有p元素 */
p {
	color: blue;
	font-size: 60px;
}

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

类选择器

作用:根据元素的class值,来选中某些元素。

class翻译过来有:种类类别的含义,所以class值,又称:类名。

语法:

.类名 {
	属性名: 属性值;
}

举例:

/* 选中所有class值为speak的元素 */
.speak {
	color: red;
}
/* 选中所有class值为answer的元素 */
.answer {
	color: blue;
}

注意点:

  1. 元素的class属性不带.,但CSS的类选择器要带.
  2. class值,是我们自定义的,按照标准:不要使用纯数字、不要使用中文、尽量使用英文与数字的组合,若由多个单词组成,使用-做连接,例如:left-menu,且命名要有意义,做到“见名知意”。
  3. 一个元素不能写多个class属性,下面错误实例
    <!-- 该写法错误,元素的属性不能重复,后写的会失效 -->
    <h1 class="speak" class="big">你好啊</h1>
    
  4. 一个元素的class属性,能写多个值,要用空格隔开,例如:
    <!-- 该写法正确,class属性,能写多个值 -->
    <h1 class="speak big">你好啊</h1>
    
ID选择器

作用:根据元素的id属性值,来精准的选中某个元素。

语法:

#id值 {
	属性名: 属性值;
}

举例:

/* 选中id值为earthy的那个元素 */
#earthy {
	color: red;
	font-size: 60px;
}

注意:
id属性值:尽量由字母数字、**下划线(_)、短杠(_)组成,最好以字母开头、不要包含空格、区分大小写。
一个元素只能拥有一个id属性,多个元素的id属性值不能相同。
一个个元素可以同时拥有idclass属性。

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

复合选择器

交集选择器

作用:选中同时符合多个条件的元素。

交集有并且的含义(通俗理解:… 的意思),例如:年轻长得帅。

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

举例:

/* 选中:类名为beauty的p元素,为此种写法用的非常多!!! */
p.beauty {
	color: blue;
}
/* 选中:类名包含rich和beauty的元素 */
.rich.beauty{
	color: green;
}

注意:

  1. 有标签名,标签名必须写在前面。
  2. id选择器、理论上可以作为交集的条件,但实际应用中几乎不用 —— —— 因为没有意义。。
  3. 交集选择器不可能出现两个选择器,因为一个元素,不可能即是p元素又是span元素。
  4. 用的最多的交集选择器是:元素选择器配合类名选择器,例如:p.beauty
并集选择器

作用:选中多个选择器对应的元素,又称:分组选择器

所谓并集就是或者的含义(通俗理解:要么要么…的意思),例如:给我转10万块钱或者我报警。

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

多个选择器通过,连接,此处,的含义就是:

举例:

/* 选中id为peiqi,或类名为rich,或类名为beauty的元素 */
#peiqi,
.rich,
.beauty {
	font-size: 40px;
	background-color: skyblue;
	width: 200px;
}

注意:
1、并集选择器,我们一般竖着写。
2、任何形式的选择器,都可以作为并集选择器的一部分。
3、并集选择器,通常用于集体声明,可以缩小样式表体积。

HTML元素间的关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后代选择器

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

语法:选择器1 选择器2 选择器3 ...... 选择器n {}(先写祖先,在写后代)

选择器之间,用空格隔开,空格可以理解为:“xxx中的”,其实就是后代的意思。
选择器1234...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

子代选择器

作用:选中指定元素中,符合要求的元素(儿子元素)。(先写父,在写子)

子代选择器:子元素选择器、子选择器

语法:选择器1>选择器2>选择器3> ...... 选择器n {}

选择器之间,用>隔开,>可以理解为:“xxx的子代”,其实就是儿子的意思。
选择器1234 ...n,可以是我们之前学的任何一种选择器。

举例:

/* div中的子代a元素 */
div>a {
	color: red;
}
/* 类名为persons的元素中子代a元素 */
.persons>a{
	color: red;
}

注意:
1、子代选择器,最终选择的是子代,不是父级。
2、子、孙子、重孙子、重重孙子 … 统称后代!就是指儿子
在这里插入图片描述

兄弟选择器
相邻兄弟选择器

作用:选中指定元素后,符合条件的相邻兄弟元素。

所谓相邻,就是紧挨着他的下一个,简记:睡在我下铺的兄弟。

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

示例:

/* 选中div相邻的兄弟p元素 */
div+p {
	color: red;
}
通用兄弟选择器

作用:选中指定元素后,符合条件的所有兄弟元素。(简记:睡在我下铺的所有兄弟)

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

示例:

/* 选中div后的所有的兄弟p元素 */
div~p {
	color: red;
}

注意:两种兄弟选择器,选择的是下面的兄弟。

属性选择器

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

语法:
1、[属性名]选中具有某个属性的元素。
2、[属性名="值"]选中包含某个属性,且属性值等于指定值的元素。
3、[属性名^="值"]选中包含某个属性,且属性值以指定的值开头的元素。
4、[属性名$="值"]选中包含某个属性,且属性值以指定的值结尾的元素。
5、[属性名*="值"]选择包含某个属性,属性值包含指定值的元素。

伪类选择器

作用:选中特殊状态的元素。

如何理解“伪”?—— 虚假的,不是真的。
如何理解“伪类”?—— 像类(class),但不是类,是元素的一种特殊状态。

动态伪类
  1. :link超链接未被访问的状态。
  2. :visited超链接访问过的状态。
  3. :hover鼠标悬停在元素上的状态。
  4. :active元素激活的状态。

    什么是激活?—— —— 按下鼠标不松开。
    注意点:遵循LVHA的顺序,即:linkvisitedhoveractive

  5. :focus获取焦点的元素。

    表单类元素才能使用:focus伪类。
    当用户:点击元素,触摸元素,或通过键盘的“tab”键等方式,选择元素时,就是获取焦点。

结构伪类

常用

  1. :first-child所有兄弟元素中的第一个
  2. :last-child所有兄弟元素中的最后一个
  3. :nth-child(n)所有兄弟元素中的第n个
  4. :first-of-type所有同类型兄弟元素中的第一个
  5. :last-of-type所有同类型兄弟元素中的最后一个
  6. :nth-of-type(n)所有同类型兄弟元素中的第n个

了解即可

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

关于n的值:

  1. 0不写:什么都选不中 —— —— 几乎不用。
  2. n:选中所有子元素 —— —— 几乎不用。
  3. 1~正无穷的整数:选中对应序号的子元素。
  4. 2neven:选中序号为偶数的子元素。
  5. 2n+1odd:选中序号为奇数的子元素。
  6. -n+3:选中的是前3个。
否定伪类

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

UI伪类
  1. :checked被选中的复选框或单选按钮。
  2. :enable可用的表单元素(没有disabled属性)。
  3. :disabled不可用的表单元素(有disabled属性)。
目标伪类(了解)

:target选中锚点指向的元素。

语言伪类(了解)

:lang()根据指定的语言选择元素(本质是看lang属性的值)。

伪元素选择器

作用:选中元素中的一些特殊位置。

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

选择器优先级

通过不同的选择器,选中相同的元素,并且为相同的样式名设置不同的值时,就发生了样式的冲突。

到底应用哪个样式,此时就需要看优先级了。

简单描述:

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

CSS三大特性

层叠性

概念:如果发生了样式冲突,那就会根据一定的规则(选择器的优先级),进行样式的层叠(覆盖)。

什么是样式冲突?—— —— 元素的同一个样式名,被设置了不同的值,这就是冲突。

继承性

概念:元素会自动拥有其父元素,或其祖先元素上所设置的某些样式

规则:优先继承离得近的。

常见的可继承属性:

text-?? , font-?? , line-??color

备注:参考MDN官网,可查询属性是否可被继承。

优先级

简单聊:!important > 行内样式 > ID选择器 > 类选择器 > 元素选择器 > * > 继承的样式

详细聊:需要计算权重。

计算权重时需要注意:并集选择器的每一个部分是分开算的!

颜色的表示

表示方式一:颜色名

编写方式:直接使用颜色对应的英文单词,编写比较简单,比如:
红色:red
绿色:green
蓝色:blue
紫色:purple
橙色:orange
灰色:gray

颜色这种方式,表达的颜色比较单一,所以用的并不多。

表示方式二:rgb 或 rgba

编写方式:使用 这三种光的三原色进行组合。
r 表示 红色
g 表示 绿色
b 表示 蓝色
a 表示 透明度

小规律:

  1. 若三种颜色值相同,呈现的是灰色,值越大,灰色越浅。
  2. rgb(0,0,0)是黑色,rgb(255,255,255)是白色。
  3. 对于rgba来说,前三位的rgb形式要保持一致,要么都是0~255的数字,要么都是百分比

表示方式三:HEX 或 HEXA

HEX的原理于rgb一样,依然是通过:红、绿、蓝进行组合,只不过要用6个数字,分成3组来表达,格式为:#rrggbb

注意点:IE浏览器不支持HEXA,但支持HEX

表示方式四:HSL 或 HSLA

HSL是通过:色相、饱和度、亮度,来表示一个颜色的,格式为:hsl(色相,饱和度,亮度)

常用字体属性

字体大小

属性名:font-size

语法:

div {
	font-size: 40px;
}

注意点:

  1. Chrome浏览器支持的最小文字为12px,默认的文字大小为16px,并且0px会自动消失。
  2. 不同浏览器默认的字体大小可能不一致,所以最好给一个明确的值,不要用默认大小。
  3. 通常以给body设置font-size属性,这样body中的其他元素就都可以继承了。

字体族(设置使用的字体)

属性名:font-family

语法:

div {
	font-family: "STCaiyun","Microsoft YaHei",sans-serif
}

注意点:

  1. 使用字体的英文名兼容性会更好,具体的英文名可百度自行查询。
  2. 如果字体名包含空格,必须使用引号包裹起来。
  3. 可以设置多个字体,按照从左到右的顺序逐个查找,找到就用,没有找到就使用后面的,且通常在最后写上serif(衬线字体)或sans-serif(非衬线字体)。
  4. windows系统中,默认的字体就是微软雅黑。

字体风格(正常、斜体)

属性名:font-style

常用值:

  1. normal:正常(默认值)
  2. italic:斜体(使用字体自带的斜体效果)
  3. oblique:斜体(强制倾斜产生斜体效果)

实现斜体时,更推荐使用italic

语法:

div {
	font-style: italic;
}

字体粗细

属性名:font-weight

常用值:

  1. lighter:细
  2. normal:正常
  3. bold:粗
  4. bolder:很粗(多数字体不支持)

数值:

  1. 100~1000且无单位,数值越大,字体越粗(或一样粗,具体看字体设计时的精确程度)。
  2. 100~300等同于lighter400~500等同于normal600及以上等同于bold

语法:

div {
	font-weight: bold;
}

div {
	font-weight: 600;
}

字体复合写法

属性名:font可以把上述字体样式合并成一个属性。

编写规则:

  1. 字体大小字体族必须都写上。
  2. 字体族必须是最后一位字体大小必须是倒数第二位
  3. 各个属性间用空格隔开。

实际开发中更推荐复合写法,但这也不是绝对的,比如只想设置字体大小,那就直接用font-size属性。

常用文本属性

文本颜色

属性名:color

可选值:

  1. 颜色名
  2. rgbrgba
  3. HEXHEXA(十六进制)
  4. HSLHSLA

开发中常用的是:rgb/rgbaHEX/HEXA(十六进制)。

举例:

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

文本间距

字母间距:letter-spacing

单词间距:word-spacing(通过空格识别词)

属性值为像素(px),正值让间距增大,负值让间距缩小。

文本修饰(无装饰线、下划线、上划线、删除线、虚线、波浪线)

属性名:text-decoration

可选值:

  1. none:无装饰线(常用)
  2. underline:下划线(常用)
  3. overline:上划线
  4. line-through:删除线

可搭配如下值使用:

  1. dotted:虚线
  2. wavy:波浪线
  3. 也可以指定颜色

举例:

a {
	text-decoration: none;
}

文本缩进

属性名:text-indent

属性值:css中的长度单位,例如:px

举例:

div {
	text-indent: 40px;
}

后面我们会学习css中一些新的长度单位,目前我们只知道像素(px)。

文本对齐_水平

属性名:text-align

常用值:

  1. left:左对齐(默认值)
  2. right:右对齐
  3. center:居中对齐

举例:

div {
	text-align: center;
}

行高

属性名:line-height

可选值:

  1. normal:由浏览器根据文字大小决定一个默认值。
  2. 像素(px)。
  3. 数字:参考自身font-size的倍数(很常用)。
  4. 百分比:参考自身font-size的百分比。

备注:由于字体设计原因,文字在一行中,并不是绝对垂直居中,若一行都是文字,不会太影响观感。

举例:

div {
	line-height: 60px;
	line-height: 1.5;
	line-height: 150%;
}

注意事项:

  1. line-height过小会怎样?—— —— 文字产生重叠,且最小值是0,不能为负数。
  2. line-height是可以继承的,且为了能更好的呈现文字,最好写数值。
  3. line-heightheight是什么关系?
    设置了height,那么高度就是height的值。
    不设置height的时候,会根据line-height计算高度。

应用场景:

  1. 对于多行文字,控制行与行之间的距离。
  2. 对于单行文字:让height等于line-height,可以实现文字垂直居中。

备注:由于字体设计原因,靠上述办法实现的居中,并不是绝对的垂直居中,但如果一行中都是文字,不会影响观感。

文本对齐_垂直

依靠 height 与 line-height

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

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

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

底部:对于单行文字,目前一个临时的方式:让line - height = (height × 2) - font-size - x

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

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

vertical-align 同一行元素之间垂直对齐方式

属性名:vertical-align

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

常用值:

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

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

列表相关属性

设置列表符号

属性名:list-style-type

作用:设置列表符号

常用值:

  1. none:不显示前面的标识(很常用!
  2. square:实心方块
  3. disc:圆形
  4. decimal:数字
  5. lower-roman:小写罗马字
  6. upper-roman:大写罗马字
  7. lower-alpha:小写字母
  8. upper-alpha:大写字母

设置列表符号的位置

属性名:list-style-position

作用:设置列表符号的位置

常用值:

  1. inside:在 li 的里面
  2. outside:在 li 的外边

自定义列表符号

属性名:list-style-image

作用:自定义列表符号

属性值:url(图片地址)

复合属性

属性名:list-style

作用:复合属性

属性值:没有数量、顺序的要求

注意

列表相关的属性,可以作用在 ulolli 元素上。

表格相关属性

边框相关属性

边框宽度

属性名:border-width

作用:边框宽度

属性值:CSS中可用的长度值

边框颜色

属性名:border-color

作用:边框颜色

属性值:CSS中可用的颜色值

边框风格

属性名:border-style

作用:边框风格

属性值:

  1. none:默认值
  2. solid:实线
  3. dashed:虚线
  4. dotted:点线
  5. double:双实线
边框复合属性

属性名:border

作用:边框复合属性

属性值:没有数量、顺序的要求

注意
  1. 以上4个边框相关的属性,其他元素也可以用,这是我们第一次遇见它们。
  2. 在后面的盒子模型中,我们会详细讲解边框相关的知识。

表格独有属性

设置列宽度

属性名:table-layout

作用:设置列宽度

属性值:

  1. auto:自动,列宽根据内容计算(默认值)。
  2. fixed:固定列宽,平均分。
单元格间距

属性名:border-spacing

作用:单元格间距

属性值:

  1. CSS中可用的长度值。
  2. 生效的前提:单元格边框不能合并。
合并单元格边框

属性名:border-collapse

作用:合并单元格边框

属性值:

  1. collapse:合并
  2. separate:不合并
隐藏没有内容的单元格

属性名:empty-cells

作用:隐藏没有内容的单元格

属性值:

  1. show:显示,默认
  2. hide:隐藏
    生效前提,单元格不能合并。
设置表格标题位置

属性名:caption-side

作用:设置表格标题位置

属性值:

  1. top:上面(默认值)
  2. bottom:在表格下面
注意

以上5个属性,只有表格才能使用,即<table>标签。

背景属性

设置背景颜色

属性值:background-color

作用:设置背景颜色

属性值:符合CSS中颜色规范的值,默认背景颜色是transparent透明色。

设置背景图片

属性值:background-image

作用:设置背景图片

属性值:url(图片的地址)

设置背景重复方式

属性值:background-repeat

作用:设置背景重复方式

属性值:

  1. repeat:重复,铺满整个元素,默认值。
  2. repeat-x:只在水平方向重复。
  3. repeat-y:只在垂直方向重复。
  4. no-repeat:不重复。

设置背景图位置

属性值:background-position

作用:设置背景图位置

属性值:

通过关键字设置位置
写两个值,用空格隔开
水平:leftcenterright
垂直:topcenterbottom
如果只写一个值,另一个方向的值取 center

通过长度指定坐标位置
以元素左上角,为坐标原点,设置图片左上角的位置。
两个值,分别是x坐标和y坐标。
只写一个值,会被当做x坐标,y坐标取center

复合属性

属性值:background

作用:复合属性

属性值:没有数量和顺序要求

鼠标属性

属性值:cursor

作用:设置鼠标光标的样式

属性值:

  1. pointer:小手
  2. move:移动图标
  3. text:文字选择器
  4. crosshair:十字架
  5. wait:等待
  6. help:帮助

扩展:自定义鼠标图标

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

盒子模型

长度单位

  1. px:像素。
  2. em:相对元素font-size的倍数。
  3. rem:相对根字体大小,html标签就是根。
  4. %:相对父元素计算。

注意:CSS中设置长度,必须加单位,否则样式无效!

元素的显示模式

块元素(block)

又称:块级元素

特点:

  1. 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的。
  2. 默认宽度:撑满父元素
  3. 默认高度:由内容撑开。
  4. 可以通过CSS设置宽高。
  1. 主体结构标签:<thml><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. 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
  2. 默认宽度:由内容撑开。
  3. 默认高度:由内容撑开。
  4. 无法通过CSS设置宽高。
  1. 文本标签:<br><em><strong><sup><sub><del><ins>
  2. <a><label>
行内块元素(inline-block)

又称:内联块元素

特点:

  1. 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
  2. 默认宽度:由内容撑开。
  3. 默认高度:由内容撑开。
  4. 可以通过CSS设置宽高。
  1. 图片:<img>
  2. 单元格:<td><th>
  3. 表单控件:<input><textarea><select><button>
  4. 框架标签:<iframe>
注意

元素早期只分为:行内元素、块级元素,区分条件也只有一条:“是独占一行”,如果按照这种分类方式,行内块元素应该算作行内元素。

修改元素显示模式

通过CSS中的display属性可以修改元素的默认显示模式,常用值如下:

  1. none:元素会被隐藏
  2. block:元素将作为块级元素显示。
  3. inline:元素将作为内联元素显示。
  4. inline-block:元素将作为行内块元素显示。

盒子模型的组成

在这里插入图片描述

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

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

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

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

盒子内容区(content)

属性名:width
功能:设置内容区域宽度
属性值:长度

属性名:max-width
功能:设置内容区域的最大宽度
属性值:长度

属性名:min-width
功能:设置内容区域的最小宽度
属性值:长度

属性名:height
功能:设置内容区域的高度
属性值:长度

属性名:max-height
功能:设置内容区域的最大高度
属性值:长度

属性名:min-height
功能:设置内容区域的最小高度
属性值:长度

注意:
max-widthmin-width一般不与width一起使用。
max-heightmin-height一般不与height一起使用。

关于默认宽度

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

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

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

盒子的内边距

属性名:padding-top
功能:上内边距
属性值:长度

属性名:padding-right
功能:右内边距
属性值:长度

属性名:padding-bottom
功能:下内边距
属性值:长度

属性名:padding-left
功能:左内边距
属性值:长度

属性名:padding
功能:复合属性
属性值:长度,可以设置 1~4 个值

padding复合属性的使用规则:

  1. padding: 10px; 四个方向内边距都是10px
  2. padding: 10px 20px;10px,左右20px。(上下、左右)
  3. padding: 10px 20px 30px;10px,左右20px,下30px。(上、左右、下)
  4. padding: 10px 20px 30px 40px10px,右20px,下30px,左40px。(上、右、下、左)

注意点:

  1. padding的值不能为负数。
  2. 行内元素的左右内边距是没问题的,上下内边距不能完美的设置。
  3. 块级元素、行内块元素,四个方向内边距都可以完美设置。

盒子的边框

属性名:border-style
功能:边框线风格、复合了四个方向的边框风格
属性值:solid:实线、dashed:虚线、dotted:点线、double:双实线 …

属性名:border-width
功能:边框线宽度、复合了四个方向的边框宽度
属性值:长度,默认3px

属性名:border-color
功能:复合属性
属性值:值没有顺序和数量要求。

属性名:border-leftborder-left-styleborder-left-widthborder-left-color
功能:分别设置各个方向的边框
属性值:同上

属性名:border-rightborder-right-styleborder-right-widthborder-right-color
功能:分别设置各个方向的边框
属性值:同上

属性名:border-topborder-top-styleborder-top-widthborder-top-color
功能:分别设置各个方向的边框
属性值:同上

属性名:border-bottomborder-bottom-styleborder-bottom-widthborder-bottom-color
功能:分别设置各个方向的边框
属性值:同上

边框相关属性共 20 个。
border-styleborder-widthborder-color 其实也是复合属性。

盒子的外边距

margin 语法

属性名:margin-left
功能:外边距
属性值:长度值

属性名:margin-right
功能:外边距
属性值:长度值

属性名:margin-top
功能:外边距
属性值:长度值

属性名:margin-bottom
功能:外边距
属性值:长度值

属性名:margin
功能:复合属性,可以写1~4个值,规律同padding(顺时针)
属性名:长度值

margin 注意事项
  1. 子元素的margin,是参考父元素的content计算的。(因为父亲的content中承装着子元素)。
  2. margin、左margin:影响自己的位置;下margin、右margin:影响后面兄弟元素的位置。
  3. 块级元素、行内块元素,均可以完美地设置四个方向的margin;但行内元素,左右margin可以完美设置,上下margin设置无效。
  4. margin的值也可以是auto,如果给一个块级元素设置左右margin都为auto,该块级元素会在父元素中水平居中。
  5. margin的值可以是负值。
margin 塌陷问题
什么是 margin 塌陷?

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

如何解决 margin 塌陷?

方案一:给父元素设置不为 0 的 padding

方案二:给父元素设置宽度不为 0 的 border

方案三:给父元素设置 css 样式 overflow:hidden

margin 合并问题
什么是 margin 合并?

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

如何解决 margin 合并?

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

处理内容溢出

属性名:overflow
功能:溢出内容的处理方式
属性值:
visible:显示,默认值
hidden:隐藏
scroll:显示滚动条,不论内容是否溢出
auto:自动显示滚动条,内容不溢出不显示

属性名:overflow-x
功能:水平方向溢出内容的处理方式
属性值:同overflow

属性名:overflow-y
功能:垂直方向溢出内容给的处理方式
属性值:同overflow

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

隐藏元素的两种方式

visibility 属性

visibility属性默认值是show,如果设置为hidden,元素会隐藏。

元素看不见了,还占有原来的位置(元素的大小依然保持)。

display 属性

设置display:none,就可以让元素隐藏。

彻底地隐藏,不但看不见,也不占用任何位置,没有大小宽高。

样式的继承

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

会继承的 css 属性
字体属性、文本属性(除了 vertical-align)、文字颜色 等。

不会继承的 css 属性
边框、背景、内边距、外边距、宽高、溢出方式 等。

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

默认样式

元素一般都写默认的样式,例如:
1、<a>元素:下划线、字体颜色、鼠标小手。
2、<h1> ~ <h6>元素:文字加粗、文字大小、上下外边距。
3、<p>元素:上下外边距。
4、<ul>ol元素:左内边距。
5、body元素:8px外边距(4个方向)。

优先级:元素的默认样式 > 继承的样式,所以如果要重置元素的默认样式,选择器一定要直接选择器到该元素。

布局小技巧

1、行内元素、行内块元素,可以被父元素当做文本处理。

即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐。
例如:text-alignline-heighttext-indent等。

2、如何让子元素,在父亲中水平居中

若子元素为块元素,给父元素加上:margin: 0 auto;
若子元素为行内元素、行内块元素,给父元素加上:text-align:center;

3、如何让子元素,在父亲中垂直居中

若子元素为块元素,给子元素加上:margin-top,值为:(父元素content - 子元素盒子总高)/ 2
若子元素为行内元素、行内块元素

  • 让父元素的height = line-height,每个子元素都加上:vertical-align:middle;
  • 补充:若想绝对垂直居中,父元素font-size设置为0

元素之间的空白问题

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

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

行内块的幽灵空白问题

产生原因:
行内块元素与文本的基线对齐,而文本的基线与文本最低端之间是有一定距离的。

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

浮动

浮动的简介

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

语法float: left;float: right;

元素浮动后的特点

  1. 脱离文档流。
  2. 不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开(尽可能小),而且可以设置宽高。
  3. 不会独占一行,可以与其他元素共用一行。
  4. 不会margin合并,也不会margin塌陷,能够完美的设置四个方向的marginpadding
  5. 不会像行内块一样被当做文本处理(没有行内块的空白问题)。

浮动后会有哪些影响

对兄弟元素的影响

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

对父元素的影响

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

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

解决方案:

方案一:给父元素指定高度。

方案二:给父元素也设置浮动,带来其他影响。

方案三:给父元素设置overflow:hidden

方案四:在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置clear:both

方案五:给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同。===>推荐使用

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

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

浮动样例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>浮动小练习</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .leftfix {
            float: left;
        }

        .rightfix {
            float: right;
        }

        .clearfix::after {
            content: '';
            display: block;
            clear: both;
        }

        .container {
            width: 960px;
            margin: 0 auto;
            text-align: center;
        }

        .log {
            width: 200px;
        }

        .banner1 {
            width: 540px;
            margin: 0 10px;
        }

        .banner2 {
            width: 200px;
        }

        .log,.banner1,.banner2 {
            height: 80px;
            line-height: 80px;
            background-color: #ccc;
        }

        .menu {
            height: 30px;
            background-color: #ccc;
            margin-top: 10px;
            line-height: 30px;
        }

        .item1,.item2 {
            width: 368px;
            height: 198px;
            line-height: 198px;
            border: 1px solid black;
            margin-right: 10px;
        }

        .content {
            margin-top: 10px;
        }

        .item3,.item4,.item5,.item6 {
            width: 178px;
            height: 198px;
            line-height: 198px;
            border: 1px solid black;
            margin-right: 10px;
        }

        .bottom {
            margin-top: 10px;
        }

        .item7,.item8,.item9 {
            width: 198px;
            height: 128px;
            line-height: 128px;
            border: 1px solid black;
        }

        .item8 {
            margin: 10px 0;
        }

        .footer {
            height: 60px;
            background-color: #ccc;
            margin-top: 10px;
            line-height: 60px;
        }
    </style>
</head>
<body>
    <div class="container">
        <!-- 头部 -->
        <div class="page-header clearfix">
            <div class="log leftfix">logo</div>
            <div class="banner1 leftfix">banner1</div>
            <div class="banner2 leftfix">banner2</div>
        </div>

        <!-- 菜单 -->
        <div class="menu">菜单</div>

        <!-- 内容区 -->
        <div class="content clearfix">
            <!-- 左侧 -->
            <div class="left leftfix">
                <!-- 上 -->
                <div class="top clearfix">
                    <div class="item1 leftfix">栏目一</div>
                    <div class="item2 leftfix">栏目二</div>
                </div>
                <!-- 下 -->
                <div class="bottom clearfix">
                    <div class="item3 leftfix">栏目三</div>
                    <div class="item4 leftfix">栏目四</div>
                    <div class="item5 leftfix">栏目五</div>
                    <div class="item6 leftfix">栏目六</div>
                </div>
            </div>
            <!-- 右侧 -->
            <div class="right rightfix">
                <div class="item7">栏目七</div>
                <div class="item8">栏目八</div>
                <div class="item9">栏目九</div>
            </div>
        </div>

        <!-- 页脚 -->
        <div class="footer">页脚</div>
    </div>
</body>
</html>

在这里插入图片描述

定位

相对定位

如何设置相对定位?
给元素设置position:relative即可实现相对定位。
可以使用leftrighttopbottom四个属性调整位置。

相对定位参考点在哪里?
相对自己原来的位置

相对定位的特点:

  1. 不会脱离文档流,元素位置的变化,只是视觉效果上的变化,不会对其他元素产生任何影响。
  2. 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的。
    • 默认规则是:
      • 定位的元素会盖在普通元素之上。
      • 都发生定位的两个元素,后写的元素会盖在先写的元素之上。
  3. left不能和right一起设置,topbottom不能一起设置。
  4. 相对定位的元素,也能继续浮动,但不推荐这样做。
  5. 相对行为的元素,也能通过margin调整位置,但不推荐这样做。

注意:绝大多数情况下,相对定位,会与绝对定位配合使用。

绝对定位

如何设置绝对定位
给元素设置position:absolute即可实现绝对定位。
可以使用leftrighttopbottom四个属性调整位置。

绝对定位的参考点在哪里?
参考他的包含块

什么是包含块?

  1. 对于没有脱离文档流的元素:包含块就是父元素。
  2. 对于脱离文档流的元素:包含块是第一个拥有定位属性的祖先元素(如果所有祖先都没定位,那包含块就是整个页面)。

绝对定位元素的特点:

  1. 脱离文档流,会对后面的兄弟元素、父元素有影响。
  2. left不能和right一起设置,topbottom不能一起设置。
  3. 绝对定位、浮动不能同时设置,如果同时设置,浮动失效,以定位为主。
  4. 绝对定位的元素,也能通过margin调整位置,但不推荐这样做。
  5. 无论是什么元素(行内、行内块、块级)设置为绝对定位之后,都变成了定位元素。

何为定位元素? —— —— 默认宽、高都被内容所撑开,且能自由设置宽高。

固定定位

如何设置为固定定位?
给元素设置position:fixed即可实现固定定位。
可以使用leftrighttopbottom四个属性调整位置。

固定定位的参考点在哪里?
参考他的视口

什么是视口?—— —— 对于PC浏览器来说,视口就是我们看网页的那扇“窗户”。

固定定位元素的特点

  1. 脱离文档流,会对后面的兄弟元素、父元素有影响。
  2. left不能和right一起设置,topbottom不能一起设置。
  3. 固定定位和浮动不能同时设置,如果同时设置,浮动失效,以固定定位为主。
  4. 固定定位的元素,也能通过margin调整位置,但不推荐这样做。
  5. 无论是什么元素(行内、行内块、块级)设置为固定定位之后,都变成了定位元素。

粘性定位

如何设置为粘性定位?
给元素设置position:sticky即可实现粘性定位。
可以使用leftrighttopbottom四个属性调整位置,不过最常用的是top值。

粘性定位的参考点在哪里?
离他最近的一个拥有“滚动机制”的祖先元素,即便这个祖先不是最近的真实可滚动祖先。

粘性定位元素的特点

  1. 不会脱离文档流,他是一种专门用于窗口滚动时新的定位方式。
  2. 最常用的值是top值。
  3. 粘性定位和浮动可以同时设置,但不推荐这样做。
  4. 粘性定位的元素,也能通过margin调整位置,但不推荐这样做。

粘性定位和相对定位的特点基本一致,不同的是:粘性定位可以在元素到达某个位置时将其固定。

定位层级

  1. 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的。
  2. 如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上。
  3. 可以通过 css 属性 z-index 调整元素的显示层级。
  4. z-index 的属性值是数字,没有单位,值越大显示层级越高。
  5. 只有定位的元素设置 z-index 才有效。
  6. 如果 z-index 值大的元素,依然没有覆盖掉 z-index 值小的元素,那么请检查包含块的层级。

定位的特殊应用

注意
  1. 发生固定定位、绝对定位后,元素都变成了定位元素,默认宽高被内容撑开,且依然可以设置宽高。
  2. 发生相对定位后,元素依然是之前的显示模式。
  3. 以下所说的特殊应用,只针对 绝对定位固定定位 的元素,不包括相对定位的元素。
让定位元素的宽充满包含块
  1. 块宽想与包含块一致,可以给定位元素同时设置 leftright0
  2. 高度想与包含块一致,topbottom 设置为 0
让定位元素在包含块中居中

方案一:

left:0;
right:0;
top:0;
bottom:0;
margin:auto;

方案二:

left:50%;
top:50%;
margin-left:负的宽度一半;
margin-top:负的高度一半;

注意:该定位元素必须设置宽高!!

布局

版心

  • PC 端网页中,一般都会有一个固定宽高且水平居中的盒子,来显示网页的主要内容,这是网页的版心
  • 版心的宽度一般是 960 ~ 1200像素之间。
  • 版心可以是一个,也可以是多个。
    在这里插入图片描述

常用类名

顶部导航条:topbar

页头:headerpage-header

导航:navnavigatornavbar

搜索框:searchsearch-box

横幅、广告、宣传图:banner

主要内容:contentmain

侧边栏:asidesidebar

页脚:footerpage-footer

重置默认样式

默认样式

很多元素都有默认样式,比如:

  1. p元素有默认的上下margin
  2. h1~h6标题也有上下margin,且字体加粗。
  3. body元素有默认的8px外边距。
  4. 超链接有默认的文字颜色和下划线。
  5. ul元素有默认的左pading
  6. … …

在早期,元素默认样式,能够让我们快速的绘制网页,但如今网页的设计越来越复杂,内容越来越多,而且很精细,这些默认样式会给我们绘制页面带来麻烦,而且这些默认样式,在不同的浏览器上呈现出来的效果也不一样,所以我们需要重置这些默认样式。

重置默认样式 - 方案一:使用全局选择器
* {
	margin: 0;
	padding: 0;
	......
}

此种方法,在简单案例中可以用一下,但实际开发中不会使用,因为*选择器的所有元素,而并不是所有的元素都有默认样式;而且我们重置时,有时候是需要做特定处理的,比如:想让a元素的文字是灰色,其他元素文字是蓝色。

重置默认样式 - 方案二:reset.css【推荐】

选择到具有默认样式的元素,清空其默认的样式。

经过reset后的网页,好似“一张白纸”,开发人员可根据设计稿,精细的去添加具体的样式。

重置默认样式 - 方案三:Normalize.css

Normalize.css是一种最新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式。

相对于reset.cssNormalize.css有如下优点:

  1. 保护了有价值的默认样式,而不是完全去掉它们。
  2. 为大部分HTML元素提供一般化的样式。
  3. 新增对HTML5元素的设置。
  4. 对并集选择器的使用比较谨慎,有效避免调试工具杂乱。

备注:Normalize.css的重置,和reset.css相比,更加的温和,开发时可根据实际情况进行选择。

HTML5

新增语义化标签

新增布局标签

标签名:header
语义:整个页面或部分区域的头部
单/双标签:双

标签名:footer
语义:整个页面或部分区域的底部
单/双标签:双

标签:nav
语义:导航
单/双标签:双

标签:article
语义:文章、帖子、杂志、新闻、博客、评论等
单/双标签:双

标签:section
语义:页面中的某段文字或文章中的某段文字(里面文字通常里面会包含标题)
单/双标签:双

标签:aside
语义:侧边栏
单/双标签:双

标签:main
语义:文档的主要内容(WHATWG没有语义,IE不支持),几乎不用
单/双标签:双

标签:hgroup
语义:包裹连续的标题,如文章主标题、副标题的组合(W3C将其删除)
单/双标签:双

关于articlesection

  1. artical里面可以有多个section
  2. section强调的是分段或分块,如果你想将一块内容分成几段的时候,可使用section元素。
  3. articlesection更强调独立性,一块内容如果比较独立、比较完整,应该使用article元素。

新增状态标签

meter 标签(电量、磁盘用量等…)

语义:定义已知范围内的标量测量。也被称为gauge(尺度),双标签,例如:电量、磁盘用量等。

常用属性如下:
属性:high
值:数值
描述:规定高值

属性:low
值:数值
描述:规定低值

属性:max
值:数值
描述:规定最大值

属性:min
值:数值
描述:规定最小值

属性:optimum
值:数值
描述:规定最优值

属性:value
值:数值
描述:规定当前值

<meter max="100" min="0" value="90" low="10" high="20" optimum="90"></meter>

在这里插入图片描述

progress标签(进度条)

语义:显示某个任务完成的进度的指示器,一般用于表示进度条,双标签,例如:工作完成进度等。

常用属性如下:
属性:max
值:数值
描述:规定目标值。

属性:value
值:数值
描述:规定当前值

<progress max="100" value="20"></progress>

在这里插入图片描述

示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>02_新增状态标签</title>
</head>
<body>
    <span>手机电量:</span>
    <meter max="100" min="0" value="90" low="10" high="20" optimum="90"></meter>
    <meter max="100" min="0" value="19" low="10" high="20" optimum="90"></meter>
    <meter max="100" min="0" value="9" low="10" high="20" optimum="90"></meter>

    <br>

    <span>当前进度:</span>
    <progress max="100" value="20"></progress>
</body>
</html>

在这里插入图片描述

新增列表标签

datalist标签(搜索关键词提示)

标签名:datalist
语义:用于搜索框的关键词提示
单/双标签:双

<form action="#">
    <input type="text" list="mydata">
    <button>搜索</button>
</form>
<datalist id="mydata">
    <option value="周杰伦">周杰伦</option>
    <option value="周冬雨">周冬雨</option>
    <option value="马冬梅">马冬梅</option>
    <option value="温兆伦">温兆伦</option>
</datalist>

在这里插入图片描述

details标签(展示问题和答案)

标签名:details
语义:用于展示问题和答案,或对专有名词进行解释
单/双标签:双

标签名:summary
语义:写在details的里面,用于指定问题或专有名词
单/双标签:双

<details>
    <summary>如何一夜暴富?</summary>
    <p>来到尚硅谷学习前端</p>
</details>

在这里插入图片描述

示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>新增列表标签</title>
</head>
<body>
    <form action="#">
        <input type="text" list="mydata">
        <button>搜索</button>
    </form>
    <datalist id="mydata">
        <option value="周杰伦">周杰伦</option>
        <option value="周冬雨">周冬雨</option>
        <option value="马冬梅">马冬梅</option>
        <option value="温兆伦">温兆伦</option>
    </datalist>
    <hr>
    <details>
        <summary>如何一夜暴富?</summary>
        <p>来到尚硅谷学习前端</p>
    </details>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

新增文本标签

ruby(文本注音)

标签名:ruby
语义:包裹需要注音的文字
单/双标签:双

标签名:rt
语义:写注音,rt标签写在ruby的里面
单/双标签:双

<ruby>
    <span></span>
    <rt>chi</rt>
</ruby>

在这里插入图片描述

mark(标记)

标签名:mark
语义:标记
单/双标签:双

注意:W3C建议mark用于标记搜索结果中的关键字。

<p>Lorem ipsum <mark>dolor</mark>, sit amet consectetur adipisicing elit. Maiores, cupiditate.</p>

在这里插入图片描述

示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>新增文本标签</title>
</head>
<body>
    <div>
        <ruby>
            <span></span>
            <rt>chi</rt>
        </ruby>
        
        <ruby>
            <span></span>
            <rt>mei</rt>
        </ruby>
    </div>

    <hr>

    <p>Lorem ipsum <mark>dolor</mark>, sit amet consectetur adipisicing elit. Maiores, cupiditate.</p>
</body>
</html>

在这里插入图片描述

表单控件新增属性

placeholder:提示文字(注意:不是默认值,value是默认值),适用于文字输入类的表单控件。

required:表示该输入项必填,适用于除按钮外其他表单控件。

autofocus:自动获取焦点,适用于所有表单控件。

autocomplete:自动完成,可以设置onoff,适用于文字输入类的表单控件,注意:密码输入框、多行输入框不可用。

pattern:填写正则表达式,适用于文本输入类表单控件,注意:多行输入不可用,且空的输入框不会验证,往往与required配合。

input 新增属性值

email邮箱类型的输入框,表单提交时会验证格式,输入为空则不验证格式。

urlurl类型的输入框,表单提交时会验证格式,输入为空则不验证格式。

number数字类型的输入框,表单提交时会验证格式,输入为空则不验证格式。

search搜索类型的输入框,表单提交时不会验证格式。

tel电话类型的输入框,表单提交时不会验证格式,在移动端使用时,会唤起数字键盘。

range范围选择框,默认值为50,表单提交时不会验证格式。

color颜色选择框,默认值为黑色,表单提交时不会验证格式。

date日期选择框,默认值为空,表单提交时不会验证格式。

month月份选择框,默认值为空,表单提交时不会验证格式。

week选择框,默认值为空,表单提交时不会验证格式。

time时间选择框,默认值为空,表单提交时不会验证格式。

datetime-local日期+时间选择框,默认值为空,表单提交时不会验证格式。

form 标签新增属性

novalidate:如果给form标签设置了该属性,表单提交的时候不再进行验证。

新增视频标签

<video>标签用来定义视频,它是双标签。

属性:src
值:URL地址
描述:视频地址

属性:width
值:像素值
描述:设置视频播放器的宽度

属性:height
值:像素值
描述:设置视频播放器的高度

属性值:controls
值:无
描述:向用户显示视频控件(比如播放/暂停按钮)

属性值:muted
值:无
描述:视频静音

属性值:autoplay
值:无
描述:视频自动播放

属性值:loop
值:无
描述:循环播放

属性值:poster
值:URL地址
描述:视频封面

属性值:preload
值:auto/metadata/none
描述:视频预加载,如果使用autoplay,则忽略该属性;none:不预加载视频;metadata:仅预先获取视频的元数据(例如长度);auto:下载这个视频文件,即使用户不希望使用它。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>01_新增视频标签</title>
    <style>
        video {
            width: 600px;
        }
    </style>
</head>
<body>
    <video src="./小电影.mp4" controls muted loop poster="./封面.png" preload="auto"></video>
</body>
</html>

在这里插入图片描述

新增音频标签

<audio>标签用来定义音频,它是双标签。

属性:src
值:URL地址
描述:音频地址

属性:controls
值:无
描述:向用户显示音频控件(比如播放/暂停按钮)

属性:autoplay
值:无
描述:音频自动播放

属性:muted
值:无
描述:音频静音

属性:loop
值:无
描述:循环播放

属性:preload
值:auto/metadata/none
描述:音频预加载,如果使用autoplay,则忽略该属性;none:不预加载音频;metadata:仅预先获取音频的元数据(例如长度);auto:可以下载整个音频文件,即使用户不希望使用它。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>02_新增音频标签</title>
</head>
<body>
    <audio src="./小曲.mp3" controls></audio>
</body>
</html>

在这里插入图片描述

新增全局属性(了解)

contenteditable:表示元素是否可被用户编辑,可选值:true可编辑、false不可编辑

draggable:表示元素可以被拖动,可选值:true可拖动、false不可拖动

hidden:隐藏元素

spellcheck:规定是否对元素进行拼写和语法检查,可选值:true检查、false不检查

contextmenu:规定元素的上下文菜单,在用户鼠标右键点击元素时显示

data-*:用于存储页面的私有定制数据

HTML5兼容性处理

添加元信息,让浏览器处于最优渲染模式。

<!-- 设置IE总是使用最新的文档模式进行渲染 -->
<meta html-equiv="X-UA-Compatible" content="IE=Edge">

<!-- 优先使用 webkit(Chromium)内核进行渲染,针对360等壳浏览器 -->
<meta name="renderer" content="webkit">

使用html5shiv让低版本浏览器认识H5的语义化标签。

<!--[if lt ie 9]>
<script src="../sources/js/html5shiv.js"></script>
<![endif]-->

扩展

lt小于
lte小于等于
gt大于
gte大于等于
!逻辑非

CSS3

新增长度单位

  1. rem根元素字体大小的倍数,只与根元素字体大小有关。
  2. vm视口宽度的百分之多少,10vw就是视口宽度的10%
  3. vh视口高度的百分之多少,10vh就是视口高度的10%
  4. vmax视口宽高中大的那个的百分之多少。(了解即可)
  5. vmin视口宽高中小的那个的百分之多少。(了解即可)

新增颜色设置方式

CSS3新增了三种颜色设置方式,分别是rgbahslhsla,由于之前CSS2中详细讲解,此处略过。

新增选择器

CSS3新增的选择器有:动态伪类、目标伪类、语言伪类、UI伪类、结构伪类、否定伪类、伪元素;这些在CSS2中已经详细讲解,此处略过。

新增盒子模型相关属性

box-sizing 怪异盒模型

使用box-sizing属性可以设置盒模型的两种类型

可选值:content-box
含义:widthheight设置的盒子内容区的大小。(默认值)

可选值:border-box
含义:widthheight设置的盒子总大小。(怪异盒模型)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>01_box-sizing</title>
    <style>
        .box1 {
            width: 200px;
            height: 200px;
            background-color: deepskyblue;
            padding: 5px;
            border: 5px solid black;
            margin-bottom: 20px;
        }
        .box2 {
            width: 200px;
            height: 200px;
            background-color: gray;
            padding: 5px;
            border: 5px solid black;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>

在这里插入图片描述

resize 调整盒子大小

使用resize属性可以控制是否允许用户调节元素尺寸。

值:none
含义:不允许用户调整元素大小。(默认)

值:both
含义:用户可以调节元素的宽度和高度。

值:horizontal
含义:用户可以调节元素的宽度。

值:vertical
含义:用户可以调节元素的高度。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>02_resize</title>
</head>
<style>
    .box1 {
        width: 400px;
        height: 400px;
        background-color: orange;
        resize: both;
        overflow: scroll;
    }
    .box2 {
        width: 800px;
        height: 600px;
        background-color: skyblue;
    }
</style>
<body>
    <div class="box1">
        <div class="box2">123</div>
    </div>
</body>
</html>

在这里插入图片描述

box-shadow 调整盒子阴影

使用box-shadow属性为盒子添加阴影。

语法:
box-shadow: h-shadow v-shadow blur spread color inset;

各个值的含义:
值:h-shadow
含义:水平阴影的位置,必须填写,可以为负值

值:v-shadow
含义:垂直阴影的位置,必须填写,可以为负值

值:blur
含义:可选,模糊距离

值:spread
含义:可选,阴影的外延值

值:color
含义:可选,阴影的颜色

值:inset
含义:可选,将外部阴影改为内部阴影

默认值:box-shadow:none表示没有阴影。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>03_box-shadow</title>
</head>
<style>
    .box1 {
        width: 400px;
        height: 400px;
        background-color: orange;
        margin: 0 auto;
        margin-top: 100px;
        font-size: 40px;

        /* 写两个值,含义:水平位置 垂直位置 */
        /* box-shadow: 10px 10px; */

        /* 写三个值,含义:水平位置 垂直位置 阴影的颜色 */
        /* box-shadow: 10px 10px blue; */

        /* 写三个值,含义:水平位置 垂直位置 模糊程度 */
        /* box-shadow: 10px 10px 20px; */

        /* 写四个值,含义:水平位置 垂直位置 模糊程度 阴影的颜色 */
        /* box-shadow: 10px 10px 20px blue; */

        /* 写五个值,含义:水平位置 垂直位置 模糊程度 外延值 阴影的颜色 */
        /* box-shadow: -10px -10px 20px 10px blue; */

        /* 写六个值,含义:水平位置 垂直位置 模糊程度 外延值 阴影的颜色 内阴影 */
        /* box-shadow: 10px 10px 20px 10px blue inset; */

        position: relative;
        top: 0;
        left: 0;
        transition: 1s linear all;
    }

    .box1:hover {
        box-shadow: 0px 0px 20px black;
        top: -1px;
        left: 0;
    }
</style>
<body>
    <div class="box1">你好啊</div>
</body>
</html>

在这里插入图片描述

opacity 调整盒子透明度

opacity属性能为整个元素添加透明效果,值是01之间的小数,0是完全透明,1表示完全不透明。

opacityrgba的区别?
opacity是一个属性,设置的是整个元素(包括元素里的内容)的不透明度。
rgba是颜色的设置方式,用于设置颜色,它的透明度,仅仅是调整颜色的透明度。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
    .box1 {
        width: 200px;
        height: 200px;
        background-color: orange;
        font-size: 40px;
        opacity: 0.1;
        font-weight: bold;
    }
    .box2 {
        position: relative;
    }

    h1 {
        position: absolute;
        top: 100px;
        left: 0;
        background-color: black;
        color: white;
        width: 400px;
        line-height: 100px;
        text-align: center;
        font-size: 40px;
        opacity: 0.5;
    }
</style>
<body>
    <div class="box1">你好啊</div>
    <div class="box2">
        <img src="./你瞅啥.jpg" alt="">
        <h1>你瞅啥</h1>
    </div>
</body>
</html>

在这里插入图片描述

新增背景相关属性

background-origin 设置背景图的原点

语法:

  1. padding-box: 从padding区域开始显示背景图像。—— —— 默认值
  2. border-box:从border区域开始显示背景图像。
  3. content-box:从content区域开始显示背景图像。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_background-origin</title>
</head>
<style>
    .box1 {
        width: 400px;
        height: 400px;
        background-color: skyblue;
        margin: 0 auto;
        font-size: 40px;
        padding: 50px;
        border: 50px dashed rgba(255,0,0);
        background-image: url('./bg01.jpg');
        background-repeat: no-repeat;
        background-origin: border-box;
    }
</style>
<body>
    <div class="box1">你好啊</div>
</body>
</html>

在这里插入图片描述

background-clip 设置背景图的向外裁剪的区域

语法:

  1. border-box: 从border区域开始向外裁剪背景。—— —— 默认值
  2. padding-box: 从padding区域开始向外裁剪背景。
  3. content-box: 从content区域开始向外裁剪背景。
  4. text: 背景图只呈现在文字上。

注意:若值为text,那么backgroun-clip要加上-webkit-前缀。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_background-clip</title>
</head>
<style>
    .box1 {
        width: 400px;
        height: 400px;
        background-color: skyblue;
        margin: 0 auto;
        font-size: 40px;
        padding: 50px;
        border: 50px dashed rgba(255,0,0);
        background-image: url('./bg02.jpg');
        background-repeat: no-repeat;
        background-origin: border-box;
        background-clip: content-box;
    }
</style>
<body>
    <div class="box1">你好啊</div>
</body>
</html>

在这里插入图片描述

background-size 设置背景图的尺寸

语法:

  1. 用长度值指定背景图片大小,不允许负值。

    background-size: 300px 200px;
    
  2. 用百分比指定背景图片大小,不允许负值。

    background-size: 100% 100%;
    
  3. auto:背景图片的真实大小。—— —— 默认值

  4. contain:将背景图片等比缩放,使背景图片的宽或高,与容器的宽或高相等,再将完整背景图片包含在容器内,但要注意:可能会造成容器里部分区域没有背景图片。

    background-size: contain;
    
  5. cover:将背景图片等比缩放,直到完全覆盖容器,图片会尽可能全的显示在元素上,但要注意:背景图片有可能显示不完整。—— —— 相对比较好的选择

    background-size: cover;
    
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_background-size</title>
</head>
<style>
    .box1 {
        width: 400px;
        height: 400px;
        background-color: skyblue;
        font-size: 40px;
        border: 1px solid black;
        background-image: url('./bg03.jpg');
        background-repeat: no-repeat;
        background-size: cover;
    }
</style>
<body>
    <div class="box1"></div>
</body>
</html>

在这里插入图片描述

background 复合属性

语法:

background: color url repeat position / size origin clip

注意:

  1. originclip的值如果一样,如果只写一个值,则originclip都设置;如果设置了两个值,前面的是origin,后面的clip
  2. size的值必须写在position值的后面,并且用/分开。

多背景图

CSS3允许元素设置多个背景图片

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>05_多背景图</title>
</head>
<style>
    div {
        width: 400px;
        height: 400px;
        border: 1px solid black;
        background: url('./bg-lt.png') no-repeat left top,
                    url('./bg-rt.png') no-repeat right top,
                    url('./bg-lb.png') no-repeat left bottom,
                    url('./bg-rb.png') no-repeat right bottom;
    }
</style>
<body>
    <div></div>
</body>
</html>

在这里插入图片描述

新增边框相关属性

边框圆角

CSS3中,使用border-radius属性可以将盒子变为圆角。

同时设置四个角的圆角:

border-radius:10px;

分开设置每个角的圆角(几乎不用):
属性名:border-top-left-radius
作用:设置左上角圆角半径:一个值是正圆半径,两个值分别是椭圆的x半径、y半径。

属性名:border-top-right-radius
作用:设置右上角圆角半径:一个值是正圆半径,两个值分别是椭圆的x半径、y半径。

属性名:border-bottom-right-radius
作用:设置右下角圆角半径:一个值是正圆半径,两个值分别是椭圆的x半径、y半径。

属性名:border-bottom-left-radius
作用:设置左下角圆角半径:一个值是正圆半径,两个值分别是椭圆的x半径、y半径。

分别设置每个圆角,综合写法(几乎不用):

border-radius: 左上角x 右上角x 右下角x 左下角x / 左上角y 右上角y 右下角y 左下角y

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_边框圆角</title>
</head>
<style>
    div {
        width: 400px;
        height: 400px;
        border: 2px solid black;
        margin: 0 auto;
        /* border-radius: 10px; */
        border-radius: 10%;
    }
</style>
<body>
    <div></div>
</body>
</html>

在这里插入图片描述

边框外轮廓(了解)

  • outline-width:外轮廓的宽度。
  • outline-color:外轮廓的颜色。
  • outline-style:外轮廓的风格。
    • none:无轮廓
    • dotted:点状轮廓
    • solid:实现轮廓
    • double:双线轮廓
  • outline-offset:设置外轮廓与边框的距离,正负值都可以设置。

    注意:outline-offset不是outline的子属性,是一个独立的属性。

  • outline:复合属性

    outline:50px solid blue;

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_边框外轮廓</title>
</head>
<style>
    .box1 {
        width: 400px;
        height: 400px;
        padding: 10px;
        border: 10px solid black;
        background-color: gray;
        font-size: 40px;
        margin: 0 auto;
        margin-top: 100px;

        /* outline-width: 20px;
        outline-color: orange;
        outline-style: solid; */
        outline-offset: 30px;

        outline: 20px solid orange;
    }
</style>
<body>
    <div class="box1">你好啊</div>
    <div>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Illo adipisci animi, consequuntur dolor voluptate recusandae corrupti dolores est laborum quis?</div>
</body>
</html>

在这里插入图片描述

新增文本属性

文本阴影

CSS3中,我们可以使用text-shadow属性给文本添加阴影。

语法:

text-shadow: h-shadow v-shadow blur color;

值:h-shadow
描述:必须写,水平阴影的位置,允许负值。

值:v-shadow
描述:必须写,垂直阴影的位置,允许负值。

值:blur
描述:可选,模糊的距离。

值:color
描述:可选,阴影的颜色。

默认值:text-shadow:none表示没有阴影。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_文本阴影</title>
</head>
<style>
    body {
        background-color: black;
    }

    h1 {
        font-size: 80px;
        text-align: center;
        color: white;

        /* text-shadow: 3px 3px; */
        /* text-shadow: 3px 3px red; */
        /* text-shadow: 3px 3px 10px red; */
        /* text-shadow: 0px 0px 15px black; */
        text-shadow: 0px 0px 20px red;
    }
</style>
<body>
    <h1>红浪漫洗浴欢迎您的光临</h1>
</body>
</html>

在这里插入图片描述

文本换行

CSS3中,我们可以使用white-space属性设置文本换行方式。

常用值如下:
值:normal
含义:文本超出边界自动换行,文本中的换行被浏览器识别为一个空格。(默认值)

值:pre
含义:原样输出,与pre标签的效果相同。

值:pre-wrap
含义:在pre效果的基础上,超出元素边界自动换行。

值:pre-line
含义:在pre效果的基础上,超出元素边界自动换行,且只识别文本中的换行,空格会忽略。

值:nowrap
含义:强制不换行。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_文本换行</title>
</head>
<style>
    div {
        width: 400px;
        height: 400px;
        border: 1px solid black;
        font-size: 20px;
    }

    .box1 {
        white-space: normal;
    }

    .box2 {
        white-space: pre;
    }
    
    .box3 {
        white-space: pre-wrap;
    }
    
    .box4 {
        white-space: pre-line;
    }
    
    .box5 {
        white-space: nowrap;
    }
</style>
<body>

    <div class="box1">
        normal
        山回路转不见君
        雪上空留马行处
        山回路转不见君 山回路转不见君山回路转不见君山回路转不见君山回路转不见君山回路转不见君
        雪上空留马行处
    </div>

    <br>

    <div class="box2">
        pre
        山回路转不见君
        雪上空留马行处
        山回路转不见君 山回路转不见君山回路转不见君山回路转不见君山回路转不见君山回路转不见君
        雪上空留马行处
    </div>

    <br>

    <div class="box3">
        pre-wrap
        山回路转不见君
        雪上空留马行处
        山回路转不见君 山回路转不见君山回路转不见君山回路转不见君山回路转不见君山回路转不见君
        雪上空留马行处
    </div>

    <br>

    <div class="box4">
        pre-line
        山回路转不见君
        雪上空留马行处
        山回路转不见君 山回路转不见君山回路转不见君山回路转不见君山回路转不见君山回路转不见君
        雪上空留马行处
    </div>

    <br>

    <div class="box5">
        nowrap
        山回路转不见君
        雪上空留马行处
        山回路转不见君 山回路转不见君山回路转不见君山回路转不见君山回路转不见君山回路转不见君
        雪上空留马行处
    </div>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文本溢出

CSS3中,我们可以使用text-overflow属性设置文本内容溢出时的呈现模式。

常用值如下:
值:clip
含义:当内联内容溢出时,将溢出部分裁切掉。(默认值)

值:ellipsis
含义:当内联内容溢出块容器时,将溢出部分替换为 ...

注意:要使得text-overflow属性生效,块容器必须显式定义overflow为非visible值,一般都写hidden
white-spacenowrap值。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_文本溢出</title>
</head>
<style>
    ul {
        width: 400px;
        height: 400px;
        border: 1px solid black;
        font-size: 20px;
        list-style: none;
        padding-left: 0;
        padding-right: 10px;
    }
    li {
        margin-bottom: 10px;
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
</style>
<body>
    <ul>
        <li>焦点访谈: 隐形冠军 匠心打造 分毫必争</li>
        <li>我,嫁到日本才发现,女性活得真憋屈,体毛不能有,放屁也不自由</1i>
        <li>高洪波无缘!足协盟主热门人选曝光,3选1,冷门人物或成黑马杀出</li>
        <li>《狂飙》爆火以后“疯驴子”被骂上热搜:跪着赚钱丢人吗</li>
        <li>气温猛降15C,冷空气再来袭! 这些地方迎大范围降雨!“虚高”气温大跳水!!!!!</i>
    </ul>
</body>
</html>

在这里插入图片描述

文本修饰

  • CSS3升级了text-decoration属性,让其变成了复合属性。

    text-decoration: text-decoration-line || text-decoration-style || text-decoration-color
    
  • 子属性及其含义:

    • text-decoration-line:设置文本装饰线的位置
      • none:指定文字无装饰(默认值)
      • underline:指定文字的装饰是下划线
      • overline:指定文字的装饰是上划线
      • line-through:指定文字的装饰是贯穿线
    • text-decoration-style:文本装饰线条的形状
      • solid:实线(默认)
      • double:双线
      • dotted:点状线条
      • dashed:虚线
      • wavy:波浪线
    • text-decoration-color:文本装饰线条的颜色

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04_文本修饰</title>
    <style>
        h1 {
            font-size: 100px;
            /* text-decoration-line: overline;
            text-decoration-style: dashed;
            text-decoration-color: blue; */
            text-decoration: overline dashed blue;
        }
    </style>
</head>
<body>
    <h1>你好啊,欢迎来到尚硅谷学习</h1>
</body>
</html>

在这里插入图片描述

文本描边(极度不常用)

注意:文字描边功能仅webkit内核浏览器支持。

  • -webkit-text-stroke-width:设置文字描边的宽度,写长度值。
  • -webkit-text-stroke-color:设置文字描边的颜色,写颜色值。
  • -webkit-text-stroke:复合属性,设置文字描边宽度和颜色。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=文本, initial-scale=1.0">
    <title>05_文本描边</title>
</head>
<style>
    h1 {
        font-size: 100px;
        /* -webkit-text-stroke-color: red; */
        /* -webkit-text-stroke-width: 3px; */
        -webkit-text-stroke: 3px red;
        color: transparent;
    }
</style>
<body>
    <h1>先生您好,欢迎光临红浪漫!</h1>
</body>
</html>

在这里插入图片描述

新增渐变

线性渐变

  • 多个颜色之间的渐变,默认从上到下渐变。
    在这里插入图片描述

    background-image: linear-gradient(red,yellow,green);
    
  • 使用关键词设置线性渐变的方向
    在这里插入图片描述

    background-image: linear-gradient(to right top,red,yellow,green);
    
  • 使用角度设置线性渐变的方向
    在这里插入图片描述

    background-image: linear-gradient(20deg,red,yellow,green);
    
  • 调整开始渐变的位置
    在这里插入图片描述

    background-image: linear-gradient(red 50px,yellow 100px,green);
    

径向渐变

  • 多个颜色之间的渐变,默认从圆心四散。(注意:不一定是正圆,要看容器本身宽高比)
    在这里插入图片描述

    background-image: radial-gradient(red,yellow,green);
    
  • 使用关键词调整渐变圆的圆心位置。
    在这里插入图片描述

    background-image: radial-gradient(at right top,red,yellow,green);
    
  • 使用像素值调整渐变圆的圆心位置。
    在这里插入图片描述

    background-image: radial-gradient(at 100px 50px,red,yellow,green);
    
  • 调整渐变形状为正圆。
    在这里插入图片描述

    background-image: radial-gradient(circle,red,yellow,green);
    
  • 调整形状的半径。
    在这里插入图片描述
    在这里插入图片描述

    background-image: radial-gradient(100px,red,yellow,green);
    background-image: radial-gradient(50px 100px,red,yellow,green);	
    
  • 调整开始渐变的位置。
    在这里插入图片描述

    background-image: radial-gradient(red 50px,yellow 100px,green 150px);
    

重复渐变

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_重复渐变</title>
</head>
<style>
    .box {
        width: 300px;
        height: 200px;
        border: 1px solid black;
        float: left;
        margin-left: 30px;
        font-size: 40px;
    }
    .box1 {
        background-image: repeating-linear-gradient(red 50px,yellow 100px,green 150px);
    }
</style>
<body>
    <div class="box box1">重复线性渐变</div>
</body>
</html>

在这里插入图片描述

Web字体

基本用法

可以通过@font-face指定字体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了。

  • 语法(简写方式)

    @font-face {
        font-family: "情书字体";
        src: url('./方正手迹.ttf');
    }
    
  • 语法(高兼容性写法)

    @font-face {
        font-family: 'atguigu';
        font-display: swap;
        src: url('webfont.eot'); /* IE9 */
        src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
        url('webfont.woff2') format('woff2'),
        url('webfont.woff') format('woff'), /* chrome、firefox */
        url('webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
        url('webfont.svg#webfont') format('svg'); /* iOS 4.1- */
    }
    

定制字体

示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_web字体</title>
</head>
<style>
    @font-face {
        font-family: "情书字体";
        src: url('./font1/方正手迹.ttf');
    }
    @font-face {
        font-family: 'atguigu';
        font-display: swap;
        src: url('./font2/webfont.eot'); /* IE9 */
        src: url('./font2/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
        url('./font2/webfont.woff2') format('woff2'),
        url('./font2/webfont.woff') format('woff'), /* chrome、firefox */
        url('./font2/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
        url('./font2/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
    }
    .t1 {
        font-size: 100px;
        font-family: '情书字体';
    }
    .t2 {
        font-size: 100px;
        font-family: 'atguigu';
    }
</style>
<body>
    <h1 class="t1">春风得意马蹄疾,不信人间有别离</h1>
    <h1 class="t2">春风得意马蹄疾,不信人间有别离</h1>
</body>
</html>

在这里插入图片描述

字体图标

  • 相比图片更加清晰。
  • 灵活性高,更方便改变大小、颜色、风格等。
  • 兼容性好,IE也能支持。

字体图标的具体使用方式,每个平台不尽相同,最好参考平台使用指南。

阿里巴巴图标官网地址:https://www.iconfont.cn/

2D变换

前提:二维坐标系如下图所示
在这里插入图片描述

2D位移

2D位移可以改变元素的位置,具体使用方式如下:

  1. 先给元素添加转换属性transform
  2. 编写transform的具体值,相关可选值如下:
    含义
    translateX设置水平方向位移,需指定长度值;若指定的是百分比,是参考自身宽度的百分比。
    translateY设置垂直方向位移,需指定长度值;若指定的是百分比,是参考自身高度的百分比。
    translate一个值代表水平方向,两个值代表:水平和垂直方向。
  3. 注意点
    1. 位移与相对定位很相似,都不脱离文档流,不会影响到其它元素。
    2. 与相对定位的区别:相对定位的百分比值,参考的是其父元素;定位的百分比值,参考的是其自身。
    3. 浏览器针对位移有优化,与定位相比,浏览器处理位移的效率更高。
    4. transform可以链式编写,例如:transform: translateX(30px) translateY(40px);
    5. 位移对行内元素无效。
    6. 位移配合定位,可实现元素水平垂直居中
      .box {
      	position: absolute;
      	left: 50%;
      	top: 50%;
      	transform: translate(-50%,-50%);
      }
      

2D缩放

2D缩放是指:让元素放大或缩小,具体使用方式如下:

  1. 先给元素添加转换属性transform

  2. 编写transform的具体值,相关可选值如下:

    含义
    scaleX设置水平方向的缩放比例,值为一个数字,1表示不缩放,大于1放大,小于1缩小。
    scaleY设置垂直方向的缩放比例,值为一个数字,1表示不缩放,大于1放大,小于1缩小。
    scale同时设置水平方向、垂直方向的缩放比例,一个值代表同时设置水平和垂直缩放;两个值分别代表:水平缩放、垂直缩放。
  3. 注意点:

    1. scale的值,是支持写负数的,但几乎不用,因为容易让人产生误解。
    2. 借助缩放,可实现小于12px的文字。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_缩放</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: scale(1.5);
    }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

2D旋转

2D旋转是指:让元素在二维平面内,顺时针旋转或逆时针旋转,具体使用方法如下:

  1. 先给元素添加转换属性transform
  2. 编写transform的具体值,相关可选值如下:
    含义
    rotate设置旋转角度,需指定一个角度值deg,正值顺时针,负值逆时针。

注意:rotateZ(20deg)相当于rotate(20deg),当然到了3D变换的时候,还能写:rotate(x,x,x)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_旋转</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: rotate(30deg);
    }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

2D扭曲(了解)

2D扭曲是指:让元素在二维平面内被“拉扯”,进而“走形”,实际开发几乎不用,了解即可,具体使用方式如下:

  1. 先给元素添加转换属性transform
  2. 编写transform的具体值,相关可选值如下:
    含义
    skewX设置元素在水平方向扭曲,值为角度值,会将元素的左上角、右下角拉扯
    skewY设置元素在垂直方向扭曲,值为角度值,会将元素的左上角、右下角拉扯
    skew一个值代表skewX,两个值分别代表:skewXskewY
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04_扭曲_了解</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: skew(30deg,30deg);
    }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

2D多重变换

多个变换,可以同时使用一个transform来编写。

注意点:多重变换时,建议最后旋转。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>05_多重变换</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: translate(100px,100px) rotate(30deg);
    }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

2D变换原点

  • 元素变换时,默认的原点是元素的中心,使用transform-origin可以设置变换的原点。
  • 修改变换原点对位移没有影响,对旋转和缩放会产生影响。
  • 如果提供两个值,第一个用于横坐标,第二个用于纵坐标。
  • 如果只提供一个,若是像素值,表示横坐标,纵坐标取50%;若是关键词,则另一个坐标取50%
    1. transform-origin:50% 50%,变换原点在元素的中心位置,百分比是相对于自身。—— —— 默认值
    2. transform-origin: left top,变换原点在元素的左上角。
    3. transform-origin: 50px 50px,变换原点距离元素左上角50px 50px的位置。
    4. transform-origin:0,只写一个值的时候,第二个值默认为50%

3D变换

开启3D空间

重要原则:元素进行3D变换的首要操作:父元素必须开启3D空间!

使用transform-style开启3D空间,可选值如下:

  • flat:让子元素位于此元素的二维平面内(2D空间)—— —— 默认值
  • preserve-3d:让子元素位于此元素的三维空间内(3D空间)

设置景深

何为景深?—— —— 指观察者与z=0平面的距离,能让发生3D变换的元素,产生透视效果,看起来更加立体。

使用perspective设置景深,可选值如下:

  • none:不指定透视 —— —— (默认值)
  • 长度值:指定观察者距离z=0平面的距离,不允许负值。

注意:perspective设置给发生3D变换元素的父元素

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_3D空间与景深</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(有了透视效果,近大远小) */
        perspective: 500px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: rotateX(50deg);
   }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

透视点位置

所谓透视点位置,就是观察者位置,默认的透视点在元素的中心。

使用perspective-origin设置观察者位置(透视点的位置),例如:

/* 相对坐标轴往右偏移400px,往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素) */
perspective-origin: 400px 300px;

注意:通常情况下,我们不需要调整透视点位置。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_透视点的位置</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(有了透视效果,近大远小) */
        perspective: 500px;
        /* 设置透视点位置:相对坐标轴往右偏移400px,往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素) */
		perspective-origin: 400px 300px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: rotateX(50deg);
   }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

位移

3D位移是在2D位移的基础上,可以让元素沿z轴位移,具体使用方式如下:

  1. 先给元素添加转换属性transform
  2. 编写transform的具体值,3D相关可选值如下:
    含义
    translateZ设置z轴位移,须指定长度值,正值向屏幕外,负值向屏幕里,且不能写百分比。
    translate3d第1个参数对应x轴,第2个参数对应y轴,第3个参数对应z轴,且均不能省略。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_透视点的位置</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(有了透视效果,近大远小) */
        perspective: 500px;
        /* 设置透视点位置:相对坐标轴往右偏移400px,往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素) */
        perspective-origin: 400px 300px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: translate3d(50%,50%,50%);
        box-shadow: 0px 0px 10px black;
   }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

旋转

3D旋转是在2D旋转的基础上,可以让元素沿x轴和y轴旋转,具体使用方式如下:

  1. 先给元素添加转换属性transform
  2. 编写transform的具体值,3D相关可选值如下:
    含义
    rotateX设置x轴旋转角度,需指定一个角度值(deg),面对x轴正方向:正值顺时针,负值逆时针。
    rotateY设置y轴旋转角度,需指定一个角度值(deg),面对y轴正方向:正值顺时针,负值逆时针。
    rotate3d3个参数分别表示坐标轴x,y,z,第4个参数表示旋转的角度,参数不允许省略。例如:transform: rotate3d(1,1,1,30deg),意思是:xyz分别旋转30度。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04_旋转</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(有了透视效果,近大远小) */
        perspective: 500px;
        /* 设置透视点位置:相对坐标轴往右偏移400px,往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素) */
        perspective-origin: 400px 300px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        /* transform: rotateX(315deg); */
        /* transform: rotateX(-35deg); */
        transform: rotate3d(1,1,1,30deg);
   }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

缩放

3D缩放是在2D缩放的基础上,可以让元素沿z轴缩放,具体使用方式如下:

  1. 先给元素添加转换属性transform
  2. 编写transform的具体值,3D相关可选值如下:
    含义
    scaleZ设置z轴方向的缩放比例,值为第一个数字,1表示不缩放,大于1放大,小于1缩小。
    scale3d第1个参数对应x轴,第2个参数对应y轴,第3个参数对应z轴,参数不允许省略。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>05_缩放</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(有了透视效果,近大远小) */
        perspective: 500px;
        /* 设置透视点位置:相对坐标轴往右偏移400px,往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素) */
        perspective-origin: 400px 300px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        /* transform: scaleZ(4) rotateY(45deg); */
        transform: scale3d(1.5,1.5,1) rotateY(45deg);
   }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

多重变换

多个变换,可以同时使用一个transform来编写。

transform: translateZ(100px) scaleZ(3) rotetaY(40deg);

注意点:多重变换时,建议最后旋转。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>06_多重变换</title>
</head>
<style>
    .outer {
        width: 200px;
        height: 200px;
        border: 2px solid black;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(有了透视效果,近大远小) */
        perspective: 500px;
        /* 设置透视点位置:相对坐标轴往右偏移400px,往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素) */
        perspective-origin: 400px 300px;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        /* transform-origin: 202px 180px; */
        /* transform: rotateX(-45deg); */
        transform: translateZ(100px) scaleZ(1) rotateY(45deg);
   }
</style>
<body>
    <div class="outer">
        <div class="inner">你好啊</div>
    </div>
</body>
</html>

在这里插入图片描述

过渡

过渡可以在不使用Flash动画,不使用javaScript的情况下,让元素从一种样式,平滑过渡为另一种样式。

transition-property 定义哪个属性需要过渡

作用:定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会有过渡效果。

常用值:

  1. none:不过渡任何属性。
  2. all:过渡所有能过渡的属性。
  3. 具体某个属性名,例如:widthheigth,若有多个以逗号分隔。

不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持过渡。

常见的支持过渡的属性有:颜色、长度值、百分比、z-indexopacity2D变换属性、3D变换属性、阴影。

语法:

/* 设置哪个属性需要过渡效果 */
transition-property: width,height,background-color;

/* 让所有能过渡的属性,都过渡 */
transition-property: all;

transition-duration 设置过渡的持续时间

作用:设置过渡的持续时间,即:一个状态过渡到另外一个状态耗时多久。

常用值:

  1. 0:没有任何过渡时间 —— —— 默认值。
  2. sms:秒或毫秒。
  3. 列表
    • 如果想让所有属性都持续一个时间,那就写一个值。
    • 如果想让每个属性持续不同的时间那就写一个时间的列表。

语法:

/* 设置过渡时间 */
transition-duration: 1s,5s,1s;

/* 设置一个时间,所有人都用 */
transition-duration: 1s;

transition-property 与 transition-duration 示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_基本使用</title>
</head>
<style>
    .box1 {
        width: 200px;
        height: 200px;
        background-color: orange;
        opacity: 0.5;
        /* 设置哪个属性需要过渡效果 */
        /* transition-property: width,height,background-color; */

        /* 让所有能过渡的属性,都过渡 */
        transition-property: all;

        /* 设置过渡时间 */
        /* transition-duration: 1s,5s,1s; */
        /* 设置一个时间,所有人都用 */
        transition-duration: 1s;
    }
    .box1:hover {
        width: 400px;
        height: 400px;
        background-color: green;
        transform: rotate(45deg);
        box-shadow: 0px 0px 20px black;
        opacity: 1;
    }
</style>
<body>
    <div class="box1"></div>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

transition-delay 过渡延时

作用:指定开始过渡的延时时间,单位:sms

transition-timing-function 设置过渡的类型

作用:设置过渡的类型。

常用值:

  1. ease:平滑过渡 —— —— 默认值
  2. linear:线性过渡
  3. ease-in:慢 -> 快
  4. ease-out:快 -> 慢
  5. ease-in-out:慢 -> 快 -> 慢
  6. step-start:等同于steps(1, start)
  7. step-end:等同于steps(1, end)
  8. steps(integer,?):接受两个参数的步进函数,第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是startend,指定每一步的值发生变化的时间点。第二个参数默认值为end
  9. cubic-bezie(number,number,number,number):特定的贝塞尔曲线类型。

在线制作贝塞尔曲线:https://cubic-bezier.com

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_高级使用</title>
</head>
<style>
    .outer {
        width: 1300px;
        height: 900px;
        border: 1px solid black;
    }
    .outer:hover .box {
        width: 1300px;
    }
    .box {
        width: 200px;
        height: 100px;
        /* 让所有能过渡的属性,都过渡 */
        transition-property: all;
        /* 设置一个时间,所有人都用 */
        transition-duration: 1s;
        /* 过渡延迟 */
        /* transition-delay: 2s; */
    }
    .box1 {
        background-color: skyblue;
        transition-timing-function: ease;
    }
    .box2 {
        background-color: orange;
        transition-timing-function: linear;
    }
    .box3 {
        background-color: gray;
        transition-timing-function: ease-in;
    }
    .box4 {
        background-color: tomato;
        transition-timing-function: ease-out;
    }
    .box5 {
        background-color: green;
        transition-timing-function: ease-in-out;
    }
    .box6 {
        background-color: purple;
        transition-timing-function: step-start;
    }
    .box7 {
        background-color: deepskyblue;
        transition-timing-function: step-end;
    }
    .box8 {
        background-color: chocolate;
        transition-timing-function: steps(20,end);
    }
    .box9 {
        background-color: rgb(18,78,34);
        transition-timing-function: cubic-bezier(.88,1.03,.78,1.24);
    }
</style>
<body>
    <div class="outer">
        <div class="box box1">ease(慢,快,慢)</div>
        <div class="box box2">linear(匀速)</div>
        <div class="box box3">ease-in(慢,快)</div>
        <div class="box box4">ease-out(快,慢)</div>
        <div class="box box5">ease-in-out(慢,快,慢)</div>
        <div class="box box6">step-start不考虑过渡的时间,直接就是终点</div>
        <div class="box box7">step-end考虑过渡时间,但无过渡效果,过渡时间到了以后,瞬间到达终点</div>
        <div class="box box8">steps分布过渡</div>
        <div class="box box9">贝塞尔曲线</div>
    </div>
</body>
</html>

在这里插入图片描述

transition 复合属性

如果设置了一个时间,表示duration;如果设置了两个时间,第一是duration,第二个是delay;其他值没有顺序要求。

transition: 1s 1s linear all;

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>过渡复合属性</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 100px;
        border: 1px solid black;
    }
    .inner {
        width: 100px;
        height: 100px;
        background-color: orange;
        transition: 1s 1s linear all;
    }
    .outer:hover .inner {
        width: 1000px;
    }
</style>
<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>
</html>

在这里插入图片描述

多列布局

作用:专门用于实现类似于报纸的布局。

在这里插入图片描述
常用属性如下:
column-count:指定列数,值是数字。
column-width:指定列宽,值是长度。
columns:同时指定列宽和列数,复合属性;值没有数量和顺序要求。
column-gap:设置列边距,值是长度。
column-rule-style:设置列与列之间边框的风格,值与border-style一致。
column-rule-width:设置列与列之间边框的宽度,值是长度。
column-rule-color:设置列与列之间边框的颜色。
column-rule:设置列边框,复合属性。
column-span:指定是否跨列,值:noneall

伸缩盒模型

伸缩盒模型简介

  • 2009年,W3C提出了一种新的盒子模型 —— —— Flexible Box(伸缩盒模型,又称:弹性盒子)。
  • 它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉方式 … …
  • 截止目前,除了在部分IE浏览器不支持,其他浏览器均已全部支持。
  • 伸缩盒模型的出现,逐渐演变出了一套新的布局方案 —— —— flex布局。

小贴士:

  1. 传统布局是指:基于传统盒状模型,主要靠:display属性+position属性+float属性。
  2. flex布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上。

伸缩容器、伸缩项目

  • 伸缩容器:开启了flex的元素,就是:伸缩容器。
    1. 给元素设置:display:flexdisplay:inline-flex,该元素就变为了伸缩容器。
    2. display:inline-flex很少使用,因为可以给多个伸缩容器的父容器,也设置为伸缩容器。
    3. 一个元素可以同时是:伸缩容器、伸缩项目。
  • 伸缩项目:伸缩容器所有子元素自动成为了:伸缩项目。
    1. 仅伸缩容器的子元素成为了伸缩项目,孙子元素、重孙子元素等后代,不是伸缩项目。
    2. 无论原来是那种元素(块、行内块、行内),一旦成为了伸缩项目,全都会“块状化”。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_伸缩容器_伸缩项目</title>
</head>
<style>
    .outer {
        width: 600px;
        height: 600px;
        background-color: #888;
        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
    }
    .inner3 {
        display: flex;
    }
</style>
<body>
    <div class="outer">
        <div class="inner">1</div>
        <div class="inner">2</div>
        <div class="inner inner3">
            <div>a</div>
            <div>b</div>
            <div>c</div>
        </div>
    </div>
</body>
</html>

在这里插入图片描述

主轴与侧轴

  • **主轴:**伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边是终点)。
  • **侧轴:**与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边是终点)。

主轴方向

属性名:flex-direction
常用值如下:

  1. row:主轴方向水平从左到右 —— —— 默认值。
  2. row-reverse:主轴方向水平从右到左。
  3. column:主轴方向垂直从上到下。
  4. column-reverse:主轴方向垂直从下到上。

在这里插入图片描述
注意:改变了主轴的方向,侧轴方向也随之改变。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_主轴方向</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 600px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        /* flex-direction: row; */

        /* 调整主轴方向,水平从右到左 */
        /* flex-direction: row-reverse; */

        /* 调整主轴方向,垂直从上到下 */
        /* flex-direction: column; */

        /* 调整主轴方向,垂直从下到上 */
        flex-direction: column-reverse;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
    }
</style>
<body>
    <div class="outer">
        <div class="inner">1</div>
        <div class="inner">2</div>
        <div class="inner">3</div>
    </div>
</body>
</html>

在这里插入图片描述

主轴换行方式

属性名:flex-wrap
常用值如下:

  1. nowrap:默认值,不换行。
    在这里插入图片描述

  2. wrap:自动换行,伸缩容器不够自动换行。
    在这里插入图片描述

  3. wrap-reverse:反向换行。
    在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_主轴换行方式</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 600px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,不换行,默认值 */
        /* flex-wrap: nowrap; */

        /* 主轴换行方式,换行 */
        /* flex-wrap: wrap; */

        /* 主轴换行方式,反向换行 */
        flex-wrap: wrap-reverse;
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
    }
</style>
<body>
    <div class="outer">
        <div class="inner">1</div>
        <div class="inner">2</div>
        <div class="inner">3</div>
        <div class="inner">4</div>
        <div class="inner">5</div>
        <div class="inner">6</div>
        <div class="inner">7</div>
        <div class="inner">8</div>
        <div class="inner">9</div>
        <div class="inner">10</div>
        <div class="inner">11</div>
    </div>
</body>
</html>

在这里插入图片描述

flex-flow复合属性

flex-flow是一个复合属性,复合了flex-directionflex-wrap两个属性,值没有顺序要求。

flex-flow: row wrap;

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04_flex-flow</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 600px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        /* flex-direction: row; */

        /* 主轴换行方式,换行 */
        /* flex-wrap: wrap; */
        
        flex-flow: row wrap;
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
    }
</style>
<body>
    <div class="outer">
        <div class="inner">1</div>
        <div class="inner">2</div>
        <div class="inner">3</div>
        <div class="inner">4</div>
        <div class="inner">5</div>
        <div class="inner">6</div>
        <div class="inner">7</div>
        <div class="inner">8</div>
        <div class="inner">9</div>
        <div class="inner">10</div>
        <div class="inner">11</div>
    </div>
</body>
</html>

在这里插入图片描述

主轴对齐方式

属性名:justify-content

常用值如下:

  1. flex-start:主轴起点对齐。—— —— 默认值。
  2. flex-end:主轴终点对齐。
  3. center:居中对齐。
  4. space-between:均匀分布,两端对齐(最常用)。
  5. space-around:均匀分布,两端距离是中间距离的一半。
  6. space-evenly:均匀分布两端距离与中间距离一致。

在这里插入图片描述

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>05_主轴对齐方式</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 600px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,换行 */
        flex-wrap: wrap;

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;
        
        /* 主轴的对齐方式,主轴的结束位置 */
        /* justify-content: flex-end; */
                
        /* 主轴的对齐方式,中间对齐 */
        /* justify-content: center; */

        /* 主轴的对齐方式,项目均匀的分布在一行中,项目与项目之间的距离,是项目边缘的一倍 */
        /* justify-content: space-around; */

        /* 主轴的对齐方式,项目均匀的分布在一行中,项目与项目之间的距离是相等的,项目距边缘没有距离 */
        /* justify-content: space-between; */

        /* 主轴的对齐方式,项目均匀的分布在一行中 */
        /* justify-content: space-evenly; */
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
    }
</style>
<body>
    <div class="outer">
        <div class="inner">1</div>
        <div class="inner">2</div>
        <div class="inner">3</div>
    </div>
</body>
</html>

在这里插入图片描述

侧轴对齐方式

只有一行的情况

所需属性:align-items

常用值如下:

  1. flex-start:侧轴的起点对齐。
  2. flex-end:侧轴的终点对齐。
  3. center:侧轴的中点对齐。
  4. baseline:伸缩项目的第一行文字的基线对齐。
  5. stretch:如果伸缩项目未设置高度,将占满整个容器的高度。—— —— (默认值)。

在这里插入图片描述
在这里插入图片描述

多行的情况

所需属性:align-content

常用值如下:

  1. flex-start:与侧轴的起点对齐。
  2. flex-end:与侧轴的终点对齐。
  3. center:与侧轴的中点对齐。
  4. space-between:与侧轴两端对齐,中间平均分布。
  5. space-around:伸缩项目间的距离相等,比距边缘大一倍。
  6. space-evenly:在侧轴上完全平分。
  7. stretch:占满整个侧轴 —— —— 默认值。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>07_侧轴对齐方式_多行</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 900px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,换行 */
        flex-wrap: wrap;

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;
        
        /* 侧轴的对齐方式(多行)侧轴的起始位置对齐 */
        align-content: flex-start;

        /* 侧轴的对齐方式(多行)侧轴的结束位置对齐 */
        /* align-items: flex-end; */

        /* 侧轴的对齐方式(多行)侧轴的中间位置对齐 */
        /* align-items: center; */

        /* 侧轴的对齐方式(多行),伸缩项目之间的距离是相等的,且是边缘距离的2倍 */
        /* align-content: space-around; */

        /* 侧轴的对齐方式(多行),伸缩项目之间的距离是相等的,且边缘没有距离 */
        /* align-content: space-between; */

        /* 侧轴的对齐方式(多行),伸缩项目之间的距离是相等的 */
        /* align-content: space-evenly; */

        /* 侧轴的对齐方式(多行),拉伸 */
        /* align-content: stretch; */
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
    }
    .inner2 {
        height: 300px;
    }
    .inner3 {
        height: 100px;
    }
</style>
<body>
    <div class="outer">
        <div class="inner">1</div>
        <div class="inner inner2">2</div>
        <div class="inner inner3">3</div>
        <div class="inner">4</div>
        <div class="inner">5</div>
        <div class="inner">6</div>
        <div class="inner">7</div>
        <div class="inner">8</div>
        <div class="inner">9</div>
        <div class="inner">10</div>
        <div class="inner">11</div>
    </div>
</body>
</html>

在这里插入图片描述

flex-basis 基准长度

概念:flex-basis设置的是主轴方向的基准长度,会让宽度或高度失效。

备注:主轴横向:宽度失效;主轴纵向:高度失效。

作用:浏览器根据这个属性设置的值,计算主轴上是否有多余空间,默认值auto,即:伸缩项目的宽或高。

flex-grow(伸)

概念:flex-grow定义伸缩项目的放大比例,默认为0,即:纵使主轴存在剩余空间,也不拉伸(放大)。

规则:

  1. 若所有伸缩项目的flex-grow值都为1,则:它们将等分剩余空间(如果有空间的话)。
  2. 若三个伸缩项目的flex-grow值分别为:123,则:分别瓜分到:1/62/63/6的空间。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>10_伸缩项目_伸</title>
</head>
<style>
    .outer {
        width: 1000px;
        height: 900px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,换行 */
        flex-wrap: wrap;

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
        flex-grow: 1;
    }
    /* .inner1 {
        flex-grow: 1;
    } */
    .inner2 {
        /* flex-grow: 2; */
        width: 300px;
    }
    /* .inner3 {
        flex-grow: 3;
    } */
</style>
<body>
    <div class="outer">
        <div class="inner inner1">1</div>
        <div class="inner inner2">2</div>
        <div class="inner inner3">3</div>
    </div>
</body>
</html>

在这里插入图片描述

flex-shrink(缩)

概念:flex-shrink定义了项目的压缩比例,默认为1,即:如果空间不足,该项目将会缩小。

收缩项目的计算,略微复杂一点,我们拿一个场景举例:

例如:
三个收缩项目,宽度分别为:200px300px200px,它们的flex-shrink值分别为:123若想刚好容纳下三个项目,需要总宽度为700px,但目前容器只有400px,还差300px,所以每个人都要收缩一下才可以放下,具体收缩的值,这样计算:

  1. 计算分母:(200*1) + (300*2) + (200*3) = 1400
  2. 计算比例:
    • 项目一:(200*1) / 1400 = 比例值1
    • 项目二:(300*2) / 1400 = 比例值2
    • 项目三:(200*3) / 1400 = 比例值3
  3. 计算最终收缩大小:
    • 项目一需要收缩:比例值1 * 300
    • 项目二需要收缩:比例值2 * 300
    • 项目三需要收缩:比例值3 * 300

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>11_伸缩项目_缩</title>
</head>
<style>
    .outer {
        width: 600px;
        height: 900px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;
 
        /* 主轴换行方式,换行 */
        /* flex-wrap: wrap; */

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;

        /* 侧轴的对齐方式 */
        align-content: flex-start;
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
        /* 可以拉伸 */
        flex-grow: 1;
        /* 可以压缩 */
        flex-shrink: 1;
    }
    .inner2 {
        width: 300px;
    }
</style>
<body>
    <div class="outer">
        <div class="inner inner1">1</div>
        <div class="inner inner2">2</div>
        <div class="inner inner3">3</div>
    </div>
</body>
</html>

在这里插入图片描述

flex复合属性

flex是复合属性,复合了:flex-growflex-shrinkflex-basis三个属性,默认值为0 1 auto

  • 如果写flex:1 1 auto,则可简写为:flex:auto
  • 如果写flex:1 1 0,则可简写为:flex:1
  • 如果写flex:0 0 auto,则可简写为:flex:none
  • 如果写flex:0 1 auto,则可简写为:flex:0 auto —— —— 即flex初始值。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>12_flex复合属性</title>
</head>
<style>
    .outer {
        width: 600px;
        height: 900px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,换行 */
        /* flex-wrap: wrap; */

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;

        /* 侧轴的对齐方式 */
        align-content: flex-start;
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
        /* 可以拉伸 */
        /* flex-grow: 1; */

        /* 可以压缩 */
        /* flex-shrink: 1; */

        /* 基准长度 */
        /* flex-basis: 100px; */

        /* 可以拉伸 可以压缩 不设置基准长度,可简写为:flex:auto */
        /* flex: 1 1 auto; */
        /* flex:auto; */

        /* 可以拉伸 可以压缩 设置基准长度为0,可简写为:flex:1 */
        /* flex: 1 1 0; */
        flex:1;

        /* 不可以拉伸 不可以压缩 不设置基准长度,可简写为:flex:none */
        /* flex: 0 0 auto; */
        /* flex:none; */

        /* 不可以拉伸 可以压缩 不设置基准长度,可简写为:flex:0 auto */
        /* flex: 0 1 auto; */
        /* flex:0 auto; */
    }
</style>
<body>
    <div class="outer">
        <div class="inner inner1">1</div>
        <div class="inner inner2">2</div>
        <div class="inner inner3">3</div>
    </div>
</body>
</html>

在这里插入图片描述

项目排序

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>13_项目排序与单独对齐</title>
</head>
<style>
    .outer {
        width: 600px;
        height: 900px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,换行 */
        /* flex-wrap: wrap; */

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;

        /* 侧轴的对齐方式 */
        align-content: flex-start;
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
        
        /* 可以拉伸 可以压缩 设置基准长度为0,可简写为:flex:1 */
        flex: 1 1 0;
    }
    .inner1 {
        order: 3;
    }
    .inner2 {
        order: 2;
    }
    .inner3 {
        order: 1;
    }
</style>
<body>
    <div class="outer">
        <div class="inner inner1">1</div>
        <div class="inner inner2">2</div>
        <div class="inner inner3">3</div>
    </div>
</body>
</html>

在这里插入图片描述

单独对齐

通过align-self属性,可以单独调整某个伸缩项目的对齐方式。
默认值为auto,表示继承父元素的align-items属性。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>13_项目排序与单独对齐</title>
</head>
<style>
    .outer {
        width: 600px;
        height: 900px;
        background-color: #888;
        margin: 0 auto;
        /* 伸缩模型相关属性-start */

        /* 将该元素变为了伸缩容器(开启了flex布局) */
        display: flex;

        /* 调整主轴方向,水平从左到右,默认 */
        flex-direction: row;

        /* 主轴换行方式,换行 */
        /* flex-wrap: wrap; */

        /* 主轴的对齐方式,主轴的起始位置 */
        justify-content: flex-start;

        /* 侧轴的对齐方式 */
        align-content: flex-start;
        
    }
    .inner {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        border: 1px solid black;
        box-sizing: border-box;
        
        /* 可以拉伸 可以压缩 设置基准长度为0,可简写为:flex:1 */
        flex: 1 1 0;
    }
    .inner2 {
        align-self: center;
    }
</style>
<body>
    <div class="outer">
        <div class="inner inner1">1</div>
        <div class="inner inner2">2</div>
        <div class="inner inner3">3</div>
    </div>
</body>
</html>

在这里插入图片描述

响应式布局

媒体类型

值:all
含义:检测所有设备。

值:screen
含义:检测电子屏幕,包括:电脑屏幕、平板屏幕、手机屏幕等。

值:print
含义:检测打印机。

语法:

@media {
 	/* css样式 */
}

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01_媒体查询_媒体类型</title>
</head>
<style>
    h1 {
        width: 600px;
        height: 400px;
        line-height: 400px;
        background-image: linear-gradient(30deg,red,yellow,green);
        margin: 0 auto;
        text-align: center;
        font-size: 100px;
        color: white;
        text-shadow: 0 0 10px black;
    }
    /* 只有在打印机或打印预览才应用的样式 */
    @media print {
        h1 {
            background: transparent;
        }
    }

    /* 只有在屏幕上才应用的样式 */
    @media screen {
        h1 {
            font-family: "宋体";
        }
    }

    /* 一直都应用的样式 */
    @media all {
        h1 {
            color: red;
        }
    }
</style>
<body>
    
</body>
    <h1>新年快乐</h1>
</html>

在这里插入图片描述
在这里插入图片描述

媒体特性

值:width
含义:检测视口宽度

值:max-width
含义:检测视口最大宽度

值:min-width
含义:检测视口最小宽度

值:height
含义:检测视口高度

值:max-height
含义:检测视口最大高度

值:min-height
含义:检测视口最小高度

值:device-width
含义:检测设备屏幕的宽度

值:max-device-width
含义:检测设备屏幕的最大宽度

值:min-device-width
含义:检测设备屏幕的最小宽度

值:orientation
含义:检测视口的旋转方向(是否横屏):1. portrait视口处于纵向,即高度大于等于宽度;2. landscape视口处于横向,即宽度大于高度。

语法:

@media () {
	/* css样式 */
}

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02_媒体查询_媒体特性</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }
    h1 {
        height: 200px;
        background-color: gray;
        text-align: center;
        line-height: 200px;
        font-size: 100px;
    }

    /* 检测到视口的宽度为800px时,应用如下样式 */
    @media (width:800px) {
        h1 {
            background-color: green;
        }
    }

    /* 检测到视口的宽度小于等于700px时,应用如下样式 */
    @media (max-width:700px) {
        h1 {
            background-color: orange;
        }
    }
    
    /* 检测到视口的宽度大于等于900px时,应用如下样式 */
    @media (min-width:900px) {
        h1 {
            background-color: deepskyblue;
        }
    }

    /* 检测到视口的高度等于800px时,应用如下样式 */
    /* @media (height:800px) {
        h1 {
            background-color: yellow;
        }
    } */

    /* 检测到屏幕的宽度等于1536时,应用如下样式 */
    /* @media (device-width:1536px) {
        h1 { 
            color: white;
        }
    } */
</style>
<body>
    <h1>你好啊</h1>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运算符

值:and
含义:并且

值:,or
含义:或

值:not
含义:否定

值:not
含义:否定

值:only
含义:肯定

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_媒体查询_运算符</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }
    h1 {
        height: 200px;
        background-color: gray;
        text-align: center;
        line-height: 200px;
        font-size: 100px;
    }

    /* 且运算符 */
    /* @media (min-width:700px) and (max-width:800px) {
        h1 {
            background-color: orange;
        }
    } */
    /* @media screen and (min-width:700px) and (max-width:800px) {
        h1 {
            background-color: orange;
        }
    } */

    /* 或运算符 */
    /* @media (min-width:700px) or (max-width:800px) {
        h1 {
            background-color: orange;
        }
    } */
    /* @media screen and (min-width:700px) or (max-width:800px) {
        h1 {
            background-color: orange;
        }
    } */

    /* 否定运算符 */
    /* @media not screen {
        h1 {
            background-color: orange;
        }
    } */

    /* 肯定运算符,不加only也是肯定,这个主要为了处理ie不乱上样式,因为ie识别不了only就不会处理了 */
    @media only screen {
        h1 {
            background-color: orange;
        }
    }
</style>
<body>
    <h1>你好啊</h1>
</body>
</html>

常见阈值

在实际开发中,会将屏幕划分成几个区间,例如:
在这里插入图片描述

结合外部样式的用法
用法一
<link rel="stylesheet" media="具体的媒体查询" mystylesheet.css>
用法二
@media screen and (max-width:768px) {
	/* CSS-Code; */
}

@media screen and (min-width:768px) and (max-width:1200px) {
	/* CSS-Code; */
}

BFC

什么是BFC

  • W3C上对BFC的定义:

    浮动、绝对定位元素、不是块盒子的块容器(如inline-blockstable-cellstable-captions),以及overflow属性的值除visible以外的块盒,将其内容建立新的块格式化上下文。

  • MDN上对BFC的描述:

    块格式化上下文(Block Formatting Context,BFC)Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

  • 更加通俗的描述:
    1. BFCBlock Formatting Context(块级格式上下文),可以理解成元素的一个"特异功能"
    2. "特异功能",在默认的情况下处于关闭状态;当元素满足了某些条件后,该"特异功能"被激活。
    3. 所谓激活"特异功能",专业点说就是:该元素创建了BFC(又称:开启了BFC)。

开启了BFC能解决什么问题

  1. 元素开启BFC后,其子元素不会再产生margin塌陷问题。
  2. 元素开启BFC后,自己不会被其他浮动元素所覆盖。
  3. 元素开启BFC后,就算其子元素浮动,元素自身高度也不会塌陷。

如何开启BFC

  • 根元素
  • 浮动元素
  • 绝对定位、固定定位的元素
  • 行内块元素
  • 表格单元格:tabletheadtbodytfootthtdtrcaption
  • overflow的值不为visible的块元素
  • 伸缩项目
  • 多列容器
  • column-spanall的元素(即使该元素没有包裹在多列容器中)
  • display的值,设置为flow-root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值