HTML5+CSS3及flex布局学习笔记
HTML5 它与HTML4又有哪些区别?
- 什么是HTML5
- HTML新版本, 它继承了原先HTML的部分特征, 添加了许多新的语法特征, 如语义特性、本地存储特性、设备兼容性、连接特性、网页多媒体特性等.
-
与HTML4的区别
- 增加了与结构相关的元素, 使得文档结构更加清晰, 结构更加语义化
-
HTML4在Web应用程序的功能受限制, 比如: 不允许同时上传多个文件, HTML5提供了英语程序使用的API ( 解决:
<input type="file" multiple>) - DOCTYPE声明变化:
- HTML4中需要指明是HTML的哪个版本, 而HTML5不需要, 只需
<!DOCTYPE html>即可.
- HTML4中需要指明是HTML的哪个版本, 而HTML5不需要, 只需
- 指定字符编码变化
- HTML4:
<meta http-equiv="content-type" content="text/html;charser=UTF-8"> - HTML5:
<meta charset="utf-8">
- HTML4:
- 新增的元素和废除的元素
- 新增结构元素: section、header、footer等
- 新增其他元素: video、audio、canvas等
- input元素类型: email、url、number、range等
- 废除的元素: basefont、font、center、frame等
- 不再使用frame框架: 如frameset、frame等
- HTML5的优势
- 实时更新
- 离线缓存
- 跨平台
- 视频和音频支持
HTML5常用的语义化和结构元素
结构元素
-
header标签: 通常被放置在页面或者页面中某个区块元素的顶部, 用来介绍内容或者当做导航链接栏, 在一个文档中, 您可以定义多个
<header>元素. -
nav标签: 通常表示页面的导航 , 常放在header里
-
main标签: 文档注意内容
-
article标签: 使用在相对比较独立、完整的内容模块, 一般使用在博客、论坛帖子、新闻报道、用户评论
-
section标签: 一般用来做内容的分组, 比如文章的章节
-
aside标签: 包含的内容不是页面的主要内容、具有独立性, 是对页面的补充
<aside>标签一般使用在页面、文章的侧边栏、广告、友情链接等区域. -
footer标签: 一般放在页面或页面中某个区块的底部, 包含版权信息、联系方式等.


