H5C3

697 阅读17分钟

H5

# 兼容性处理:
创建一个这个标签.使用html5shiv.js搭配 cc:ie6条件注释

# 表单事件
  oninput:当表单的值发生改变时立即出发。(HTML5新增)
  onchange:当表单的值发生改变并且失去焦点的时候触发。

# 表单验证

<input type="email">:email类型,在提交表单时,会验证表单的内容(只能初略的验证)
<input type="url">  url类型   
<input type="text" require="">   非空校验    
<input type="text" pattern="[1-9]\d{4,10}">   自定义规则其他表单属性     
<input type="text" autocomplete="off" name="age"> 自动补全,默认为on,值为off的时候表示
关闭,一定要有name属性才生效.            
<input type="file" multiple>   支持多个文件上传
<input type="text " form="myForm"> 配合form表单的id进行关联,让input框可以写在任意位置。   
<input type="text " list="myList">  配合datalist使用

# 音频  
<audio src="./music/rain.mp3" controls loop autoplay></audio>    
autoplay 自动播放    
controls 是否显不默认播放控件    
loop 循环播放

# 视频 
<video src="./video/video.mp4" controls loop autoplay></video>    
autoplay 自动播放    
controls 是否显不默认播放控件    
loop 循环播放     
poster:视频没有播放的时候的预览图片,海报音视频常用的几个方法    play:控制视频播放    
pause:控制视频暂停    
load:重新载入视频    
width:设置播放窗口的宽度或者高度,只用设置一个  ,会等比例缩放

# 获取元素的新方法  
根据类型查找元素,返回一个伪数组,document.getElementsByClassName(“className”)  
通过css选择器获取元素,返回符合要求的第一个元素,注意返回结果是对象
document.querySelector(“css选择器”)
通过css选择器获取元素,返回伪数组  document.querySelectorAll(“css选择器”)类名操作   
添加类  node.classList.add(“classname”);  
移除类  node.classList.remove(“classname”);    
切换类   node.classList.toggle(“classname”); 
判断类  node.classList.contains(“classname”);
# 自定义属性
其格式如下data-*=””
1、读取 demo.dataset[‘name’] 或者 demo.dataset[‘age’]
2、设置demo.dataset[‘name’] = ‘web developer’
3、demo.dataset[‘userName’]//如果-比较多,需要转换成驼峰命名法。

# 进度条有很大的兼容性
<p><progress value="50" min="0" max="100"></progress></p>
<p><meter value="30" min="0" max="100" low="20" high="80">

# 网络状态 :
navigator.onLine返回用户当前的网络状况,是一个布尔值     
true 为在线状态    
false 如果浏览器连不上网(包括局域网),就是离线(脱机)状态

# 用户地理信息

HTML5规范提供了一套保护用户隐私的机制。必须先得到用户明确许可,才能获取用户的位置信息。在获取地理位置之前,会询问用户,只有在获得许可之后,才能获取到用户的位置信息。 
获取当前的地理位置信息:navigator.geolocation.getCurrentPosition(successCallback, errorCallback)
重复的获取当前的地理位置信息:navigator.geolocation.watchPosition(successCallback, errorCallback)

# cookie    

使用cookie:操作太麻烦,最多只能存储4k ,每次请求都会带上cookie,所以用户名和密码、还有sessionID
会存储在cookie中    
是以字符串形式存在的,这个字符串有固定的格式,  key=value; key1=value1    
在获取cookie内容时,一般需要通过正则或者字符串的方法进行处理,转换成对象,最终得到数据。
使用jQuery.cookie插件操作cookiewindow.sessionStorage的特点
1. 声明周期为关闭浏览器窗口
2. 不能在多个窗口下共享数据。
3. 大小为5M
window.localStorage的方法
1. 永久生效,除非手动删除
2. 可以多个窗口共享
3. 大小为20M 大小为5M左右
window.sessionStorage与window.localStorage的方法    
setItem(key, value) //设置存储内容    
getItem(key) //读取存储内容    
removeItem(key) //删除键值为key的存储内容    
clear() //清空所有存储内容    
key(n) //以索引值来获取存储内容

