H5和CSS3的知识点梳理(46)

一、HTML5(H5)

1.新增加(修改/删除)的语义化标签

header

footer

main 主体

section 区域

article 文章区域

aside 与内容无关的部分(例如:广告)

nav

figure 配图区域

figcaption 配图说明

mark 标记

time 时间标记

progress 进度条 ...

2.关于表单元素的新改革 [传统表单元素] input:text/password/radio/checkbox/file/hidden/button/submit/reset...

select

textarea 文本域

button

form

label ...

[新增一些表单元素或者是表单类型]

input:search/email/tel/number/range/color/date/time/url...

//=>ONINPUT:移动端没有KEY-DOWM/KEY-UP,用INPUT代替,代表正在操作当前表单元素(例如正在输入等)

年龄:
<input type="number" id="ageInp" step="1" max="65" min="18" value="25" disabled>
<input type="range" id="rangeInp" step="1" max="65" min="18" value="25">
<script>
    //=>INPUT:移动端没有KEY-DOWM/KEY-UP,用INPUT代替,代表正在操作当前表单元素(例如正在输入等)
    rangeInp.oninput = function () {
        let val = this.value;
        ageInp.value = val;
    };
</script>

 表单元素中新增加的类型作用

   1.功能强大了(很多东西不需要自己导入JS插件完成了,例如:日历)

   2.在移动端根据设置的类型不一样,用户输入过程中调取出来的虚拟键盘也不一样(例如:number类型的文本框调取出来的是数字键盘)

   3.新增加的类型提供了CSS/JS验证,可以验证用户输入的内容是否符合格式(之前我们都是用正则自己解决,现在H5中的新类型自带验证机制)

   H5中给表单元素设置了一个新的属性:placeholder 用来做文本框的默认提示的  (自己扩展:使用JS实现一套和PLACE-HOLDER一模一样的效果)

<style>
    #userEmail {
        border: 1px solid #DDD;
        outline: none; /*当文本框获取焦点后取出浏览器默认的边框选中颜色*/
    }

    #userEmail:valid {
        /*通过验证:不输入或者输入的格式正确*/
        border-color: green;
    }

    #userEmail:invalid {
        /*没通过验证*/
        border-color: red;
    }

    #userEmail:valid + span:after {
        content: '邮箱格式正确';
    }

    #userEmail:invalid + span:after {
        content: '邮箱不符合格式';
    }
</style>
<input type="email" id="userEmail" placeholder="请输入邮箱!">
<span id="spanEmail"></span>
<script>
    userEmail.onkeyup = function () {
        //=>checkValidity:H5新提供的表单内容格式验证方法(新表单类型中有内置验证机制的,都可以基于这个方法验证)
        if (this.checkValidity()) {
            spanEmail.innerHTML = 'OK';
        } else {
            spanEmail.innerHTML = 'NO';
        }
    };
</script>

<script>
    //=>BLUR:失去焦点
    //=>FOCUS:获取焦点
    userEmail.onkeyup = userEmail.onblur = function () {
        let val = this.value.trim();
        if (val.length === 0) {
            spanEmail.innerHTML = '必填';
            return;
        }
        let reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
        if (!reg.test(val)) {
            spanEmail.innerHTML = 'NO';
            return;
        }
        spanEmail.innerHTML = 'OK';
    };
</script>
<!--下拉框(扩展:实现省市县三级联动)-->
地区:
<select id="selectCity">
    <option value="">==请选择==</option>
    <option value="北京">北京</option>
    <option value="上海">上海</option>
    <option value="广州">广州</option>
    <option value="深圳">深圳</option>
    <option value="杭州">杭州</option>
    <option value="成都">成都</option>
</select>

<input id="myCar" list="cars" />
<datalist id="cars">
    <option value="BMW">
    <option value="Ford">
    <option value="Volvo">
</datalist>

3.音视频标签

audio

video

=>让我们告别了FLASH时代

4.canvas图形绘制

5.提供了一些新的API

本地存储:localStorage/sessionStorge

获取地理位置: navigator.geolocation.getCurrentPosition 调取手机内部的GPS定位系统获取当前手机所在地的经纬度以及精准度等 ...

还提供了一些API,让我们可以通过浏览器调取手机内部的软件或者硬件(但是性能都不咋高,而且兼容性不是特别好)

6.websocket:socket.io 客户端和服务器端新的传输方式(即时通讯IM系统 如:QQ、微信 基本上很多是基于它完成的)

二、CSS3

[选择器]

#ID

.CLASS

TAG

*

SELECTOR1,SELECTOR1... 群组选择器

A .B{} 后代
A.B{} 既具备A也具备.B的(同级二次筛选)
A>B{} 子代
A+B{} 下一个弟弟
A~B{} 兄弟
​
A[NAME=''] 属性选择器 NAME!='' / NAME^=''(以..开头) / NAME$=''(以..结尾) / NAME*='' ...
​
A:HOVER
A:ACTIVE
A:VISTED
A:LINK
A:AFTER
A:BEFORE
​
A:NTH-CHILD
A:NTH-LAST-CHILD
A:NTH-OF-TYPE
A:NTH-LAST-OF-TYPE
A:NOT
A:FIRST-CHILD
A:LAST-CHILD
​
...

[样式属性]

1.基本常用

border-radius

box-shadow

text-shadow

2.背景

  background -color / -image / -position / -repeat / -attachment / ...
