HTML5新增的新特性
HTML5的新特性都存在兼容性的问题,在ie9+的版本才能使用。
HTML5新增了一些语义化标签
- heaeder标签---定义头部
- nav标签---定义导航栏
- article标签---定义内容的标签
- aside标签---定义侧边栏
- section标签---定义文档中的某个区域
- footer标签---定义尾部
其实对我们写网页来说,他们就是一个普通的块级元素,可以就理解成一个div标签,他们真正的作用是有利于我们浏览器对我们页面的解析,这也是语义化的好处所在。如果没有这些语义化标签,我们通常是使用div来实现这些布局,但是div对我们浏览器来说没有任何语义,解析的时候并不知道我们这部分描绘的是什么内容。但是当你使用上语义化标签之后,浏览器就能很好的解析你的网页了。
语义化标签的缺点
兼容性,不兼容ie9及以下。处理方案就是将他们变成块级元素(display:block)语义化标签在移动端能大量使用,移动端没有兼容性的问题。
HTML5新增了一些多媒体标签
视频标签video
作用
在网页中插入video文件。他可以支持三种视频格式:mp4,webM,Ogg.其中mp4兼容性最好,所以建议使用mp4
属性
最重要的就src。视频的路径。autoplay控制自动播放。loop控制循环播放。
音频标签audio
作用
向网页添加音频文件。他也支持三种格式:mp3,Wav,Ogg.其中mp3基本兼容,建议使用mp3格式的音频文件。
属性
值得一提的是,谷歌浏览器把视频和音频的自动播放都禁止了。解决方案:视频的解决方案是muted=“muted”,音频的话,借助js.
HTML5新增了一些input标签的type类型。
作用
- 语义化,浏览器解析的时候,效果更好.
- 对我们输入的内容进行了限制和验证
重点类型
- tel 电话号码
- search 搜索框
- number 只能输入数字
HTML5新增了表单元素的新属性
- required
代表该表单的值不能为空。必填。required="required" - placeholder
提示文字。可以通过input::placeholder修改样式。 - autofocus
自动聚焦 - autocomplete
记录你之前提交成功的内容提示给你.
默认开启on。关闭为off
前提是表单元素有name属性。且成功提交过内容. - multiple
选择多个文件上传.<input type="file"/>默认是只能上传一个文件。添加multiple后就能多选了
css3新增的新特性
注意,css3新增的新特性也是存在兼容性的问题,只能适用于ie9+的版本
新增选择器
属性选择器
- input[attribute]
必须存在某个属性的input元素 - input[attr^="val"]
- input[attr$="val"]
- input[attr*="val"]
含有
属性选择器,类选择器,伪类选择器权重都是10
伪类选择器
- :first-child
- :last-child
- :nth-child(n)
n可以是数字,关键字,表达式等。- 为数字的时候,选择特定child
- 为关键字的时候,关键字:even/odd even是偶数,odd是奇数
- 表达式的时候,此时只能用n作为未知数,不能用其他字母。n的取值范围是0到正无穷的整数。
- n 全选
- 2n-/+1 奇数child
- 2n 偶数
- 5+n 选择的是大于5的child
- 5-n 选择的是不大于5的child
- nth-last-child(n)
倒序选择 - first-of-type
选择某一特定类型的元素的第一个 - last-of-type
- nth-of-type
这里n的用法同上面nth-child中的n的用法,也是三种取值 - nth-last-of-type
倒序选择
注意点:这里有个很重要的地方一定要弄懂,我在实际工作过程中也碰到过,实际上,nth-of-type选择器并不是类似jquery里面的eq那么的灵活。区别在哪呢?有个很关键的地方,就是nth-of-type选择器是按照子类的标签名进行编号的
example
实际的编号:1 2 1 3 2 1 3 2
所以当你使用div :nth-of-type(2)的时候会选择三个元素。
使用选择器的四种情况:
- :nth-of-type(2)
前面没有任何的限定条件。去选择。那么就是取得每个类别的第二个元素 - tag:nth-of-type(2)
选择第二个tag元素 - tag标签名.class类名:nth-of-type(2)
** 并不是我们理解的那样会选择第二个有class的tag元素。($("tag.class :eq(1)")这是会的)而是会怎么做呢?他会去对应的tag元素里面找到第2个元素,再看他是不是有class,有就生效,没有作罢** - .class:nth-of-type(2)
就是每个按照tag分类编号的类里面(这里就是三类,span,div,p),去找第二个元素,看他有没有class,有就生效,没有作罢。
伪元素选择器
注意伪元素选择器,应该是双冒号(css3写法),css2中是写单冒号,过时写法。
好处:使用css创建元素,简化了HTML的结构
特点:
- 他们都能创建一个元素,这个元素默认是行内元素。
- 这个元素在dom树中是找不到的所以称为伪元素。
::before伪元素选择器
在元素内部的前面创建一个元素,这个元素是行内元素。
必须有content属性。
::after伪元素选择器
在元素内部的后面创建一个元素,这个元素是行内元素。
必须有content属性。
tips:伪元素选择器的权重和标签选择器是一个等级:1
example:
<style>
div
{
width: 300px;
height: 100px;
background-color: aquamarine;
}
div::before{
content:"我";
color:#f00;
}
div::after{
content:"小猪佩奇";
color:#00f;
}
</style>
<head>
<body>
<div>
<span>是</span>
</div>
</html>
就相当于,before给父元素首部添加了一个行内元素(类似prepend方法),after给元素尾部添加了一个行内元素(类似append方法)。他们是父子级的关系
伪元素选择器的重要用法
- 配合字体文件实现icon图标
实现的效果:
通过定位,确定位置,然后通过content决定他的内容,这个我工作过程中也见过不少。
- 实现遮罩层的效果
.mask::before{
content:"";
display:block;
position:absolute;
left:0;
top:0;
width:100%;
height:100%;
background-color:rgba(....,.4);
}
- 清除浮动
本质上是添加一个空div清除浮动的变形写法。
div::after{
content:"";
width:0;
height:0;
display:block/table;
clear:both;
}
CSS3的盒子模型
CSS3可以通过box-sizing属性来设置盒子模型。
- content-box,默认值,也是原来的盒子模型。就是width=content,盒子实际的大小还得加上padding和border
- border-box, 新增的值,就是width=content+padding+border。
边框样式
border-radius
- 取值 px/%/em,注意这个和margin/padding一样都是一种复合写法代表了四个地方的值。border-top-left-radius ........顺序如图。
- 如果要画⚪的话是用width/2+border总长度。注意要包含border的长度。
背景样式
- background-size
- contain 包含,在图片比例不变的前提下,使任意一边填充整个元素。
- cover 覆盖 ,图片比例不变,但是完全覆盖元素,溢出部分不显示。
- 100% 100% 百分比。相对于要填充的元素
- px px 规定图片正好多大
字体样式
text-shadow
文字阴影(工作中遇到过)。
取值 x偏移量(required 正→负←) y偏移量(required 正↓负↑) 模糊距离(可选) 颜色(可选)
h1{ text-shadow: 5px 5px 5px #FF0000;}
自定义字体
@font-face
工作中用到过,自定义字体类型。
@font-face
{
font-family:"...";
src:url(...);
}
计算宽度函数
calc函数,使用时,运算符前后要空格
过渡效果
transition,经常和我们的hover状态配合使用,使我们的属性变化没有那么突兀,而是一种动态效果。
transition:我们要实现动画效果的属性(必选) 动画时间(必选,单位:秒) 运动曲线(默认是ease,可选) 延时时间(可选,默认是0s)
注意点;
- 如果要对多个属性都添加过渡效果,用逗号隔开而不是再写个transition否则会覆盖。
div{transition:width 5s ease 0s,height 5s ease 0s} - 如果所有属性都添加动画效果,就使用all关键字。
div{transition:all 5s;} - 谁的属性需要过渡效果就给谁添加transition属性
div{
width:100px;
transition: width 5s ease 0s;
}
div:hover{
width:200px;
}
2D转换
在二维平面中的变换
二维坐标系
平移效果(translate)
- 复合写法
{transform:translate(100px,100px) - 分开写法
{transform:translateX(100px);}
注意:一个元素写多个transform属性肯定是覆盖的。
关于数值的几点细节:
- →+←- ↑-↓+
- 可以使用百分比,相对的是移动元素的宽度/高度
几个移动元素的方式
- margin
- position定位
- translate
translate的优势在于他不会改变别的元素的位置。很关键。translate对行内元素不生效
水平居中和垂直居中的实现
通过绝对定位设置top50%,left:50%以及translate(50%,50%)可以实现元素的水平垂直居中。
rotate 旋转
div{transform:rotate(45deg)}
单位是deg,度数。正数代表顺时针,负数代表逆时针。
旋转的中心点默认是元素的中心点。
scale 缩放
- 综合写法,宽高都×n
div{transform:scale(n);} - 分离写法
div{transform:scale(x,y)}
优势:
- 缩放不会影响其他盒子的布局。
- 可以设置任意的中心点。
设置中心点
ratate和scale都涉及到中心点的概念。
通过transform-origin属性可以设置中心点。
transform-origin:x y;
x,y可以用%/方位名词(top,left,center....)/具体的数,默认值为50% 50% 中心点。
2d转换的综合写法
transform:translate() rotate() scale();空格分开,translate()要放到最前面,因为这个是按照先后执行的,如果先旋转会改变坐标轴,再平移就不是我们想要的效果了
浏览器的私有前缀
作用是为了兼容低版本的浏览器的样式写法,比如说这个border-radius,可能在新版的chrome中完全兼容,但是一些低版本的chrome就兼容不了,所以我们得兼容低版本的写法就是-webkit-border-radius 1.-moz- firefox的私有前缀 2. -ms- ie 3. -webkit- chrome safari 4. -o- opera