HTML5
和CSS3
1.H5
的新特性有哪些?
①新增多媒体标签
<!-- 音频标签 -->
<audio src="music.mp3" autoplay="autoplay" controls="controls"></audio>
<!-- 视频标签 -->
<video autoplay="autoplay" muted="muted" loop="loop" poster="mi.jpg">
<!-- -->
<source src="move.ogg" type="video/ogg">
<source src="move.mp4" type="video/mp4">
您的浏览器暂不支持 <video> 标签播放视频.
</video>
<!-- autoplay 音/视频准备就绪后立马播放 谷歌播放器把自动播放禁用了 可以加个muted这个属性 -->
<!-- controls 向用户显示音/视频控件(比如播放/暂停按钮) -->
<!-- loop 音/视频播放结束时重新播放--循环 -->
<!-- muted 音/视频输出为静音 -->
<!-- preload 音/视频是否默认被加载以及如何被加载 如果有autoplay可以忽略该属性-->
<!-- poster 加载等待的画面图片 -->
<!-- width和height设置宽高 -->
②新增语义化标签
header,nav,section,article,aside,footer
③新增表单控件
email,range,url,date,time,number,tel,search,color
<form action="">
<ul>
<li>邮箱: <input type="email" /></li>
<li>滑动条: <input type="range" /></li>
<li>手机号码: <input type="tel" /></li>
<li>数量: <input type="number" /></li>
<li>网址: <input type="url" /></li>
<li>日期: <input type="date" /></li>
<li>时间: <input type="time" /></li>
<li>搜索: <input type="search" /></li>
<li>颜色: <input type="color" /></li>
<!-- 当我们点击提交按钮就可以验证表单了 -->
<li>提交: <input type="submit" value="提交" /></li>
</ul>
</form>
④新增表单属性
placeholder,required,autofocus,autocomplete,multiple,pattrn
<form action="">
<!-- required 表单拥有该属性,内容不能为空 -->
<!-- placeholder 提示文本 -->
<!-- autofocus 页面加载完自动聚焦 -->
<!-- autocomplete 是否保存用户输入值-->
<!-- multiple 设置input元素是否可以有多个值 只适用于email和file类型 -->
<input type="search" required="required" placeholder="pink老师" autofocus="autofocus" autocomplete="off">
<input type="file" name="" id="" multiple="multiple">
<input type="submit" value="提交">
</form>
⑤新增使用JavaScript在网页上绘制图像的canvas元素
<canvas id="canvasDemo" width="600px" height="400px" style="border:3px solid white">画布</canvas>
//简单用法画个矩形---要想使用canvas,必须先渲染上下文,创建context对象,并获取2D运行环境
var context = document.getElementById("canvasDemo");
var ctx = context.getContext("2d");
ctx.moveTo(200,100); //线条起点坐标
ctx.lineTo(400,100); //线条终点坐标
ctx.lineTo(400,200); //线条终点坐标
ctx.lineTo(200,200); //线条终点坐标
ctx.closePath(); //使用closePath()闭合折线图形
ctx.lineWidth = 10; //设置线条宽度
ctx.lineCap = "butt"; //设置线条的格式
ctx.lineJoin = "miter";//控制线段连接处的线条风格
ctx.miterLimit =4;
ctx.strokeStyle = "white";//设置线条绘制颜色
ctx.stroke();
⑥本地存储
H5的两种存储技术的最大区别就是生命周期:
localStorage---本地存储 长期存储数据,浏览器关闭后数据不丢失。能维持在多个会话范围内;
sessionStorage---会话存储 数据在浏览器关闭后自动删除。只能维持在当前会话范围内。
Web Storage | 生命周期 | 存储大小 | 存储方式 | 存储位置 |
---|---|---|---|---|
localStorage | 生命周期是永久,除非主动清除localStorage 信息,否则这些信息将永远存在 | 存放数据大小为一般为5MB | 以键/值对的方式存储,值是字符串 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 |
sessionStorage | 仅在当前会话下有效,关闭页面或浏览器后被清除 | 存放数据大小为一般为5MB | 以键/值对的方式存储,值是字符串 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 |
详解:
HTML5
的本地存储 API
中的 localStorage
与 sessionStorage
在使用方法上是相同的,常用的API
:
getItem
//取记录 setItem
//设置记录 removeItem
//移除记录 clear
//清除记录
sessionStorage
用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage
不是一种持久化的本地存储,仅仅是会话级别的存储。当用户关闭浏览器窗口后,数据立马会被删除。(特别提示:新建一个标签页面以后,即使跟前一个页面的地址相同,新建标签页面也获取不到前一个页面中获取或者设置的sessionStorage
)
localStorage
用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。同一个域名下的localStorage
所有页面可以相互访问(数据共享);但是不同域名之间不能访问。
⑦自定义属性(data-)
⑧拖放(Drag和drop)
拖放是一种常见的特性,即抓取对象以后拖到另一个位置,在HTML5
中,拖放是标准的一部分,任何元素都能够拖放。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML5拖放</title>
<style type="text/css">
#drop {
width: 200px;
height: 200px;
background-color: deeppink;
border: 1px solid #aaaaaa;
}
#drag {
width: 100px;
height: 100px;
background-color: lawngreen;
}
</style>
</head>
<body>
<p>拖动小盒子到大盒子中:</p>
<div id="drop"></div>
<br />
<div id="drag"></div>
<script>
var drag = document.querySelector('#drag');
var drop = document.querySelector('#drop');
drag.ondragstart = function (e) {
e.dataTransfer.setData('Text', e.target.id);
};
drop.ondragover = function (e) {
e.preventDefault();
};
drop.ondrop = function (e) {
e.preventDefault;
var id = e.dataTransfer.getData("Text");
e.target.appendChild(document.getElementById(id));
};
</script>
</body>
</html>
1.设置元素为可拖放—draggable
属性规定元素是否可拖动
<element draggable="true|false|auto">
2.拖动什么—ondragstart
和 setData()
ondragstart
:拖动开始,调用一个函数,它规定了被拖动的数据;
dataTransfer.setData(format,data)
方法设置被拖数据的数据类型和值。
3.放到何处—ondragover
ondragover
:规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
4.进行放置—ondrop
当放置被拖数据时,会发生 drop 事件。
- 调用
preventDefault()
来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开,会新窗口打开); - 通过
dataTransfer.getData("Text")
方法获得被拖的数据。该方法将返回在setData()
方法中设置为相同类型的任何数据; - 被拖数据是被拖元素的 id ("#drag");
- 把被拖元素追加到放置元素(目标元素)中。
名称 | 作用 |
---|---|
dragstart | 在拖动时触发 |
dragend | 在拖动完成时触发 |
dragenter | 目标元素上绑定dragenter 事件,当拖拽元素进入目标元素时触发 |
dragover | 目标元素上绑定dragover 事件, 当拖拽元素在目标元素上移动时触发 |
drop | 目标元素上绑定drop 事件, 并同时取消当前目标元素的dragover 的默认事件, 当拖拽元素在目标元素上同时鼠标放开时触发事件. 例: box为目标元素. box.addEventListener('dragover', function(e){e.preventDefault();}); box.addEventListener('drop', function(e){console.log('drop');}); drop 与dragend 同时绑定时drop事件先触发 |
⑨地理(Geolocation
)对象
Geolocation
对象使用navigator.geolocation
访问,只有3个方法,没有属性:
1.getCurrentPosition(successCB,[errorCB],[geolocationOptions]
) 方法获取用户的位置;
2.watchPosition(successCB,[errorCB],[geolocationOptions])
方法返回用户的位置并循环监听,时间间隔不一定;
3.clearWatch()
—清除watchPosition()
的监听实例。
2.CSS3
的新特性有哪些?
①过渡transition
transition:CSS属性,花费时间,效果曲线(默认ease),延迟时间(默认0);
transition:width,.5s,ease,.2s;
transition-property: width;
transition-duration: .5s;
transition-timing-function: linear;
transition-delay: .2s;
②转换transform(2D,3D
)
transform:rotate(30deg);
transform:translate(30px,30px);
transform:scale(.8);
transform: skew(10deg,10deg);
③动画animation
animation:动画名称,一个周期花费时间,运动曲线(默认ease),动画延迟(默认0),播放次数(默认1),是否反向播放动画(默认normal),是否暂停动画(默认running)
④选择器
a.属性选择器
[attribute],[attribute^=value],[attribute$=value][attribute*=value]
b.结构为类选择器
:first-child,:last-child,:nth-child(n)
:first-of-type,:last-of-type,:nth-of-type
c.伪元素选择器
::before,::after
d.兄弟选择器
element1~element2(后面所有同级的指定元素)
element1+element2(紧跟的兄弟)
e.非选择器
:not(selector)
⑤边框
a.边框图片 border-image
b.边框圆角 border-radius
⑥背景
a.background-size:contain|cover|auto;
⑦阴影
box-shadow: 水平阴影的位置 垂直阴影的位置 模糊距离 阴影的大小 阴影的颜色 阴影开始方向(默认是从里往外,设置inset就是从外往里);
box-shadow: 10px 10px 5px #888888;
⑧颜色
rgba
color: rgba(255,0,0,.3);
background: rgba(0,0,0,.5);
⑨文字
a.超出省略号:
单行:
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
多行:
overflow : hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
b.文字阴影
text-shadow:水平阴影,垂直阴影,模糊的距离,阴影的颜色
text-shadow: 0 0 10px #f00;
⑩盒模型
⑪媒体查询
@media screen and (max-width:){}
⑫弹性布局Flex
3.如何使一个盒子水平垂直居中?(两个div都固定宽高)
方法一:
子绝父相,定位到大盒子的宽高一半的位置,再上下各margin负的自己宽高的一半
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
position: relative;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
position: absolute;
top: 50%;
left: 50%;
margin-top: -100px;
margin-left: -150px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法二:
子绝父相,定位到大盒子的宽高一半的位置,再用transform: translate向左向上移动自己宽高的一半
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
position: relative;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
position: absolute;
top: 50%;
left: 50%;
/*用transform向左(上)平移它自己宽度(高度)的50%,也就达到居中效果了*/
transform: translate(-50%,-50%);
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法三:
绝对布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
position: relative;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法四:
使用弹性布局flex
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
display: flex;
/*水平居中*/
justify-content: center;
/*垂直居中*/
align-items: center;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法五:
使用table-cell
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
display: table-cell;
vertical-align: middle;
text-align: center;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
display: inline-block;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法六:
用margin: 0 auto
代替text-align: center
和display: inline-block
这两句
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
display: table-cell;
vertical-align: middle;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法七:
son绝对定位或相对定位,脱离标准流,father有固定宽高,用son的margin去挤父亲。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
position: absolute;
margin: 200px 150px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法八:
如果给father加一个border,就可以father,son都不定位,用son的margin去挤父亲,实现son居中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
border: 1px solid white;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
margin: 200px 150px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
方法九:
利用行高和文本居中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.father{
width: 600px;
height: 600px;
background-color: orangered;
text-align: center;
line-height: 600px;
}
.son{
width: 300px;
height: 200px;
background-color: lawngreen;
display: inline-block;
vertical-align: middle;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
4.如何垂直居中一个 img
(行内块)?
可参考盒子垂直居中的方法五
给父容器设置:
.father {
display:table-cell;
text-align:center;
vertical-align:middle;
}
5.哪些是块级元素那些是行内元素,各有什么特点 ?
块级元素: 块级元素一般可嵌套块级元素或行内元素。
默认特点:
h1-h6,ol,ul,li,div,form,dl,p,table
- 独占一行,使用多个块级标签时自动换行;
- 可以设置
width
,height
,margin
,padding
等属性; - 宽度默认值为父盒子
100%
。
行内元素: 也叫内联元素或内嵌元素,只能容纳文本或其他内联元素。
默认特点:
a,span,label
- 使用多个行内元素时呈现效果排在一行,不会自动换行,当充满容器后,就会开始位置继续叠加显示;
- 不能设置
width
height
属性(可以设置line-height指定高度,宽度随内容变化),margin
水平方向有效,垂直方向无效,padding
水平方向有效,垂直方向有特殊效果(不是边距效果),具体表现:不影响位置,影响视觉。 - 宽度随内容变化;
行内块元素:既有行内元素的一些特性又有块级元素的一些特性。
默认特点:
button,img,input,iframe,textarea,select
- 元素排在一行,会有空白缝隙;
- 可以设置
width
,height
,margin
,padding
等属性; - 默认宽度随内容变化;
6.常用的浏览器以及内核
浏览器 | 内核 | 备注 |
---|---|---|
IE | Trident | IE |
firefox | Gecko | 火狐浏览器内核 |
Safari | Webkit | 苹果浏览器内核 |
Chrome/Opera | Blink | Blink其实是Webkit分支 |