# FileReader对象
用于读取文件拖拽元素    
页面中设置了draggable=”true”  属性的元素,器中img a标签默认是可以被拖拽的.拖拽元素    
ondrag  应用于拖拽元素,整个拖拽过程中都会调用    
ondragstart    应用于拖拽元素,当拖拽开始调用    
ondragend  应用于拖拽元素,当拖拽结束时调用目标元素    
ondragover 应用于目标元素,当停留在目标元素上时调用   
ondrop  应用于目标元素,当在目标元素上松开鼠标时调用.

CSS3

# PC端浏览器支持程度差,需要添加私有前缀私有前缀    
谷歌、苹果浏览器:-webkit-    
火狐浏览器:-moz-    
IE浏览器:-ms-    
欧朋浏览器:-o-css3

# 选择器

关系选择器        
DIV&gt;P  子代选择器,选择div的子级中的所有p标签        
div p 后代选择器  选择div后代中所有p标签        
div+p  相邻选择器   选择紧跟着div后面的p标签        
div~p   兄弟选择器,选择div后面的所有兄弟元素中的p标签 

属性选择器

li[skill]   选择拥有skill属性的元素       
li[skill=”val”]       选择拥有skill属性,并且值为val的元素        
li[skill^=”val”]     选择拥有skill属性,并且值以val开头的元素        
li[skill$=”val”]     选择拥有skill属性,并且值以val结尾的元素        
li[skill^=”val”]     选择拥有skill属性,并且值包含val的元素

伪类选择器

child系列            
li:first-child    匹配的是li 的父元素ul的第一个子元素            
li:last-child    匹配的是li 的父元素ul的最后一个子元素            
li:nth-child  (1)  匹配的是li 的父元素ul中的指定下标的子元素(下标从1开始) 
li:nth-child  (odd)  匹配的是li 的父元素ul中的奇数的子元素(下标从1开始)   
li:nth-child  (2n)  n从0 开始计算,2n代表的是偶数,2n+1代表的是奇数  

伪元素选择器  

before和after             
必须指定content属性,可以在content属性中写入文本内容,但是通常为空字符串。默认是行内元素,无法
设置宽高,需要指定display:block或者position:absolute           
E::before :在元素子节点的最前面添加一个内容。            
E::after  :在元素子节点的最后面添加一个内容
。

# 颜色

opacity:如果给父盒子设置opacity,所有的子盒子都会有这个效果,opacity存在兼容性问题,如果是在IE678下,应该使用filter进行设置    解决盒子继承透明度继承的方法        
如果是纯色的背景,可以是使用rgba        如果是图片,可以脱离父子关系,让后用定位的方式来做。

rgba :

R:Red、G:Green、B:Blue、A:Alpha,R、G、B取值范围0~255,A的取值范围是0-1     RGBA可以用于所有使用颜色的地方        
rgb三个值越小,颜色越黑 

hsl:

H 色调 取值范围0~360,0/360表示红色、120表示绿色、240表示蓝色       
S 饱和度取值范围0%~100%       
L 亮度 取值范围0%~100%       
A 透明度取值范围0~1
background-color: hsla(120,100%,50%,1);

# 盒模型
标准盒模型 : 盒子的大小 = width + padding + border
怪异盒模型   width=content+padding + border

# 文字阴影 : 
text-shadow:水平偏移 垂直偏移 羽化大小 
# 颜色边框阴影  
:box-shadow    水平偏移 垂直偏移 羽化大小   阴影外延值  颜色  inset(设置对象的阴影类型为内阴影).