其他元素
- ruby标签: 定义ruby注释(中文或字符)
- 将
<ruby>标签与<rt>和<rp>标签一起使用. <rp>标签可选, 该标签定义的是当浏览器不支持”ruby元素”时显示的内容.
- 将
- progress标签: 定义进度条
- mark标签: 用来标记文本
- embed标签: 用来嵌入指定的内容, 比如插件、图片、音视频
<!--100行代码演示本节内容-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
header {
width: 1200px;
margin: 0 auto;
}
header img {
display:inline-block;/* 行内块级元素 */
width: 200px;
vertical-align: middle;/* 文档格式内容: 居中 */
}
header nav {
display: inline-block;
margin-left: 100px;
}
article {
float: left;
width: 780px;
border: 1px solid #000;
}
aside {
float: right;
width: 400px;
border: 1px solid #000;
}
main {
overflow: hidden;/* 消除浮动 */
}
footer {
text-align: center;
}
embed {
display: inline-block;
vertical-align: middle;
width: 200px;
}
</style>
</head>
<body>
<header>
<img src="./img/小滴logo.png" alt="logo">
<nav>
<a href="">html5</a>
<a href="">css3</a>
<a href="">js</a>
</nav>
</header>
<main>
<article>
<h1>html5+css3</h1>
<p>html5+css3讲解</p>
<section>
<h4>html5</h4>
<p>html5是html的最新版本......</p>
</section>
<section>
<h4>css3</h4>
<p>css3新特性......</p>
</section>
</article>
<aside>
<h1>html5结构元素</h1>
<p>header、footer、section....</p>
<nav>
<ul>
<li><a href="">html5</a></li>
</ul>
<ul>
<li><a href="">css3</a></li>
</ul>
<ul>
<li><a href="">js</a></li>
</ul>
</nav>
</aside>
</main>
<footer>
<p>Copyright ©2019 小滴课堂</p>
</footer>
<!-- 演示ruby和rb,rt progress mark embed -->
<ruby>
小<rp>(</rp><rt>xiao</rt><rp>)</rp>
滴<rp>(</rp><rt>di</rt><rp>)</rp>
</ruby>
<!-- 当浏览器支持ruby标签时, 会以加注拼音的方式展示此内容,
当不支持ruby时, 显示: 小 (xiao) 滴 (di) -->
<progress max="100" value="50"></progress>
<p><mark>html5</mark>是html的最新版本</p>
<embed src="./img/小滴logo.png" type=""><!-- 可嵌入 图片 gif 音视频 插件等 -->
</body>
</html>
HTML5图形绘画标签canvas
- canvas定义
- canvas标签用来定义图形, 是一个图形容器, 常常用来进行绘图操作, 要与js搭配使用.
-
创建一个画布容器
-
with, height定义画布容器大小
<canvas id="myCanvas" width="500px" height="400px" style="border: 1px solid #000;"></canvas>
-
-
canvas本身没有绘图能力, 绘图操作要在js里进行
-
通过js获取canvas元素对象
//获取canvas元素 var canvas = document.getElementById("myCanvas"); -
创建context对象, context对象拥有多种绘制方法, 一般通过调用获取的canvas元素对象下的方法getContext来创建.
//获取canvas上下文 var ctx = canvas.getContext("2d"); //暂不支持3d -
实例线条
//开始一段路径 ctx.beginPath(); ctx.lineWidth = 7;//设置线宽 //将画笔指定初始坐标点 ctx.moveTo(100,100); //添加一个点, 画一条线条到这个点 ctx.lineTo(300, 100);//现在画笔在这个点 ctx.lineTo(100, 200);//现在画笔在这个点 //ctx.lineTo(100, 100);//回到起点,视图闭合图形, 但这种闭合方式闭合不完美,会有缺口 //关闭路径, 闭合从起始坐标点到结束坐标点的路径 ctx.closePath(); //进行绘制操作 ctx.stroke(); -
实例矩形
- rect(x, y, width, height)
- x, y 分别为矩形左上角横纵坐标点
- width, height为矩形的宽高
//开始一条路径 ctx.beginPath(); //创建矩形 ctx.rect(100,100,200,200); //填充颜色 ctx.fillStyle = "red"; ctx.fill(); //执行填充 //执行绘制 ctx.stroke(); - rect(x, y, width, height)
-
实例圆形
- arc(x, y, r, sAngle, eAngle, counterclockwise)方法创建弧/曲线
- x, y分别为圆的中心的横纵坐标
- r为圆的半径
- sAngle 起始角, 以弧度计. (弧的圆形的三点钟位置是0度)
- eAngle 结束角, 以弧度计.
- counterclockwise 可选, 规定顺时针还是逆时针绘图. false为顺时针, true为逆时针
//开始一条路径 ctx.beginPath(); //创建圆形 ctx.arc(100, 100, 50, 0, 2 * Math.PI); //逆时针创建弧 // ctx.arc(100, 100, 50, 0, 1.5 * Math.PI, true); //顺时针创建弧---默认顺时针 // ctx.arc(100, 100, 50, 0, 1.5 * Math.PI, false); //执行绘制 ctx.stroke(); - arc(x, y, r, sAngle, eAngle, counterclockwise)方法创建弧/曲线
-
HTML5矢量图形SVG
- 什么是SVG
- SVG指可伸缩矢量图形
- SVG用于定义用于网格的基于矢量的图形
- SVG是一种基于XML语法的图形格式
- SVG图形在放大的情况下图形不会失真
- SVG的优点
- SVG是可伸缩的
- 文件体积较小
- 可无限放大且不会失真
-
SVG代码可直接插入网页, 示例:
<!-- svg标签可指定画布大小 --> <svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" width="300" height="200"> <!-- circle是画圆标签 cx是图形向右偏移的距离, cy是向下偏移的距离 r是圆的半径 fill是填充颜色 --> <circle cx="150" cy="100" r="80" fill="green" /> </svg> -
SVG代码也可以写在一个独立文件中, 然后
<img>、<object>、<embed>、<iframe>等标签插入网页<img src="./img/music.svg" alt=""> -
CSS也可以使用SVG文件
<style> .music { display: inline-block; width: 50px; height: 50px; background: url("./img/music.svg"); background-size: 50px; } </style> <body> <!-- svg也可作为背景图 --> <div class="music"></div> </body>
HTML5媒体播放常用标签
-
video标签-视频播放
示例:
<!-- 引入视频 controls是显示视频控制栏 autoplay是自动播放 muted是设置静音(Chrome和Eage自由在静音模式才可以自动播放) --> <video src="./assets/1.mp4" width="500" height="400" controls autoplay="autoplay" muted></video>-
video标签可选属性:
-
autoplay : 自动播放, 视频就绪后马上播放.
-
controls : 显示控件
-
width : 视频播放器的宽度
-
height : 视频播放器的高度
-
loop : 循环播放
-
muted : 视频静音
-
poster : 视频下载时显示的封面图, 用户点击播放时隐藏
<!-- loop是设置循环播放 poster是为视频设置封面,当用户点击播放后隐藏 --> <video src="./assets/1.mp4" width="500" height="400" controls loop poster="./img/小滴logo.png"></video> -
preload : 三个值
-
auto 页面加载, 开始加载音视频
-
metadata 页面加载后仅加载音视频的元数据
-
none 页面加载后不加载音视频, 点击播放后才加载
<!-- preload有三个值 auto metadata none 前两个直观地看不出区别都会加载视频, 而none则是在点击播放后才开始加载视频 --> <video src="./assets/1.mp4" width="500" height="400" controls preload="auto"></video>
-
-
src : 视频的路径
-
-
video支持三种视频格式: mp4、webm、ogg
-
video元素支持多个
<source>元素,<source>元素可以链接不同的视频文件, 浏览器会使用第一个可识别的格式<!-- video下指定多个source 浏览器会从上往下识别source, 会显示第一个识别成功的source --> <video width="500" height="400" controls> <source src="1.ogg" type="video/ogg"> <source src="./assets/1.mp4" type="video/mp4"> </video>
-
-
audio标签-音频播放
示例:
<audio src="./assets/2.mp3" controls></audio>- 支持三种音频格式: mp3、ogg、wav
- audio标签可选属性: controls、loop、muted、preload、src (参数说明同上)
<!-- 友好提示处理 -->
<audio controls>
<source src="hourse.ogg" type="audio/ogg">
<source src="./assets/2.mp3" type="audio/mpeg">
您的浏览器不支持audio元素
</audio>
HTML5新增input类型
-
说在开头, 除
number和url外, 其他属性不建议用, 有更好的替代方案 -
新增的输入类型
- color类型: 选色器
- date类型: 日期选择器
- datetime-local类型: 选择一个日期和时间
- email类型输入格式为email模式, 自动验证输入值是否为email (替代方案是js和正则表达式)
- month类型选择一个月份
- number类型规定输入值为数字 ( 仍然是一个输入框 )
- max规定允许的最大值
- min规定允许的最小值
- step规定每一段数字间隔 ( 有上下箭头可以改变数字大小 )
- range类型包含一定范围内数字值的输入域 ( 变成了一个可拖动的条 )
- max规定允许的最大值
- min规定允许的最小值
- step规定每一段数字间隔
- search类型用于搜索域
- time类型选择一个时间
- url类型规定输入值为url格式
- week选择周和年
<!-- 示例 -->
<input type="range">
<!-- 部分属性需在提交时才触发验证 url email -->
<form action="">
<input type="url" name="url">
<input type="submit" value="提交">
</form>
HTML5常用的表单属性
-
autocomplete属性: 该属性规定form或input域是否有自动完成功能, 当用户在输入域输入时提示之前输入的内容选项.
- 注意: 该属性适用于
<form>标签, 以及以下<input>标签: text, search, url, tel, email, password, datepickers, range以及color.
<!-- autocomplete设在form上则对整个表单生效, 设在在单个input上则对单个input生效 --> <form action="" autocomplete="on"> 用户名<input type="text" name="username"> 邮箱<input type="email" name="email" autocomplete="off"> <input type="submit" value="提交"> </form> - 注意: 该属性适用于
- autofocus属性: 该属性规定在页面加载时, 该input框自动获得焦点
- width和height属性: 设置宽高
- 注意: 该属性只适用于image类型的input标签.
- multiple属性: 规定
<input>元素可选择多个值- 注意: 该属性适用于email和file类型, 提交多个邮箱时用逗号隔开.
-
pattern属性: 使用一个正则表达式用于验证input框的值
- 注意: 该属性适用于以下类型的
<input>标签: text, search, url, tel, email和password
<form action="" autocomplete="on"> <!-- 限制了用户名输入, 只可以是英文大小写且必须是3位 --> 用户名<input type="text" name="username" pattern="[A-Za-z]{3}"> <input type="submit" value="提交"> </form> - 注意: 该属性适用于以下类型的
-
placeholder属性: 该属性给输入框提供输入提示
-
注意: 该属性适用于以下类型的
<input>标签: text, search, url, tel, email以及password<input type="text" name="username" placeholder="请输入用户名">
-
-
required属性: 表示输入框必须填写, 不能为空
-
注意: 该属性适用于以下类型的
<input>标签: text, search, url, tel, email, password, datepickers, number, checkbox, radio以及file<input type="text" name="username" required>
-
部分正则表达式—我使用过的
-
断言
断言(正则表达式内容的局部)内容丰富, 仅将边界类做展示(更详细参考MDN)
字符 含义 ^ 匹配输入的开头
比如/^A/匹配不了 “an A” 里面的 “A”,但是可以匹配 “An A” 里面第一个 “A”。$ 匹配输入的结束
比如/t$/不能匹配 “eater” 中的 “t”,但是可以匹配 “eat” 中的 “t”。\b 匹配一个单词的边界 比如:
/\bm/ 在”moon”中匹配到”m”
/oo\b/ 在”moon”中不会匹配到”oo”, 因为oo后面紧跟单词字符”n”而不是边界\B 匹配非单词边界
/\Bon/ 在”at noon”中匹配”on”, /ye\B/在”possibly yesterday”中匹配”ye” -
其他正则表达式
部分
字符 含义 \ 转义 * 匹配前一个表达式0次或多次 + 匹配前一个表达式1次或多次 ? 匹配前一个表达式0次或1次 . 默认匹配换行符之外的任何单个字符 /.n/将会匹配 “nay, an apple is on the tree” 中的 ‘an’ 和 ‘on’,但是不会匹配 ‘nay’{n,} n是一个正整数, 匹配前一个字符至少出现n次
/a{2,}/ 匹配 “aa”, “aaaa” 和 “aaaaa” 但是不匹配 “a”{n,m} 匹配前面字符至少出现n此, 最多m次. 如果 n 或者 m 的值是0, 这个值被忽略。
/a{1, 3}/匹配“candy”中的a, 匹配”caaaaaaandy“时,匹配的值是“aaa”[xyz] 匹配[]中的任意字符, 可以使用 - 来指定字符范围
[abcd] 和[a-d]是一样的, 他们都匹配”brisket”中的‘b’[^xyz] 反向字符集, 匹配任何没有包含在方括号中的字符 \n 匹配一个换行符 \s 匹配一个空白字符 包括空格、制表符、换页符和换行符 \S 匹配一个非空白字符 \0 匹配NULL字符 -
正则表达式标志(部分)
标志 描述 g 全局搜索 i 不区分大小写搜索 m 多行搜索
-
-
使用正则表达式
var myRe = /d(b+)d/g; var myArray = myRe.exec("cdddbbdsbz"); //或者 var myArray = /d(b+)d/g.exec("cdbbdbsbz"); //还可以 var myRe = new RegExp("d(b+)d","g") var myArray = myRe.exec("cdbbdbsbz"); -
正则表达式多组合使用, 例如上一节中:
<input type="text" name="username" pattern="[A-Za-z]{3}"> <!-- 这里的正则表达式匹配 任意英文大小写字符的3位 -->
HTML5必备知识点之Web本地存储
- 什么是HTML5web存储?
- HTML5web存储可以在本地储存用户的浏览数据. web存储相对cookie更加的安全与快速, 它的数据不会保存在服务器上. 他也可以存储大量的数据, 而不影响网站的性能.
-
客户端储存数据之localStorage
- 用于长久保存网站的数据, 保存的数据没有过期时间, 可手动删除(通过api删除, 或在控制台删除)
- 常用API如下:
- 保存数据: localStorage.setItem(key,value);
- 读取数据: localStorage.getItem(key);
- 删除单个数据: localStorage.removeItem(key);
- 删除所有数据: localStorage.clear();
- 得到某个索引的key: localStorage.key(index);
- 提示: 键/值对通常以字符串储存
//通过键值对的方式添加存储--这样存储似乎更简单直白 localStorage.username = "eric"; localStorage.tel = 12345678910; //使用API保存数据 localStorage.setItem("mail","xiaodi@qq.com") //获取数据 var name = localStorage.getItem("email"); //删除单个数据 localStorage.removeItem("username") //删除所有数据 localStorage.clear() //获取某个索引的key var key = localStorage.key(0) //username //键值对以字符串形式保存, 如果需进行运算需转换 var tel = localStorage.getItem("tel") console.log(Number(tel)+1); - 客户端储存数据之sessionStorage
- sessionStorage储存的数据在用户关闭浏览器窗口后, 数据会被删除
- API和localStorage相同
-
cookie, localStorage以及sessionStorage的区别
- 共同点: 都是保存在浏览器端, 且都是同源共享的.
- 同源共享: 同协议, 同域名 , 同端口, 同主机 下资源共享
- 区别:
- cookie数据会在浏览器和服务器之间进行传递, 每次http请求都会携带cookie, 而sessionStorage和localStorage仅在客户端保存, 不参与服务器通信.
- 存储大小限制不同, cookie数据不能超过4K, sessionStorage和localStorage大小一般是5M.
- 数据的周期时间不同, cookie数据在设置的过期时间内一直有效, sessionStorage数据会在当前浏览器窗口关闭时清除, localStorage数据则始终存在, 即使关闭浏览器或窗口也不会清除, 直到手动清除数据.
- cookie相比其他两个安全性不高, 容易被拦截获取
- 共同点: 都是保存在浏览器端, 且都是同源共享的.
CSS3新增选择器
- el1~el2 匹配element1元素之后的每一个element2元素, 必须具有相同的父元素
<style>
h1~p {
color: red;
}
</style>
<!-- 将两个p元素文本设为红色 -->
<body>
<div>
<h1>hh</h1>
<p>ssss</p>
<p>ssss</p>
</div>
</body>
-
[attribute^=value] 匹配元素属性值以指定value值开头的元素
attribute不仅限于class, 还可以是src url等
<style>
div[class^="test"] {
background-color: blue;
}
</style>
<!-- 更改.test111的背景色 -->
<body>
<div class="test1111">
<h1>hh</h1>
<p>ssss</p>
<p>ssss</p>
</div>
</body>
- [attribute$=value] 匹配元素属性值以指定vlaue值结尾的元素
-
[attribute*=value] 匹配元素属性值包含指定value值的元素
-
el:first-of-type 匹配的el元素是其父元素的第一个子元素
<style> p:first-of-type { color: blue; } </style> <body> <div class="test1111"> <h1>hh</h1> <p>ssss</p> <!-- 会变蓝色 --> <p>aaaa</p> </div> <div> <p>lslsls</p> <!-- 会变蓝色 --> <p>ababba</p> </div> </body> -
el:last-of-type 匹配的el元素是其父元素的最好一个子元素
-
el:only-of-type 匹配的el元素是其父元素唯一的子el元素(父元素下可以有除el元素外的其他元素)
-
el:only-child 匹配属于父元素中唯一子元素的el元素(父元素中有且仅有一个元素,那就是el元素)
-
el:nth-child(n) 匹配父元素中第n个子元素, 如果这个子元素不是el元素则不生效
-
n可以是数字, 关键字或公式
<style> p:nth-child(2) { color: aqua; } </style> <body> <div class="test1111"> <h1>hh</h1> <p>ssss</p> <!--会匹配到这个, 如果不是p标签, 则不会生效--> <h2>1122112</h2> <p>aaaa</p> </div> </body>
-
- el:nth-last-child(n) 匹配父元素中的倒数第n个子元素, 子元素不是el元素则不生效
- n可以是数字, 关键字或公式
-
el:nth-last-of-type(n) 匹配父元素中同类型的倒数第n个子元素
-
n可以是数字, 关键字或公式
<style> p:nth-last-of-type(2) { color: aqua; } </style> <body> <div class="test1111"> <h1>hh</h1> <p>ssss</p> <!--会匹配到这个--> <h2>1122112</h2> <p>aaaa</p> </div> </body>
-
-
el:last-child 匹配父元素中最后一个子元素
-
:root 匹配文档的根元素, 该选择器等同于html (html文档的根元素就是html)
-
el:empty 匹配每个没有任何子级的元素(包括文本内容)
-
<p>ooo</p> <!--不会被匹配到, 因为内含文本内容--> <p></p> <!--会被匹配到-->
-
-
:target 匹配当前活动的target元素的样式
<style> :target { background: yellow; } </style> <body> <a href="#html5">html5</a> <a href="#css3">css3</a> <div id="html5">kssksksk</div> <div id="css3">kssksksk</div> </body> <!--当点击html5链接时, id为html5的div的背景色变为黄色, 同样点击css3....--> -
el:enabled 匹配每个启用的元素(主要用于表单元素)
-
el:disabled 匹配每个禁用的元素(主要用于表单元素)
<style> input[type="text"]:enabled { border: 1px solid red; } input[type="text"]:disabled { border: 1px solid blue; } </style> <body> <form action=""> <input type="text">用户名 <input type="text" disabled>密码 </form> </body> -
el:checked 匹配每个选中的输入元素(仅用于单选按钮或复选框)
<!--选中后变红--> <style> input:checked~span { color: red; } </style> <body> <form action=""> <!--用label将选框和span包裹起来,点击选框和span都可以触发选中--> <label><input type="radio" checked="checked" value="html5" name="test"><span>html5</span></label> <label><input type="radio" value="css3" name="test"><span>css3</span></label> </form> </body> - :not(selector) 匹配除了指定selector元素的其他元素(包括body)
- 如果你给body设置了color, 那么body下的元素将继承这个color, 除非你给body下的元素设置新的color, 说白了还是css的层叠特性
-
::selection 匹配被用户选中或处于高亮状态的元素
- 该选择器只可以应用于少数的css属性: color, background, cursor和outline
<style> ::selection{ color: green; } </style> <!--当鼠标选中AAAA时,AAAA变绿,这个选中就是指你复制粘贴时的那个选中 --> <body> <h1>AAAA</h1> </body> - el:out-of-range 匹配值在指定区间外的input元素
- 注意: 该选择器只作用于能设置指定区间之外值的元素, 例如input元素的min和max属性
-
el:in-range 匹配值在指定区间内的input元素
<style> input:out-of-range { border: 1px solid red; } input:in-range { border: 1px solid green; } </style> <!--输入的值在2~10内时边框为绿色,超出范围边框变红色--> <body> <input type="number" max="10" min="2" value="11"> </body> -
el:read-write 匹配可读及可写的元素
-
el:read-only 匹配设置了readonly属性的元素(只读)
<style> input:read-write { border: 1px solid red; } input:read-only { border: 1px solid blue; } </style> <body> <form action=""> <input type="text">用户名 <input type="text" readonly>密码 </form> </body> - el:optional 匹配可选的输入元素
- optional选择器只适用于表单元素: input、select和textarea
- el:required 匹配设置了required(必选/填)属性的元素
- required选择器只适用于表单元素: input、select和textarea
<style>
input:optional {
border: 1px solid yellow;
}
input:required {
border: 1px solid blue;
}
</style>
<body>
<form action="">
<input type="text">用户名
<input type="text" readonly>密码
</form>
</body>
- el:valid 匹配输入值为合法的元素
- **注意: ** :valid选择器只作用于能指定区间值的元素, 例如input元素中的min和max属性, 及正确的email字段, 合法的数字字段等.
-
el:invalid匹配输入值为非法的元素
<style> input:valid { border: 1px solid blue; } input:invalid { border: 1px solid red; } </style> <body> <form action=""> <input type="text">用户名 <input type="text" required>密码 <input type="email" name="" id=""> </form> </body>
CSS3新增的用户界面属性
- resize属性规定是否可以调整元素尺寸
- none 默认值 无法调整元素的尺寸
- both 可调整元素的高度和宽度
- horizontal 可调整元素的宽度
- vertical 可调整元素的高度
<!--示例-->
<style>
#resize {
resize: both;
}
#resize2 {
border: 1px solid red;
resize: both;
overflow: auto;/* div使用resize需设置border和overflow */
}
</style>
<body>
<textarea id="resize" cols="30" rows="10"></textarea>
<div id="resize2">1111</div>
</body>
-
box-sizing属性改变盒子模型的组成方式
以下是该属性的三个值:
-
content-box 默认值 padding和border不计入width和height内