​
  background-size:
       100px 100px  宽高具体值
       100% 100%  宽高百分比(相对于所在容器)
       cover  以合适的比例把图片进行缩放(不会变形),用来覆盖整个容器
       contain 背景图覆盖整个容器(但是会出现,如果一边碰到容器的边缘,则停止覆盖,导致部分区域是没有背景图的)
       ...
​
  background-clip: 背景图片裁切
      border-box
      padding-box
      content-box
​
  background-origin:设置背景图的起始点
      border-box
      padding-box
      content-box
​
  ...
​
  filter

 3.CSS3动画和变形(2D/3D)

 //=>变形不是动画
  transform:
     translate(X|Y|Z)  位移
     scale 缩放
     rotate 旋转
     skew 倾斜
     matrix 矩阵(按照自己设定的矩阵公式实现变形)
  transform-style:preserve-3d 实现3D变形
  transform-origin:变形的起点

  //=>过渡动画
  transition:
     transition-property:all/width... 哪些属性样式发生改变执行过渡动画效果,默认ALL,所有样式属性改变都会执行这个过渡效果
     transition-duration:过渡动画的时间,我们一把都用秒,例如:.5s
     transition-timing-function:动画运动的方式 linear(默认) ease ease-in ease-out ease-in-out cubic-bezier(执行自己设定的贝塞尔曲线)
     transition-delay:设置延迟的时间,默认是0s不延迟,立即执行动画
     ...

  //=>帧动画
  animation:
     animation-name 运动轨迹的名称
     animation-duration 运动的时长
     animation-timing-function 运动的方式(默认ease)
     animation-delay 延迟时间
     animation-iteration-count 运动次数(默认1  infinite无限次运动)
     animation-fill-mode 运动完成后的状态(帧动画完成后,元素会默认回到运动的起始位置,如果想让
//其停留在最后一帧的位置,设置这个属性值为forwards;backwards是当前帧动画如果有延迟时间,在延
//迟等待时间内,元素处于帧动画的第一帧位置;both是让帧动画同时具备forwards和backwards)
     ...

  //=>设置帧动画的运动轨迹
  @keyframes [运动轨迹名称] {
    from{
       //开始的样式
    }
    to{
       //结束的样式
    }
  }

  @keyframes [运动轨迹名称] {
     0%{
        //开始的样式
     }
     50%{}
     100%{
        //结束的样式
     }
  }

4.CSS3中的新盒子模型

box-sizing: border-box / padding-box / content-box(默认值) 
//改变的就是我们在CSS中设置的WIDTH/HEIGHT到底代表啥  border-box让其代表整个盒子的宽高,
//当我们去修改PADDING或者BORDER,盒子大小不变,只会让内容缩放

  columns:多列布局

  flex:弹性盒子模型

5.一些其他的CSS3属性

  perspective:视距 实现3D动画必用的属性
  @media:媒体查询 实现响应式布局的一种方案
  @font-face:导入字体图标

三、响应式布局开发

响应式布局:在不同尺寸的设备上都能良好的展示,这就是响应式布局设计(Responsive Layout)

公司中的产品形态:

1.PC端(全屏页面需要宽度自适应,但是一般都是固定宽度的)

2.PC+移动端用同一套项目(简单的页面,例如:产品介绍,公司展示类的官网等)

3.移动端(移动端设备尺寸差异较大,需要做响应式布局开发)

嵌入到APP中的H5

微信中分享出来的H5

微信公众号

小程序

靠浏览器访问的H5 ...

4.RN(React Native) / ionic / cordova ... JS开发APP的框架,使用JS代码开发APP,最后框架会把代码转换为 安卓和IOS 需要的代码

如何实现响应式布局开发? 最常用的方案:REM等比缩放响应式布局

 做移动端H5开发,首先加META标签
    <!--meta:vp [Tab]-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    REM和PX一样都是样式单位,PX是固定单位,REM是相对单位(相对于当前页面根元素HTML的字体设定的单位)

    我们开始给HTML的字体大小设置为100PX(1REM=100PX),接下来我们写样式的时候,把所有的尺寸都用REM
//设定(测量出来的PX值/100就是应该设置的REM的值),如果HTML的FONT-SIZE不变,用REM和PX一样,但是如
//果字体大小改变,也就是改变了REM和PX之间的换换算比例,那么之前所有用REM做单位的样式都会自动按照最
//新的比例进行缩放(实现了改动HTML的FONT-SIZE,整个页面中的元素都跟着缩放了,牵一发而动全身)

    真实项目中,设计师给给我们一套设计稿(常用的尺寸:640*1136  750*1334 640*960 ...),拿到设计稿后,我们严格按照设计稿中的尺寸去编写样式
       HTML{
          FONT-SIZE:100PX;
       }
       接下来写样式,把测量出来的PX都除以100变为REM,所有的单位基于REM来搞
       =>假设设计稿是750,也就相当于750的设备下,1REM=100PX

    我们页面运行在320的设备上,我们需要修改HTML的字体大小,以此实现页面跟着整体缩放:320/750*100 =>当前设备上HTML的字体大小
<sytle>
    html {
            /*
             * 1.最好不要写10PX:浏览器默认最小的字体是12PX
             * 2.font-size设置为多少,相当于1个rem等于多少像素
             * 3.之所以设置为100PX就是为了方便计算REM和PX转换的比例
             */
            font-size: 100px; /*1REM=100PX*/
        }
</sytle>

四、微信二次开发(小程序) =>Hybrid混合APP开发

五、移动端事件

六、移动端常用的插件、类库、框架等

上一篇:webview_flutter官方插件选择文件、图片的问题


下一篇:H5 web workers