# 边框圆角 border-radius
# 边框图片 
border-images(兼容性很严重)    
border-image-source:url( )   指定图片的地址    
border-image-slice:27   指定图片的切割方式    
border-image-repeat: round(  )   repeat(  )  指定图片的平铺方式    
border-image-width:     指定边框的大小    
border-images-outset:   指定边框与内容之间的间隙   
合写  border-image: url(“images/border01.png”) 27 repeat;
# 背景  background    
background-size 设置背景图片的尺寸大小        
background-size:600px 400px;  设置图片的大小        
background-size:100% 100%   百分比是相对于盒子自身的宽度和高度        
background-size:contain  保证等比例缩放,但是会出现留白        
background-size:cover   保证等比例缩放,并且不会留白,但是出现有一部分图片不显示   
# background-clip  
设置背景区域的大小        盒子的背景区域是整个盒子,包括边框和padding        
background-clip:border-box   设置背景区域包括了边框        
background-clip:padding-box;   背景区域只包含padding和content        
background-clip:content-box;   背景区域只包含content    
background-origin 设置圆点位置,默认是padding的地方开始        
background-origin: border-box;  设置原点从border开始        
background-origin: padding-box;   设置原点从padding开始,默认值        
background-origin: content-box;     设置原点从content开始

# 多重背景 

background设置背景的时候,可以设置多个背景图片,使用逗号隔开。注意颜色只能设置一次,并且通常来说,
颜色都是在最后面进行设置。渐变实际上相当于一张图片,因为需要加给background-image才会生效渐变的两个要求
: 有区间,有颜色变化. 

# 渐变  linear-gradient和radial-gradient

渐变实际上相当于一张图片,因为需要加给background-image才会生效   