-
border-box padding和border计入width和height内

-
inherit 继承父元素的box-sizing属性的值
-
-
outline-offset属性设置轮廓框架在border外边缘的偏移
outline和border有两点不同:
- outline不占空布局空间, 是在元素外
- outline可能是非矩形
<style>
.box {
box-sizing: border-box;
width: 100px;
height: 100px;
margin: 100px;
border: 1px solid #000;
padding: 10px;
outline: 2px solid red;
outline-offset: 10px;
}
</style>
<body>
<div class="box"></div>
</body>
-
浏览器兼容之前缀
.box{ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; /* -webkit- (谷歌,Safari,新版Opera浏览器,以及几乎所有iOS系统中的浏览器(包括 iOS 系统中的火狐浏览器);基本上所有基于WebKit 内核的浏览器) -moz- (火狐浏览器) -o- (旧版Opera浏览器) -ms- (IE浏览器 和 Edge浏览器) */ }
CSS3常用样式属性之边框与盒阴影
- CSS3圆角属性 border-radius: 被用于创建圆角
-
border-radius属性每个半径四个值的顺序分别是左上角, 右上角, 右下角, 左下角
-
可传的值如下:
-
length: 定义圆形半径或椭圆的半长轴、半短轴 . 负值无效.
-
percentage: 使用百分数定义圆形半径或椭圆的半长轴、半短轴. 水平半轴相对于盒子模型的宽度; 垂直半轴相对于盒子模型的高度. 负值无效.

