目前HTML5和CSS3在各大浏览器上的普及率已经比较高,平常开发中也是常用,但对于这二者的知识点一直没有作一个比较详细的整理,这里我总结了HTML5和CSS3新增的特性详解和使用问题。css
本篇文章预计占用三十分钟阅读,若是你已经熟练于HTML5和CSS3,阅读本文将带你回顾其中知识点遗漏补缺。若是你尚未对HTML5和CSS3有全面的了解,本文将扩充完善你的知识体系。且面试当中问到HTML5和CSS3你都将能轻松拿下。html
若有错误,欢迎指出,将在第一时间修改,欢迎提出修改意见和建议html5
HTML5属于上一代HTML的新迭代语言,设计HTML5最初目的是为了在移动设备上支持多媒体。css3
例如: video 标签和 audio 及 canvas 标签git
声明必须位于HTML5文档中的第一行:<!DOCTYPE html>
复制代码
新特性:web
<font></font>
和 <center></center>
...好处:面试
缺点:正则表达式
语义标签能够清楚地向浏览器和开发者描述其意义。数据库
<header></header> // 页眉
<nav></nav> // 导航
<section></section> // 文档的节
<article></article> // 文章
<aside></aside> // 侧边栏
<main></main> // 主要内容
<footer></footer> // 页脚
....
复制代码
HTML5 规定了一种经过 video 元素来包含视频的标准方法。canvas
目前vedio支持三种视频格式:Ogg、MPEG 四、WebM。
标签属性有:
☞ 多媒体标签在网页中的兼容效果方式:
<video>
<source src="trailer.mp4">
<source src="trailer.ogg">
<source src="trailer.WebM">
Your browser does not support the video tag.
</video>
复制代码
audio提供了播放音频的标准。
目前audio提供了三种音频格式:Ogg、MP三、Wav。
标签属性有:
音频格式兼容处理:
<audio controls="controls">
<source src="song.ogg" type="audio/ogg">
<source src="song.mp3" type="audio/mpeg">
Your browser does not support the audio tag.
</audio>
复制代码
input标签经过type能够对输入类型进行限制,增长了type类型:
新的form属性:
新的input属性:
<input type="text" list="abc"/>
<datalist id="abc">
<option value="123">12312</option>
<option value="123">12312</option>
<option value="123">12312</option>
<option value="123">12312</option>
</datalist>
复制代码
HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像,canvas自己是没有绘图能力的,全部的绘制工做必须在JS内部完成
注意点:
方法:
属性:
画布上的X、Y轴用于对绘画进行定位:
实现一个简单的三角形:
<!--html-->
<canvas width="600" height="400"></canvas>
<!--js-->
//获取画布对象
var canvas = document.querySelector('canvas')
//获取绘图上下文
var ctx = canvas.getContext('2d')
<!--落笔-->
ctx.moveTo(100,100);
<!--连线-->
ctx.lineTo(100,200);
<!--连线-->
ctx.lineTo(200,200);
//闭合路径
ctx.closePath();
<!--描边-->
ctx.stroke();
复制代码
线性渐变:
ctx.createLinearGradient(x0,y0,x1,y1)
实现一个简单的线性渐变:
grd.addColorStop(0,"black"); 设置渐变的开始颜色
grd.addColorStop(0.1,"yellow"); 设置渐变的中间颜色
grd.addColorStop(1,"red"); 设置渐变的结束颜色
ctx.strokeStyle=grd;
ctx.stroke();
复制代码
addColorStop(offse,color)
中渐变的开始位置和结束位置介于0-1之间,0表明开始,1表明结束。中间能够设置任何小数
径向渐变:
ctx.createRadialGradient(x0,y0,r0,x1,y1,r1)
ctx.setLineDash(array)
原理:设置虚线其实就是设置实线与空白部分直接的距离,利用数组描述其中的关系。
例如:
绘制一个虚线:
ctx.moveTo(100, 100);
ctx.lineTo(300, 100);
ctx.setLineDash([2,4]);
ctx.stroke();
复制代码
☞ ctx.strokeRect(x,y,width,height) : 绘制一个描边矩形
☞ ctx.fillRect(x,y,width,height): 绘制一个填充矩形
☞ ctx.clearRect(x,y,width,height): 清除矩形区域
ctx.arc(x,y,radius,startradian,endradian[,direct])
☞ document.querySelector("选择器"): 经过css选择器选中第一个符合要求的元素
☞ document.querySelectorAll("选择器"):返回全部符合选择器的元素数组
☞ Dom.classList.add("类名"):给当前dom元素添加类样式
☞ Dom.classList.remove("类名"): 给当前dom元素移除类样式
☞ Dom.classList.contains("类名"):检测是否包含类样式
☞ Dom.classList.toggle("active"):切换类样式(有就删除,没有就添加)
☞ 自定义属性:data-自定义属性名
Dom.dataset
返回的是一个对象,Dom.dataset.属性名
或者Dom.dataset[属性名]
Dom.dataset.自定义属性名=值
或者 Dom.dataset[自定义属性名]=值
一个例子:
<!--html-->
<div id="myData" data-source="qwer"></div>
<!--js-->
document.querySelector('# myData').dataset.source === 'qwer' // true
复制代码
HTML提供了两种在客户端存储数据的新方法:
以前都是由cookie完成的,但cookie不适合大量数据的存储通常只有4KB的空间大小,每次http请求都会携带cookie。
localStorage不一样点:
方法:
通常用来保存长久数据。
sessionStorage不一样点:
方法:
通常用于一次性登陆敏感数据的存储。
cookie、sessionStorage、localStorage共同点:
使用 HTML5,经过建立 cache manifest 文件,能够轻松地建立 web 应用的离线版本。
如需启用应用程序缓存,请在文档的 标签中包含 manifest 属性:
<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
复制代码
manifest 文件可分为三个部分:
一个完整的Manifest文件:
CACHE MANIFEST
/theme.css
/logo.gif
/main.js
NETWORK:
login.asp
FALLBACK:
/html5/ /404.html
复制代码
注:一旦文件被缓存,则浏览器会继续展现已缓存的版本,即便您修改了服务器上的文件。为了确保浏览器更新缓存,您须要更新 manifest 文件。
JavaScript是单线程语言,全部任务只能在一个线程上完成。随着电脑能力的加强,尤为是CPU多核,单线程没法充分发挥计算机的能力。
Web Worker 的做用,就是为 JavaScript 创造多线程环境,容许主线程建立 Worker 线程,将一些任务分配给后者运行。
在JavaScript主线程运行的同时,Worker 线程在后台运行,二者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(一般负责 UI 交互)就会很流畅,不会被阻塞或拖慢。
WebWorker有几个注意点:
☞ Worker():用来生成Worker线程。
var myWorker = new Worker(jsUrl, options);
var myWorker = new Worker('worker.js', { name : 'myWorker' });
self.name // myWorker
Worker构造函数返回一个Worker线程对象,属性和方法以下:
Web Worker 有本身的全局对象,不是主线程的window,而是一个专门为 Worker 定制的全局对象。所以定义在window上面的对象和方法不是所有均可以使用。
Worker 线程有一些本身的全局属性和方法:
HTML5还新增了多种API扩充Web功能
☞ window.navigator.onLine: 返回浏览器的联网状态,正常联网(在线)返回 true,不正常联网(离线)返回 false。
对应两个事件:
window
,document
或document.body
的addEventListener方法来进行监听☞ 使用 FileReader() 构造器去建立一个新的 FileReader。
接口有三个用于读取文件的方法,返回结果在result中:
☞ FileReader 提供的事件模型:
一个简易的读取上传图片并渲染操做:
<!--html-->
<input type="file" name="image" >
<!--js-->
const file_input = document.querySelector('input');
file_input.onChange = function() {
<!--获取上传图片-->
const file = this.files[0];
<!--建立新的FileReader-->
const reader = new FileReader();
<!--将文件读取为DataUrl格式-->
reader.readAsDataURL(file);
<!--读取成功回调函数-->
reader.onload = function() {
const img = document.createElement('img');
<!--将读取结果存入img标签的src属性-->
img.src = reader.result;
document.body.appendChild(img);
}
}
复制代码
window.navigator.geolocation.getCurrentPosition(success, error): 获取当前用户位置
第一参数为获取成功时的回调函数,返回对象,包含用户地理信息:
拿到用户经纬度便可用于一些地图操做。
第二参数为获取用户地理位置失败或被拒绝的处理函数。
window.navigator.geolocation.watchPosition(success,error):实时获取用户的位置信息
clearWatch()方法中止watchPosition方法。
CSS3是CSS(层叠样式表)技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工做草案,主要包括盒子模型、列表模块、超连接方式、语言模块、背景和边框、文字特效、多栏布局等模块。
background-origin用来规定背景图片的定位区域。
☞ padding-box:背景图像相对内边距定位(默认值)
☞ border-box:背景图像相对边框定位【以边框左上角为参照进行位置设置】
☞ content-box:背景图像相对内容区域定位【之内容区域左上角为参照进行位置设置
background-clip规定背景的绘制区域。
☞ border-box:背景被裁切到边框盒子位置 【将背景图片在整个容器中显示】
☞ padding-box:背景被裁切到内边距区域【将背景图片在内边距区域(包含内容区域)显示】
☞ content-box:背景被裁切到内容区域【将背景图片在内容区域显示】(默认值)
background-size规定背景图片的尺寸。
☞ cover:背景图片按照原来的缩放比,铺满整个容器
☞ contain:背景图片按照原来的缩放比,完整地显示到容器中(不肯定是否铺满屏幕)
box-shadow: x y blur spread color inset
复制代码
向方框添加一个或多个阴影。
border-radius:设置全部四个border-*-radius
属性的简写属性,想边框添加圆角。
border-image向边框添加图片。
border-image 属性是一个简写属性,用于设置如下属性:
☞ text-shadow:x,y,blur,color 设置文本阴影
☞ word-wrap:容许长单词或 URL 地址换行到下一行。。normal|break-word
☞ text-overflow:规定当文本溢出包含元素时发生的事情。clip|ellipsis|string
实现一个单行文本省略:
.text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
复制代码
多行文本省略:
.text {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
复制代码
☞ 属性选择器:
[target=_blank]
,选择 target="_blank" 的全部元素。例如:为 target="_blank"
的 <a>
元素设置样式:
a[target=_blank]
{
background-color:yellow;
}
复制代码
☞ 结构伪类选择器:
☞ 结构伪元素选择器:
伪类和伪元素:
css引入伪类和伪元素概念是为了格式化文档树之外的信息。
伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。
伪元素用于建立一些不在文档树中的元素,并为其添加样式,好比说,咱们能够经过::before
来在一个元素前增长一些文本。
二者的使用区别:
:
,伪元素使用双冒号::
.box:first-child:hover { color: #000;} //使用伪类
.box::first-letter { color: #000;} //使用伪元素
.box::first-letter:hover { color: #000;} //错误写法
复制代码
☞ 线性渐变:
background-image: linear-gradient(
to right, // 渐变方向 to + right | top | bottom | left
red, // 开始渐变的颜色
blue // 结束渐变的颜色
);
复制代码
☞ 径向渐变:
background-image: radial-gradient(
shape, // 肯定圆的类型,ellipse(默认:椭圆)|circle(圆的经向渐变)
start-color,
...,
last-color,
);
复制代码
新的转换属性transform:向元素应用 2D 或 3D 转换
☞ 位移:
div {
transform: translate(50px,100px);
}
复制代码
☞ 旋转:rotate(angle)
div {
transform: rotate(60deg); // 备注:取值为角度
}
复制代码
☞ 缩放:
备注: 取值为倍数关系,缩小大于0小于1,放大设置大于1
☞ 倾斜:
☞ transform-style: preserve-3d;:将平面图形转换为立体图形
☞ 位移:
tranform: translate3d(x,y,z);
transform: translateX() translateY() translateZ();
☞ 旋转:transform: rotateX(60deg) rotateY(60deg) rotateZ(60deg);
☞ 缩放:
tranform: scale3d(x,y,z);
transform: scaleX(0.5) scaleY(1) scaleZ(1);
☞ 设置哪些属性要参与到过渡动画效果中:transition-property: all;
☞ 设置过渡执行时间:transition-duration: 1s;
☞ 设置过渡的速度类型:transition-timing-function:
☞ 设置过渡延时执行时间:transition-delay: 1s;
☞ 简写模式:transition: property duration timing-function delay;
☞ 定义动画集:
@keyframes rotate {
/* 定义开始状态 0%*/
from {
transform: rotateZ(0deg);
}
/* 结束状态 100%*/
to {
transform: rotateZ(360deg);
}
}
复制代码
注意:若是设置动画集使用的是百分比,那么记住百分比是相对整个动画执行时间的。
☞ 调用动画集:
animation简写模式:animation: name duration timing-function delay iteration-count direction;
传统的布局方式对于特殊的布局很是不方便,好比垂直居中。Flex是2009年W3C提出的新方案--Flex布局,能够简便、完整、响应式地实现各类页面布局。
☞ 设置父元素为伸缩盒子【直接父元素】
display: flex;
复制代码
注:设为 Flex 布局之后,子元素的float、clear和vertical-align属性将失效。
用于容器上的属性:
☞ 设置伸缩盒子主轴方向
flex-direction: row; // 默认值,主轴为水平方向,起点在左侧
flex-direction: row-reverse; // 主轴为水平方向,起点在右侧
flex-direction: column; // 主轴为垂直方向,起点在上沿
flex-direction: column-reverse; // 主轴为垂直方向,起点在下沿
复制代码
☞ 设置元素是否换行显示
在伸缩盒子中全部的元素默认都会在一条线上显示
若是但愿换行:
flex-wrap: wrap | nowrap | wrap-reverse;
复制代码
☞ 设置元素在主轴的对齐方式
justify-content: flex-start; // 左对齐
justify-content: flex-end; // 右对齐
justify-content: center; // 居中
justify-content: space-between; // 两端对齐,项目之间的间隔相等
justify-content: space-around; // 每一个项目两侧之间的间隔相等
复制代码
☞ 设置元素在侧轴的对齐方式
align-items: flex-start; // 交叉轴的起点对齐。
align-items: flex-end; // 交叉轴的终点对齐。
align-items: center; // 交叉轴的中点对齐。
align-items: stretch; //(默认值)若是项目未设置高度或设为auto,将占满整个容器的高度。
align-items: baseline; // 项目的第一行文字的基线对齐。
复制代码
☞ 设置元素换行后的对齐方式,定义了多根轴线的对齐方式。
align-content: flex-start;
align-content: flex-end;
align-content: center;
align-content: space-around;
align-content: space-between;
/* 换行后的默认值 */
align-content: stretch;
复制代码
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
.box {
flex-flow: <flex-direction> || <flex-wrap>;
}
复制代码
定义项目的排列顺序。数值越小,排列越靠前,默认为0。
.item {
order: <integer>;
}
复制代码
定义项目的放大比例,默认为0,即若是存在剩余空间,也不放大。
定义了项目的缩小比例,默认为1,即若是空间不足,该项目将缩小。
flex-basis属性定义了在分配多余空间以前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间。
它的默认值为auto,即项目的原本大小。
.item {
flex-basis: <length> | auto; /* default auto */
}
复制代码
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
.item {
flex: none | flex-grow flex-shrink flex-basis
}
复制代码
align-self属性容许单个项目有与其余项目不同的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,若是没有父元素,则等同于stretch。
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
复制代码