line-gradient(线性渐变)         
background: linear-gradient(red, blue);   (默认)是从上向下         background: linear-gradient(to right    red, blue);    
从左到右的线性渐变         
background: linear-gradient(to   bottom right  ,  red, blue);    
从左上角到右上角:background: linear-gradient(45deg,   red, blue);  使用角度渐变 :background: linear-gradient(pink,    red, blue);    使用多个颜色节点:background: linear-gradient(to right ,rgba(255,0,0,0), rgba(255,0,0,1);   
使用透明度:background-image: linear-gradient(to right, red 20%, green 80%)  
设定渐变的范围:background-image: linear-gradient(to right, red 20%, green 20%)  每一个区间表示渐变颜色的范围   

radial-gradient (径向渐变)        
background-image: radial-gradient(red, green);   颜色结点均匀分布        background-image: radial-gradient(200px at center(top  left)r, red, green);   设置圆的半径和圆心        
background-image: radial-gradient(200px 80px at center, red, green);  指定椭圆        
background-image: radial-gradient(200px at center, green 50%, red 50%);    
指定范围过渡   

# transition    
是c3中具有颠覆性的特征之一,可以实现元素不同状态间的平滑过渡(补间动画.)    
transition-property:all;   设置过渡属性    
transition-duration:2s;  设置过渡时间    
transition-delay:2s;  设置过渡延时.    transtion-timing-function:linear,ease,ease-in,ease-out,ease-in-out,steps   
设置过渡的类型    
属性合写:  属性  持续时间   延时 速度    
过渡的注意点:        
过渡必须要有两个状态的变化.        
过渡可以写在a状态,也可以写在B状态,但是如果写在B 状态,俺么回来的时候就没有过渡效果了2d转换

 # transform:
 转换,是CSS3最具颠覆性的几个特性之一,既可以用于2D转换,也可以用于3D转换。    
 scale    缩放        
 transform: scaleX(0.5);//让宽度变化        
 transform: scaleY(0.5);//让高度变化,注意不能写多个transform,不然会覆盖。    
 transform: scale(0.5);//让宽度和高度同时变化        
 注意scale接收的值是倍数,因此没有单位            
 scale可以是一个值,如果是一个值,不是说仅仅缩放宽度,高度也会等比例的缩放。            
 可以通过transform-origin设定旋转原点  
 
 # translate  平移        
 transform: translateX(100px);        
 transform: translateY(100px);        
 transform: translate(100px, 100px);        
 transform: translate(50%, 50%);        注意             
 translate的值可以是px,也可以是百分比,如果是百分比,那么参照的是自身的宽高。           
 translate移动的元素并不会影响其他盒子,类似于相对定位。
 
 # rotate   旋转        
 transform: rotate(360deg);//旋转360度        
 transform: rotate(-360deg);//逆时针旋转360度        
 注意:单位是deg,角度,不是px            
 正值顺时针转,负值逆时针转            
 可以通过transform-origin设定旋转原点            
 转换原点写在A状态,不能写在B状态    
 
 # skew   斜切  扭曲       
 skew在实际开发中,是用的最少的一个属性。一般来说,x和y只会倾斜其中的一个   transform: skewX(30deg);   在水平方向倾斜30deg        
 transform: skewY(30deg);  在垂直方向倾斜30deg    
 transform-origin  转换原点        
 transform-origin: center center;        
 transform-origin: 40px 40px;    转换合写问题        
 transform:translateX(800px) scale(1.5) 
 
 # rotate(360deg) ;
 1. transform属性只能写一个,如果写了多个会覆盖
 2. transform属性可以连写,但是顺序对效果影响的,因为它会在第一个效果的基础上执行第二个效果,然后执行第三个效果(通常会把rotate放后面)
 3. 如果对transform进行过度效果的时候,初始状态和结束状态一一对应
 
 # rotate   旋转    
 transform: rotate(45deg);// 让元素在平面2D中旋转    
 transform: rotateX(45deg);// 让元素沿着X轴转45度    
 transform: rotateY(45deg);// 让元素沿着Y轴转45度    
 transform: rotateZ(45deg);// 让元素沿着Z轴转45度3d转换  
 
 # perspective透视           
 1. 在视觉上,能够产生近远小的效果。 房子的真实大小是一样,仅仅是在视觉上会有一个近大远小的效果。
 2. perspective:给父元素添加
 3. 1000px:视距   眼睛距离物体的一个距离,值越大,近大远小的效果越不明显,视距越小,近大远小的效果就越明显

# transform-style
flat:默认值,2d显示
preserve-3d: 3d显示
    transform-style与perspective的区别
    透视:透视只是相当于设置了一个距离,辅助我们查看3D效果的工具
    preserve-3d:给父盒子添加,让子元素保留3D的位置,说白了,只有设置了preserve-3d,这个元素才能被称之为3d元素。
    一个3d元素可以没有perspective,但是不能没有transform-style
    
#  backface-visibility
   指定元素背面面向用户时是否可见。 
   visible: 指定元素背面可见,允许显示正面的镜像。 
   hidden: 指定元素背面不可见 
   注意:只有在3d的情况下,backface-visibility才会生效

动画

# animation
动画也是CSS3中具有颠覆性的特征之一,可以通过设置多个节点来精确控制一个或者一组动画,常用来实现复杂的动画效果。    
动画和过渡的区别      
1. 过渡必须触发,需要两个状态的改变。
2. 动画可以一直运行下去,不需要触发。实现效果与过渡差不多
使用动画的基本步骤
    1.通过@keyframes指定动画序列
    2.通过百分比或者from/to将动画分割成多个节点
    3.在各个节点中分别定义动画属性
    4.通过animation将动画应用于相应的元素
animation详解
    animation-name:动画名称,由@keyframes定义的
    animation-duration:动画的持续时间
    animation-timing-function:动画的过渡类型
    animation-delay:动画的延迟时间
    animation-iteration-count:动画的循环次数
    animation-direction:设置动画在循环中是否反向运动
    animation-fill-mode:设置动画时间之外的状态
    animattion-play-state:设置动画的状态。
    
# 字体图标
    使用精灵图的缺点   
        1,使用麻烦,需要量位置
        2,精灵图还是需要加载
        3,放大会失真
    iconfont   字体图标
        1.使用方便  
        2,放大不会失真
        3,操作颜色.大小,阴影,非常方便


# 过渡结束时间:transitionend
# 弹性布局   
display:flex    
给父盒子添加display:flex  指定一个盒子是弹性盒子. 弹性盒子就有和主轴和侧轴的概念 默认主轴从左
向右 ,默认侧轴从上到下           
flex-direction: 修改主轴的方向            
row:主轴方向为水平向右            
column:主轴方向为竖直向下            
row-reverse:主轴方向为水平向左           
column-reverse:主轴方向是竖直向上。            
justify-content: 设置在主轴方向的对齐方式            
flex-start 元素将向起始位置对齐            
flex-end: 弹性盒子元素将向结束位置对齐。            
center: 弹性盒子元素将向行中间位置对齐            
space-around: 弹性盒子元素会平均地分布在行里            
space-between:第一个贴左边,最后一个贴右边,其他盒子均分,保证每个盒子之间的空隙是相等的。             
不换行: flex-wrap:nowrap                    
align-items: 调整不换行的侧轴对其方式  
flex-start flex-end center                 
换行  : flex-wrap:wrap                    
align-content:调整换行的侧轴的对其方式 
flex-start flex-end center space-between space-around    给子元素添加     
flex: 设置子元素如何分配父元素的空间               
order: 设置子元素的排列顺序,值越小,越前               
align-self: 设置自身在侧轴的排序顺序

# less的预编译:
CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用。
成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。
LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函
数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,
LESS 可以让我们用更少的代码做更多的事情。本质上,LESS 包含一套自定义的语法及一个解析器,用户根据
这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪
CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。

1.变量:@director:right;
2.mixin混入:混入样式类    混入函数(带参/不带参/带默认参)
3.嵌套:&amp;
4.导入:@import “01-variable”;
5.函数(运算)   .my_btn {.btn();}.btn_border(@width) {border: @width solid #000;}  

# link和@import 的区别
link引用CSS时,在页面载入时同时加载;
@import需要页面网页完全载入以后加载。   
link是XHTML标签,无兼容问题;
@import是在CSS2.1提出的,低版本的浏览器不支持。    
link支持使用Javascript控制DOM去改变样式;而@import不支持。

移动端的布局

# 移动端web
    特点:手机端的兼容性比pc端小很多,因为手机端的浏览器版本比较性.
    手机端屏幕比较小,能够放得内容也比较少;
    PC端,固定版心,让所有的分辨率的电脑版心都是一样的.而移动端无法设置版心,因为移动端的设备本身就比较小,设置版心不合适.因此移动端大多会使用流式布局(也叫百分比布局);
    设置视口:
# 三种布局:
# 流式布局(百分比布局 无法百分百还原设计图)
    特征:
    宽度自适应,高度写死,并不是百分百还原设计图;
    图标都是固定死大小的,包括字体等也是固定死的.
    一些大的图片,设置宽度为宽度百分比自适应即可,随着屏幕大小进行变化;
    经典的流式布局:
    1.左侧固定,右侧自适应;
    2.右侧固定,左侧自适应;
    3.两侧固定.中间自适应(圣杯布局,双飞翼布局);
    4.等分布局;
# 响应式布局;( 针对新网站,移动+pc);
    媒体查询(C3):分为大屏,中屏,小屏,超小屏;
    语法:/*查询屏幕*/@media screen and 条件 {样式 }
    弊端:代码多麻烦.用响应式框架(bootstrap)
# rem布局;(能适配所有屏幕,+less);
    rem的基准点是根元素html的字体大小,因此我们只需要设置不同屏幕的html的font-size大小不一样就可以达到不同屏幕的适配了。 
    rem与媒体查询
    使用rem配合媒体查询可以适配多个终端
@media (min-width: 320px) {
  html {
    font-size: 16px;
  }
}
@media (min-width: 360px) {
  html {
    font-size: 18px;
  }
}
rem-flexible
 引入2个js文件
使用less进行rem的计算设置
@remBase:75; 设置基准值   设置图/10
@rem:round(1/@remBase,6)*1rem