<style> .radius { width: 300px; height: 300px; background: #ff0000; /*上左 上右 下右 下左*/ /* border-radius: 20px 10px 15px 5px; */ /* 百分比---50%画圆 这里相当于圆心在w150 h150 处为每一个角都画弧度, 4个圆的圆心重叠在一起了*/ border-radius: 50%; /* 如果传入了三个值, 对应规律是什么? */ /* border-radius: 10px 5px 15px; */ /* 左上角10px 右上角和左下角公用5px(对角公用) 右下角为15px */ } </style> <body> <div class="radius"></div> </body> -
/ 斜杠分隔写法, 斜杠左边的值为水平半轴, 右边值为垂直半轴

<style> .radius { width: 300px; height: 500px; background-color: red; border-radius: 150px/250px; /* 缩写,其完整的写法为border-radius: 150px 150px 150px 150px/250px 250px 250px ; */ } </style> <body> <div class="radius2"></div> </body>
-
-
-
**CSS3盒阴影属性box-shadow: ** 被用来添加阴影
box-shadow: h-shadow v-shadow blur spread color inet;-
h-shadow: 必选, 水平阴影的位置. 允许负值(正值向右负值向左)
-
v-shadow: 必选, 垂直阴影的位置. 允许负值(正值向下负值向上)
-
blur: 可选, 阴影模糊距离
-
spread: 可选, 阴影的大小
-
color: 可选, 阴影的颜色
-
inset: 可选, 让阴影向内扩散
<style> .shadow { width: 300px; height: 500px; border: 1px solid red; box-shadow: 5px 5px 5px 5px red; } </style> <body> <div class="shadow"></div> </body>
-
-
CSS3图片边框属性border-image: 指定一个图片作为边框
border-image: border-image-source border-image-slice / border-image-width border-image-outset border-image-repeat-
border-image-source: 边框图片的资源路径
-
border-image-slice: 切割图片, [
| ] - 值可以简写, 如果写满四个值的话, 分别对应下图中的 上 右 下 左 四条红切割线
-
border-image-width: 图像边界的宽度[
| | |auto] lenth 带 px, em, in ... 单位的尺寸值 percentage 百分比 number 不带单位的数字; 它表示border-width 的倍数 auto 使用auto, border-image-width 将会使用 border-image-slice 的值 /*示例 border-image-width 和 border-image-outset 都需要在前面加 / 来隔开其他属性 */ border: 15px solid transparent; border-image: url(./img/border.png) 27 27 27 27 /20px round; /*因为边框大小被设置成了15px,图形边界被设为了20px,因此会有5px的图形移到边框之内*/ - border-image-outset: 定义边框图像向外偏移的宽度(
| ) - border-image-repeat: 用于设置图像边界是否应重复 (repeat)、拉伸(stretch)或铺满(round)
- repeat和round都会通过重复图像来填满空隙, 但round会智能地通过一定拉伸使得图像刚好填满空隙且不会出现图片断裂的情况, 而repeat只是简单地填充,可能会出现图片断裂的情况
- stretch会拉伸图片填满空隙
-

<style>
.borderImg {
width: 300px;
height: 200px;
border: 15px solid transparent;/* 要设置阴影大小且颜色为透明才能看到图片边框 */
/* 这里用到的图片尺寸是81*81 为了将每个小菱形切开,切割大小设为27 */
border-image: url(./img/border.png) 27 27 27 27 round;
}
</style>
<body>
<div class="borderImg">css3图片边框borderImg</div>
</body>
| 原图 | repeat | stretch | round |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
CSS3背景新特性及精灵图片的使用
-
background-image: 添加背景图片
-
可添加多个背景, 每张图片用 , 逗号隔开, 前面的图片会绘制在后面的图片之上
.backgroundImg { width: 300px; height: 200px; background-image: url(./img/border.png), url(./img/catfront.png); }
-
-
background-size: 设置背景图片的大小
-
可传的值如下:
<length> 值, 指定背景图片大小, 不能为负值. <percentage> 值, 指定背景图片相对背景区大小的百分比 <auto> 值, 以背景图片的比例缩放背景图片 <cover> 值, 缩放背景图片以完全覆盖背景区, 如果背景区大小和图片大小不是等比例会导致图片显示不全 <contain> 值, 按原有宽高比例缩放背景图片以完全装入背景区, 不保证图片完全覆盖背景区.backgroundImg { width: 300px; height: 200px; background-image: url(./img/border.png); background-repeat: no-repeat;/* 设置图片排列为不平铺 */ /* 如果图片大小超过了.backgroundImg这个div的宽高就会导致图片显示缺失,这时需要将图片大小设为和div一样大 */ background-size: 300px 200px; }
-
-
background-origin: 指定背景图片的位置
-
可传入的值如下
-
border-box: 背景图片的摆放对齐border区域
-
padding-box: 默认值 背景图片的摆放对齐padding区域
-
content-box: 背景图片的摆放对齐content区域
还记得盒子模型吗?

-
-
注意:
-
这个值只是图片摆放的参考, 而不会对图片裁剪, background-clip才会执行裁剪
比如设置:
.backgroundImg { width: 300px; height: 200px; padding: 20px; border: 10px; background-image: url(./img/border.png); background-repeat: no-repeat; background-size: cover; background-origin: content-box; } /*图片在下边仍然会显示到padding区域*/

-
当使用
background-attachment为fixed时, 该属性被忽略不起作用.
-
-
-
background-clip: 指定从哪个位置开始绘制
-
可传的值如下
border-box: 默认值, 背景延伸至边框外沿(但是在边框下层) padding-box: 背景延伸至内边距(padding)外沿, 不会绘制到边框处. content-box: 背景被裁剪至内容区(content box)外沿.
-
-
精灵图片
-
指的是裁剪图片的某一部分作为背景
<style> .sprite { /* 裁剪border中的一个黄色菱形 */ width: 27px; height: 27px; background-image: url(./img/border.png); background-repeat: no-repeat; /* 图片向左水平偏移27px */ background-position: -27px 0; } </style> <body> <div class="sprite"></div> </body>

-
CSS3渐变背景
-
线性渐变 (linear-gradient)
-
标准语法:
background: linear-gradient(direction, color-stop1, color-stop2, ...);
-
direction: 渐变的方向, 默认情况是从上到下
-
标准语法方向是渐变的末尾位置, 其他浏览器前缀语法则是渐变的起始位置
-
注意: 标准语法要放在其他浏览器语法后面
.linearGradient { width:300px; height:200px; /*前缀写法 10% 和50% 表示渐变开始的位置*/ background: -webkit-linear-gradient(top,red 10%,blue 50%, yellow); /*标准写法*/ background: linear-gradient(to bottom,red 10%,blue 50%, yellow); /*从右上角渐变到左下角*/ background: linear-gradient(to left bottom,red 10%,blue 50%, yellow); }-
角度渐变: 标准语法中0度指向北, 其他浏览器前缀语法0度则指向东
换算公式: 90 - 标准语法角度 = 其他浏览器前缀语法角度 写法: .linearGradient{ background: linear-gradient(90deg,red 10%,blue 50%, yellow); }
-
-

3. 重复的线性渐变: repeating-linear-gradient()
background: repeating-linear-gradient(45deg, yellow,red 10%,blue 20%)

-
径向渐变 (radial-gradient)
background: radial-gradient(shape size at position, start-color, ..., last-color);值 描述 shape 确定圆的类型:
ellipse(默认): 指定椭圆形的径向渐变
circle: 指定圆形的径向渐变size 定义渐变的大小, 可能值:
farthest-corner(默认):指定径向渐变的半径长度为从圆心到离圆心最远的角
closest-side: 指定径向渐变的半径长度为从圆心到离圆心最近的边
closest-corner: 指定径向渐变的半径长度为从圆心到离圆心最近的角
farthest-side: 指定径向渐变的半径长度为从圆心到离圆心最远的边position 定义渐变的位置. 可能值:
center (默认): 设置中间为径向渐变圆心的纵坐标值.
top : 设置顶部为径向渐变圆心的纵坐标值.
bottom : 设置底部为径向渐变圆心的纵坐标值.start-color,…,last-color 用于指定渐变的起止颜色. -
重复径向渐变: repeating-radial-gradient()
.radialGradient { width:300px; height: 200px; background: repeating-radial-gradient(red,yellow 10%,blue 20%) }
-
CSS3文本效果及特殊字体引入
-
text-shadow: 给文本添加阴影效果
text-shadow: h-shadow v-shadow blur color;对应值描述如下:
值 描述 h-shadow 必需, 水平阴影的位置. 允许负值. v-shadow 必需, 垂直阴影的位置. 允许负值 blur 可选, 模糊的距离 color 可选, 阴影的颜色 -
text-overflow: 指定当文本溢出包含它的元素的形式
text-overflow: clip | ellipsis | string;对应值描述如下:
值 描述 clip 修剪文本 ellipsis 显示省略符号来代表被修剪的文本 string 使用给定的字符串来代表被修剪的文本(只在firefox有效) <style> .textOverflow { width: 100px; overflow: hidden; white-space: nowrap;/* 不允许文本自行换行 */ text-overflow: ellipsis; } </style> <body> <div class="textOverflow">css3文本溢出sdadsdsaddasda</div> </body> -
word-wrap: 属性允许内容在过长情况下可以自动换行.
word-wrap: normal | break-word;对应值描述如下:
值 描述 normal 只在允许的断字点(单词结尾)换行 (浏览器保持默认处理) (如果一个单词的长度超出的包含它的元素, 那么仍然会发生溢出) break-word 在长单词或URL地址内部进行换行. -
word-break: 指定内容的断行规则.
word-break: normal | break-all | keep-all;对应值如下:
值 描述 normal 使用浏览器默认的换行规则 break-all 允许在单词内换行 keep-all 只能在半角空格或连字符处换行. 比如”this a 啊哈哈ssword”中”啊哈哈ssword”被视为一个单词不会换行. -
@font-face 规则: 定义自己的文本字体
首先定义字体的名称 (比如myFirstFont), 然后指向该字体文件
-
提示: URL请使用小写字母的字体, 大写字母在IE中产生意外的结果.
<style> @font-face { font-family: myFont; /* 字体文件有多种后缀, 引用多种是为了更好地浏览器兼容 */ src: url(./assets/Dexsar.otf), url(./assets/Dexsar.ttf); } .wordWrap { width:160px; word-break: keep-all; font-family: myFont; } </style> <body> <div class="wordWrap">ssladjasdadjadjad</div> </body>
-
CSS3的多列布局
-
column-count指定了需要分割的列数..colCount { /*如果不指定宽度,那么宽度默认就是浏览器整行的宽度. 这里的宽度不是每一列的宽度,是整体的宽度*/ width: 400px; -webkit-column-count: 3; -moz-column-count: 3; column-count: 3; } -
column-gap指定了列与列间的间隙{ width: 400px; -moz-column-gap: 40px; -webkit-column-gap: 40px; column-gap: 40px; } -
column-rule-style指定了列与列间的边框样式{ -webkit-column-rule-style: solid; -moz-cloumn-rule-style: solid; column-rule-style: solid; /*solid是实线 dotted是点点的样式 dashed是虚线 */ } -
column-rule-width指定了两列的边框厚度{ -webkit-column-rule-width: 1px; -moz-column-rule-width: 1px; column-rule-width: 1px; } -
column-rule-color指定了两列的边框颜色{ -webkit-column-rule-color: #ff0000; -moz-column-rule-color: #ff0000; column-rule-color: #ff0000; }
-
column-rule是column-rule-* 所有属性的简写(类似border){ -webkit-column-rule: 1px solid #ff0000; -moz-column-rule: 1px solid #ff0000; column-rule: 1px solid #ff0000; } -
column-width指定了列的宽度{ column-width: 100px; -moz-column-width: 100px; -webkit-column-width: 100px; }- 注意: 如果设置了column-count就不要再设置column-width了, 因为二者互相影响会导致不生效.
设备兼容必备知识之多媒体查询
-
使用多媒体查询可以在指定的设备上使用对应的样式替代原有的样式.
/*大于480px*/ @media screen and (min-width: 480px){ body{ background-color: red; } } /*大于960px小于1200px*/ @media screen and (min-width: 960px) and (max-width: 1200px){ body{ background: yellow; } }
CSS3之2D转换动画效果
transform属性下的函数
-
translate(x,y)平移
x为x轴上的平移, y为y轴上的平移
{ transform: translate(50px,100px); -ms-transform: translate(50px,100px); -webkit-transform: translate(50px,100px); }另外两种方法:
- translateX(x) 元素仅在水平方向位移
- translateY(y) 元素仅在垂直方向位移
注意: 当需要x,y两个方向平移的话就使用translate. 如果同时使用了translateX和translateY, 后使用的会覆盖前面使用的, 即二者不会同时生效.
-
rotate(angle) 旋转
正度数表示顺时针旋转, 负值则相反
{ transform: rotate(30deg); -ms-transform: rotate(30deg); -webkit-transform: rotate(30deg); } -
scale()缩放
scale()方法可以将元素根据中心原点进行缩放
{ -ms-transform: scale(2,3); -webkit-transform: scale(2,3); transform: scale(2,3); /* 缩放效果是width*2, height*3 */ }另外两种方法:
- scaleX(x)元素仅在水平方向上缩放(x轴缩放)
- scaleY(y)元素仅在垂直方向上缩放(y轴缩放)
-
skew()倾斜
**语法: **
transform:skew(<angle>,[,<angle>]);-
包含两个参数值, 分别表示X轴和Y轴倾斜的角度, 如果第二个参数为空, 则默认为0, 参数为负表示向相反方向倾斜.

{ transform: skew(30deg,20deg); -ms-transform: skew(30deg,20deg); -webkit-transform: skew(30deg,20deg); }- skewX(
) 表示只在X轴(水平方向)倾斜. - skewY(
) 表示只在Y轴(垂直方向)倾斜.
- skewX(
-
3D转换动画效果
-
translate3d(x,y,z) 定义3d转换

-
translateZ(z) 在z轴上的平移, z轴为面向屏幕的这个方向
-
perspective() 方法设置3d透视视图 (透视视图见下图解析), 它代表的是镜头距离content的距离
-
在父元素上加上transform-style: preserve-3d可修改元素层级

- 使用translateZ可以实现层级覆盖(类似z-index)
-
-
rotate 定义沿着X轴的3d旋转
{ transform: rotateX(180deg); -webkit-transform: rotateX(180deg); }
更直观的示例代码:
<style> .rotate { width: 100px; height: 100px; background: red; transition: all 2s; } .rotate:hover { transform: rotateX(180deg); } </style> <body> <div class="rotate">hello world </div> </body> -
rotateY 定义沿着Y轴的3d旋转
{ transform: rotateY(180deg); -webkit-transform: rotateY(180deg); }
CSS3之过渡实用技巧
css过渡是元素从一种样式逐渐改变为另一种的效果.
语法:
transition: property duration timing-function delay;
| 值 | 描述 |
|---|---|
| transition-property | 指定css属性的name.(比如,width,height) 即指明了为哪些属性生成过渡效果 |
| transition-duration | transition效果需要指定多少秒或毫秒完成 |
| transition-timing-function | 指定transition效果的转速曲线 |
| transition-delay | 定义transition效果开始的时间(即延时) |
案例
.test{
width:100px;
height:100px;
background:red;
transition:width 2s;
-webkit-transition:width 2s;
}
test:hover{
width:200px;
}
-
transition-property属性
值 描述 none 没有属性会获得过渡效果 all 所有属性都将会获得过渡效果 property 定义应用过渡效果的CSS属性名称列表, 列表以逗号分隔 -
transition-timing-function属性
值 描述 linear 规定以相同速度开始至结束的过渡效果 ease 默认值,规定慢速开始, 然后变快, 然后慢速结束的过渡效果 ease-in 规定以慢速开始的过渡效果 ease-out 规定以慢速结束的过渡效果 ease-in-out 规定以慢速开始和结束的过渡效果(中间变快不如ease明显)
CSS3之动画特效技能
-
CSS3 @keyframes规则
@keyframes规则内指定一个CSS样式和动画将逐步从目前的样式更改为新的样式.
- 与过渡的区别
- 过渡一定需要事件来触发而动画不需要.
- 过渡只能设置开始和结束两个状态, 而动画可以设置多个帧
语法:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;单个属性设置如下:
值 说明 animation-name 指定动画的名称 animation-duration 动画需要多少秒或毫秒完成 animation-timing-function 设置动画将如何完成一个周期 animation-delay 设置动画在启动前的延迟间隔 animation-iteration-count 定义动画的播放次数 animation-direction 指定是否应该轮流反向播放动画 animation-fill-mode 规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时), 要应该到元素的样式. animation-play-state 指定动画是否正在运行或已暂停 案例:
div{ width:100px; height:100px; background:red; animation:myAnimation 5s; } @keyframes myAnimation{ from {background:red;} to {background:yellow;} } /*动画不仅仅可以设置始末,还可以设置多个帧,如下*/ @keyframes myManyAnimation{ 0% {background:red;} 50% {background:yellow;} 100% {background:blue;} } - 与过渡的区别
-
过渡的速度曲线如下: (animation-timing-function)
值 描述 linear 动画从头到尾的速度是相同的 ease 默认, 动画以低速开始, 然后加快, 在结束前变慢 ease-in 动画以低速开始 ease-out 动画以低速结束 ease-in-out 动画以低速开始和结束 -
animation-delay 属性允许负值, 例如-2s 使动画马上开始, 但会跳过前面2秒的动画.
-
animation-iteration-count 传入数字表示播放多少次, 或者设置为 infinite(无限播放)
-
animation-direction 属性定义是否循环交替反向播放动画.
**注意: **如果动画被设置为只播放一次, 该属性将不起作用.
值 描述 normal 默认值. 动画按正常播放 reverse 动画反向播放 alternate 动画在奇数次正常播放, 在偶数次反向播放 alternate-reverse 动画在奇数次反向播放, 在偶数次正向播放 -
animation-fill-mode 属性
| 值 | 描述 |
|---|---|
| none | 默认值, 动画在执行前后不会应用动画中的任何样式到目标元素 |
| forwards | 在动画结束后(由animation-iteration-count决定), 动画结束时的样式将应用到目标元素 |
| backwards | 动画将应用在animation-delay定义期间启动动画的第一次迭代的关键帧中定义的属性值. 这些都是from关键帧中的值 (当animation-direction 为”normal”或”alternate”时) 或to关键帧中的值 (当animation-direction为”reverse”或”alternate-reverse”时). |
| both | 动画同时遵循forwards和backwards的规则. 也就是说, 动画会在两个方向上扩展动画属性. |
-
animation-play-state 属性
值 描述 paused 指定暂停动画 running 指定正在运行的动画 - 可以结合hover使用, 比如鼠标悬停时动画停止, 离开后动画继续
前端核心知识点之flex弹性布局
-
flex布局是什么?
Flex意思是弹性布局, 是css3中的新布局模块,用来为盒模型提供最大的灵活性. 可改进容器中的项目对齐方向和顺序, 即使他们具有动态甚至是未知大小. Flex容器能够调节子节点的宽度或高度, 以便适应不同的屏幕尺寸.
-
基本概念
flex布局可以将一个元素看成一个容器, 父元素下的子元素会自动成为子容器, 这样就构成一个flex项目.

容器存在两根轴: 水平的主轴( main axis )和垂直的交叉轴( cross axis ). 主轴开始的位置叫做main start, 结束位置叫做main end; 交叉轴的开始位置叫做cross start, 结束位置叫做cross end. 单个项目占据的主轴空间叫做main size, 占据的交叉轴空间叫做cross size.
-
用法
==使用flex布局, 需在父元素上设置display属性==
.flexTest{ display: -webkit-flex; display: flex; }或者将其显示为行内元素
.flexTest{ display: -webkit-inline-flex; display: inline-flex; }- 注意
- 设置flex布局后, 子元素的float、clear和vertical-align属性将失效.
- 注意
flex布局容器六大属性之flex-direction
-
flex-direction属性决定主轴方向
值 描述 row 默认值, 主轴为水平方向, 起点在左边 row-reverse 主轴为水平方向, 起点在右边 column 主轴为垂直方向, 起点在上面 column-reverse 主轴为垂直方向, 起点在下面 <style> .flexTest { display: flex; flex-direction: row; } .item { width: 100px; height: 100px; margin: 10px; background: #c3c3c3; } </style> <body> <div class="flexTest"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> <div class="item">4</div> </div> </body>



flex布局容器六大属性之flex-wrap和flex-flow
<!--示例代码-->
<style>
.flexTest {
display: flex;
width: 300px;
flex-wrap: nowrap;
}
/*因为指定了父容器宽度, 当所有子容器的宽度超出父容器宽度时, 子容器宽度会被改变以适配父容器(即设置的子容器宽度可能会失效),如下表*/
.item {
width: 100px;
height: 100px;
margin: 10px;
background: #c3c3c3;
}
</style>
<body>
<div class="flexTest">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
</body>
-
flex-wrap属性设置子项目的换行方式
值 描述 示例图 nowrap 默认值, 不换行 
wrap 换行, 从上往下排列, 第一行在上方 
wrap-reverse 换行, 从下往上排列, 第一行在下方 
-
有时你会发现设置换行后行与行之间间隙太大了, 比如:

-
解决方法是为父元素添加属性: align-content: flex-start; 效果如下:

-
-
-
flex-flow 属性是flex-direction属性和flex-wrap属性的简写方式, 默认值是 row nowrap.
语法:
flex-flow: <flex-direction> || <flex-wrap> ;
flex布局容器六大属性之justify-content—做水平居中
-
justify-content属性设置子项目在主轴上的对齐方式
值 描述 示例图 flex-start 默认值, 左对齐 flex-end 右对齐 center 居中 space-between 两段对齐, 子项目之间间隔一样 
space-around 每个子项目两侧的间隔一样 
flex布局容器六大属性之align-items—做垂直居中
-
align-items属性规定子项目在交叉轴上的对齐方式
值 描述 flex-start 交叉轴的起点对齐 
flex-end 交叉轴的终点对齐 
center 交叉轴的中点对齐—做垂直居中很好 
baseline 以子项目的第一行文字为基线对齐 
stretch 默认值, 如果项目未设置固定高度, 子项目将占满整个容器的高度 
flex布局容器六大属性之align-content
-
align-content多行情况下的对齐方式, 类似justify-content的对齐方式
值 描述 flex-start 与交叉轴的起点对齐 
flex-end 与交叉轴的终点对齐 
center 与交叉轴的中点对齐 
space-between 与交叉轴的两端对齐, 每行之间间隔一样 
space-around 每行上下的间隔一样 
stretch 默认值, 占满整个空间, 每行下方会留一点空白
如果不固定子容器宽度, 子容器会占满空间: 
flex布局项目六大属性之order和flex-grow
-
order属性规定子容器 (项目) 的排列顺序. 数值越小越靠前, 默认为0, 支持负数
.item{ order:<integer> }
-
flex-grow 属性规定子容器的放大比例, 默认为0, 剩余空间不足时则不会放大. 设置此属性后, width和height属性失效
.item{ flex-grow:<number> }如果子容器的flex-grow属性都为1, 则等分剩余空间

flex布局项目六大属性之flex-shrink
-
flex-shrink属性规定了子容器的缩小比例, 默认值为1, 如果空间不足, 该子容器将缩小.
.item{ flex-shrink: <number> }如果子容器的flex-shrink属性都为1, 当空间不足时, 都将等比例缩小
值设为0,则表示不会缩小
-
计算示例:
<style> .flexTest{ display: flex; width: 600px; } .item{ width: 100px; height: 100px; margin:10px; background: #c3c3c3; } .item2, .item3 { flex-shrink: 2; } </style> <body> <div class="flexTest"> <div class="item item1">1</div> <div class="item item2">2</div> <div class="item item3">3</div> <div class="item item4">4</div> <div class="item item5">5</div> <div class="item item6">6</div> </div> </body> <!-- 父容器宽度为600px, 刚好可以放下5个子容器, 但现在有6个, 那么就是超出了一个子容器,这个子容器有宽高和margin,一共超出了120px, 这120px需要缩放进来, 默认情况下: 1+1+1+1+1+1=6 120/6=20px 也就是说每个子容器都要缩小20px. 但是, item2和item3的flex-shrink值为2, 计算方式应该是: 1+2+2+1+1+1=8 120/8=15px, item2和item3缩小30px, 其他item缩小15px.-->
flex布局项目六大属性之flex-basis和flex
- flex-basis属性可修改子容器占据的主轴空间大小. 默认值为auto, 即子容器的本来大小
.item{
flex-basis:<length> | auto;
}
-
如果同时设置width和flex-basis, 会以flex-basis为主, 即flex-basis优先权更高.(flex-shrink缩放时也会以flex-basis为主)
所以, 如果希望设置每个项目的宽度时, 应使用flex-basis而非width
-
flex属性是 flex-grow, flex-shrink和flex-basis的简写, 默认值是 0 1 auto, 后两个属性可选
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }该属性设置为 auto等同于 ( 1 1 auto ) , none等同于( 0 0 auto )
**提示: ** 最好优先使用这个属性, 而不是单独写三个分离的属性, 因为浏览器会推算相关值.
flex布局项目六大属性之align-self
-
align-self属性允许单个子容器与其他子容器有不一样的对齐方式, 可覆盖align-items属性. 默认值为auto, 表示继承父元素的align-items属性.
.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; }如果设置baseline时需要注意: 单独为一个item设置是不生效的, 至少需要为两个item设置才生效.

伪类
/* 运用伪类添加一个 ¥ */
/* 相当于在.strong的前面添加了一个div */
.guessItem .price .strong::before {
/* 添加的内容 */
content: '\A5';
/* 为添加的内容设置样式 */
font-size: 14px;
color: #ff0000;
margin-right: 3px;
}
/* 同样的, 除了before还有after */
HTML5和CSS3常用知识总结
-
CSS实现垂直水平居中
-
水平居中
1. 内联元素 text-align: center 2. 块级元素 margin left和right设置auto margin: 0 auto 3. 利用flex布局的justify-content: center 在主轴上水平居中 -
垂直居中
-
将height和line-height设为相同值使元素垂直居中
-
利用vertical-align: middle 实现子元素的垂直居中
-
利用flex布局的 flex-direction: column; 和 justify-content: center; 实现垂直居中
-
绝对定位 position: absolute
-
已知元素高度:
.parent { position: relative; } .child { position: absolute; top: 50%; height: 100px; margin-top: -50px; } /* 先距离父元素底部50%,在上移自身高度的一半, 从而实现垂直居中 */ -
未知元素高度
.parent { position: relative; } .child { position: absolute; top: 50%; transform: translateY(-50%); }
-
-
-
-
解释css sprites, 如何使用
css精灵把一堆小的图片合并成一张图片, 减轻服务器对图片的请求数据, 应用background-position对图片进行截取 -
CSS3有哪些新特性?
css3实现圆角(border-radius), 阴影(box-shadow) 对文字加特效(text-shadow), 线性渐变(gradient), transform(平移, 旋转, 缩放, 倾斜), 增加了更多的css选择器, 多背景, 媒体查询, border-image, flex布局等 -
如何实现: 左右布局, 一侧定宽, 另一侧自适应撑满
采用flex布局, 一侧设置固定宽度, 另一侧设置 flex: 1 让元素分配剩下的空间
(即将需要自适应的部分设为 flex: 1 让其元素自行分配空间, 实现的效果就是等分空间)
- localStorage 用于长久保存网站数据, 保存的数据没有过期时间, 可手动删除
- sessionStorage储存的数据在用户关闭浏览器窗口后, 数据会被删除
- cookie, localStorage, sessionStorage 的区别?
- 共同点: 都是保存在浏览器端, 且都是同源共享的.
- 同源共享: 同协议, 同域名 , 同端口, 同主机 下资源共享
- 区别:
- cookie数据会在浏览器和服务器之间进行传递, 每次http请求都会携带cookie, 而sessionStorage和localStorage仅在客户端保存, 不参与服务器通信.
- 存储大小限制不同, cookie数据不能超过4K, sessionStorage和localStorage大小一般是5M.
- 数据的周期时间不同, cookie数据在设置的过期时间内一直有效, sessionStorage数据会在当前浏览器窗口关闭时清除, localStorage数据则始终存在, 即使关闭浏览器或窗口也不会清除, 直到手动清除数据.
- cookie相比其他两个安全性不高, 容易被拦截获取
- 共同点: 都是保存在浏览器端, 且都是同源共享的.


