Web前端学习—基础篇(36)_移动端布局:viewport、移动端web页面适配方案 、响应式布局、rem布局、vw + rem布局、移动端样式重置、帧动画、媒体查询

6.8、移动端布局

6.8.1、移动端浏览器及内核

    1、浏览器:
      UC浏览器、QQ浏览器、百度浏览器、夸克浏览器、360浏览器...
      safari、chrome...

    2、内核:webkit...

6.8.2、viewport

 **解决移动端浏览器的屏幕分辨率大小问题**

1、 视口

PC端视口:PC端浏览器显示内容的屏幕区域

移动端视口:移动端浏览器显示内容的屏幕区域

1.1 移动端视口分类

  (1)布局视口:移动端设备默认的viewport(宽度768~1024px)
  (2)视觉视口:可以观看区域,屏幕宽度
  (3)理想视口:为了网站的移动端能更好的浏览和阅读

1.2 meta标签

目的:布局视口和理想视口的宽度保持一致。设备有多宽,布局视口就有多宽

  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, maximum-scale=1.0, minimum-scale=1.0">
      创建一个虚拟窗口,窗口的宽度为设备宽,初始缩放比为1倍,同时不允许用户手动缩放

1.3 content属性

     width  虚拟窗口宽      device-width 设备宽
     initial-scale 初始缩放比
     user-scalable 是否允许用户手动缩放
       user-scalable=yes 允许用户手动缩放,默认值
       user-scalable=no  不允许用户手动缩放
     maximum-scale 最大缩放比
     minimum-scale  最小缩放比

6.8.3、移动端web页面适配方案

1、固定布局

    设置viewport,布局与PC端一致,假设整个网页的宽度为320px居中,超出部分留白。
  • 优点:
思路沿用PC端,上手容易
  • 缺点:
大屏幕手机及手机横屏的时候,左右两侧留有大片留白,并且大屏幕手机下显示内容看起来较小,操作按钮较小,用户体验较差

2、流式布局

    宽度使用百分比代替固定宽度px,高度大多用px固定,因此在大屏幕手机下显示效果会变成页面元素宽度被拉长,高度和原来保持一致
  • 优点:
可以很好解决自适应问题
  • 缺点:
    1、实际显示效果不协调;
    2、大量使用百分比布局,会出现兼容问题;
    3、设计有局限性

3、响应式布局

    一个网站适配所有终端,实现不同屏幕分辨率下的终端网页的不同布局;
    使用媒体查询针对不同宽度的设备进行布局和样式设置,从而达到适配不同设备的目的
  • 优点:
    1、一站适配所有终端、
    2、减少工作量;
    3、缩短开发周期;
    4、对搜索引擎表现更友好;
    5、在每个设备中都能得到较好的设计
  • 缺点:
    1、在老版本的浏览器兼容性不好;
    2、兼容各种设备工作量大,效率较低;
    3、加载更多的样式和脚本文件;
    4、设计比较难于精确定位和控制;
    5、是一种折中性质的设计方案,在一定程度上改变网页布局结构,会出现用户混淆情况;
    6、维护困难

4、rem布局

    rem是css3新增单位,相对于根元素的字号大小而言,如:html{ font-size: 100px; } 一个div标签的宽度为1rem,div的宽度是100px
  • rem布局的实现
   (1)设置页面的viewport
   (2)动态计算并设置html的font-size属性值
   (3)按照PC端布局方式正常布局,将px单位改为rem单位;如果值较小(1px),不用转换
  • 优点:
    1、适用于偏APP类型的移动端页面;
    2、有利于手机端各种机型的适配;
    3、减少代码重复性;
    4、有统一的参考值
  • 缺点:
    1、使用具有局限性,所有的图片都需要设置一个准确值,才能保证在不同机型的适配中正常显示;
    2、必须通过js动态控制根元素的大小

5、vw布局

    使用纯css实现动态改变font-size属性值,不需要引用js文件
  • 内容
 vw  viewport‘s width  是css3规范中的宽度视口单位,将视口宽度平均分成100份  
 vh  viewport’s height     高度视口单位,将视口高度平均分成100份
 1vw = 屏幕宽度的1%

 vmax 相对于视口的宽度或高度中较大的那个值,将最大的那个值平均分成100单位的vmax
 vmin 相对于视口的宽度或高度中较小的那个值,将最小的那个值平均分成100单位的vmin

 举例:
   iphone 414px 1vw = 4.14        24.154个vw是100px
   375px 1vw =3.75    26.666个vw是100px
  • 原理:
  1、确定基准值,以常见的750像素宽度的设计稿为例;
  2、根据vw单位的原理100vw = 750px,即1vw = 7.5px,
  3、根据设计稿中的px值,转换成对应的vw值进行布局,也可以直接写px,后期借助插件完成自动计算得到需要的vw
  • 优点:
页面元素随着页面宽度变化
  • 缺点:
兼容性没有rem好

6、vw + rem布局

    vw  px  rem   
    (1)确定基准值以常见的750px宽度的设计稿为例,根据vw单位和rem单位原理实现在750px设计稿下,
    (2)如果使用vw单位换算,100vw = 750px,1vw = 7.5px, 1px = 0.133333vw;
    (3)如果使用rem单位换算,预设1rem = 100px,则100px = 13.3333vw
        html{
            font-size: 13.3333vw;
        }

6.8.4、移动端样式重置

1、normalize.css 代替样式重置文件

    没有重置所有的样式风格,提供了一套合理的默认样式值

2、reset.css样式重置

  • 禁止用户选中文字 安卓无效
-webkit-user-select: none; 
  • 禁止长按页面显示系统菜单
img,a{
    -webkit-touch-callout: none;
}
  • 修改placeholder的样式
inuput::-webkit-input-placeholder{
    color: #333; /*默认样式*/
}
input:focus::-webkit-input-placeholder{
    color: #f00; /*获取焦点后的样式*/
}

6.8.5、移动端布局注意:

 1、页面布局文字是否能够随着屏幕大小变化而变化
 2、流式布局和flex布局主要针对宽度设置布局
 3、当屏幕发生改变时,元素的宽度和高度如何等比例缩放

6.8.6、移动特殊处理

1、超小字号处理(小于12px)

transform: scale(.7);

2、动画定义3d启动硬件加速,提升网站动画渲染性能

    GPU 图形处理器,处理计算机中跟图形计算有关的工作,将数据更好地呈现在显示器中
    CPU 中央处理器,控制计算机运行
transform: translate3d(0,0,0);

3、圆角BUG

background-clip: padding-box;

4、input的placeholder属性会出现文本在偏上位置显示的问题

在保证input输入文本垂直居中的条件下,给placeholder设置padding-top,不设置行高

6.8.7、flexible.js + rem

1、特点

 1、简洁、高效,属于rem适配方案

 2、解决HTML5页面终端适配问题

 3、开源

2、实现原理

  将设备划分10等份,不同设备下的比例是一致,确定好设备的html标签的font-size属性值。
  如:750px  html{ font-size: 75px; } 页面中元素的rem的值 = 元素的px值/75 ,剩余部分由flexible.js完成

3、使用方法

  在head标签内,添加插件

  <script src="js/flexible.js"></script>

  将视觉稿中的px转为rem

4、flexible的实质

  ----动态改写DPR(设备像素比)、根元素的font-size

4.1、做工作

(1)动态改写meta标签
    <meta name="flexible" content="initial-dpr=2">
    <!--    initial-dpr将dpr设置为指定值    -->
(2)动态改写data-dpr的值
(3)给html的标签添加font-size属性值,并动态改写font-size的值

5、特点

  优点:可以很方便地解决HTML5页面适配问题
  缺点:由于viewport得到众多浏览器的兼容,lib-flexible这个过渡方案已经被弃用,不管现在还是以前的版本,都存在一定问题

6.8.8、帧动画

1、定义关键帧

@keyframes 动画名称{
    0%{}      动画的开始
    50%{}
    100%{}    动画的结束
}

@keyframes 动画名称{
    from{ }   动画的开始
    to{ }     动画的结束
}

2、引用关键帧

animation: 	animation-name  				动画名称
			animation-duration  			动画的执行时间(s|ms)
			[animation-timing-function]  	速度曲线(ease|ease-in|ease-out|ease-in-out|linear)
			[animation-delay]   			延迟时间
			[animation-iteration-count]  动画的执行次数 ,默认1次;设置次数直接写数值,没有单位;infinite无限循环   
			[animation-direction]  				播放次序
			[animation-fill-mode];				动画结束之后显示的状态

    播放次序:normal正常播放   alternate正向反向轮流播放   alternate-reverse反向正向轮流播放   reverse反向播放
    动画结束之后显示的状态:both动画结束或开始时的状态  forwards动画结束时的状态  backwards动画开始时的状态

3、animate.css动画库

css3动画库,预设了闪烁(flash)、翻转(flip)、弹跳(bounce)、旋转(rotateIn|rotateOut)、淡入淡出(fadeIn|fadeOut)、抖动(shake)等动画效果

3.1 使用方法:

  (1)引入文件 <link rel="stylesheet" href="css/animate.min.css">

  (2)使用
    <p class="animate__animated animate__flash">文字内容</p>

    animate__animated为基础类名,必须要添加
    animate__flash 指定动画类型

4、css3中过渡和动画的区别和各自使用场景

4.1 区别:

   1)语法:
        过渡——transition: 属性名 完成时间 速度曲线 延迟时间; 
        动画——animation: 自定义名称 完成时间 速度曲线 播放次数 奇偶顺序 延迟时间;
            @keyframes 自定名称{}  需要先定义关键帧,再通过animation属性引用关键帧

​    2)触发:
​        过渡:需要借助伪类、js、@media触发。
​        动画:自动触发

​    3)执行次数
​        过渡:执行一次后不会执行,但是可以借助transitionEnd事件添加循环;
​        动画:可以通过animation-iteration-count属性设置循环次数;

​    4)复杂度
​        过渡:简单动画效果,可以通过transition-timing-function属性展示动画的速度效果
​        动画:复杂动画效果,可以定义关键帧,控制每一帧的动画效果

4.2 适用场景:

    transition:适用于当元素从一种样式变换为另一种样式时为元素添加效果
    animation:可以在网页中取代动画图片、Flash及需要灵活定制多个帧以及循环的动画中

6.8.9、 媒体查询

1、媒体查询

  • 根据设备显示器的特性,设置不同的css样式

  • css2 不同媒体类型 设置不同的css样式

  • css3 针对不同设备特性在不改变页面内容的情况下 为特定输出设备定制显示效果

  • 媒体查询可以检测到的内容:

  viewport的宽度和高度
  设备的宽度和高度
  设备的朝向
  分辨率

2、引入方式

1)在样式表中引入

  在style标签对引入
  使用link标签引入外部的css文件(媒体查询写在css文件中)
@media   mediaType   and    (media feature){
    选择器{ 属性: 属性值; }
}
mediaType媒体类型:
    all 所有设备
    screen 电脑屏幕、平板电脑、智能手机等
    print  打印或打印预览
    speech  屏幕阅读器等发声设备
meida feature 媒体特性表达式:
    width浏览器宽度  height浏览器高度
    max-width最大宽度  min-width最小宽度
    device-width 设备宽  device-height 设备高
    max-device-width 最大设备宽   min-device-width 最小设备宽
    orientation 浏览器窗口朝向(landscape横屏显示、portrait竖屏显示)
    aspect-ratio:1/2 可视区宽度和高度的比率(max  min)
    device-aspect-ratio:1/1  输出设备的屏幕可视区宽度和高度的比率

2)使用link标签引入

<link rel="stylesheet" href="" media="mediaType   and   (mediaFeature)">

6.8.10、响应式布局

概念:
    一个网站适配所有终端,实现不同屏幕分辨率下的终端网页的不同布局;
    使用媒体查询针对不同宽度的设备进行布局和样式设置,从而达到适配不同设备的目的

优点:
    1、一站适配所有终端、减少工作量;
    2、缩短开发周期;
    3、对搜索引擎表现更友好;
    4、在每个设备中都能得到较好的设计

缺点:
    1、在老版本的浏览器兼容性不好;
    2、兼容各种设备工作量大,效率较低;
    3、加载更多的样式和脚本文件;
    4、设计比较难于精确定位和控制;
    5、是一种折中性质的设计方案,在一定程度上改变网页布局结构,会出现用户混淆情况;
    6、维护困难

6.9.1、什么是响应式布局?

 响应式设计、响应式开发
 解决移动互联网 实现不同屏幕分辨率下网页的不同展示效果,不需要为每个终端定制特定版本
 包含弹性布局、图片、css media query等
 页面的设计和开发  需要根据用户行为、设备环境进行相应调整
 通过媒体查询检测不同的设备尺寸,通常页面头部设置meta标签声明viewport

6.9.2、技术要点

1、标签设置

  • meta标签设置:
     虚拟窗口
     使用高版本IE内核浏览器或Chrome
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     http-equiv属性  HTML4 规定字符集
  • 针对手持设备优化,不支持viewport的浏览器
  <meta name="HandheldFriendly" content="true">
  • IE8-不支持媒体查询,使用media-queries.js或respond.js来增加IE对媒体查询的支持
  <script src="https://cdn.bootcdn.net/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/livingston-css3-mediaqueries-js/1.0.0/css3-mediaqueries.min.js"></script>

2、使用媒体查询适配对应的样式

  • 媒体查询常见的媒体尺寸设置
常用的媒体查询尺寸:
    1200px
    1100px   1024px   1000px
    980px
    768px 720px
    640px
    480px
    320px
  • 移动设备优先:超小设备 手机 768px以下
  @media all and (min-width: 768px){ 小屏幕}
  @media all and (min-width: 992px){ 中等屏幕}
  @media all and (min-width: 1200px){ 大屏幕}
  • 大屏幕优先:大屏幕 桌面 1200px及以上
  @media all and (max-width: 1199px){ 中等屏幕 }
  @media all and (max-width: 991px){ 小屏幕 }
  @media all and (max-width: 767px){ 超小屏幕 }

3、响应式内容设置

  • 字体设置
    css3 rem 相对于根元素的font-size属性值而言
  html{ font-size: 100%; }
  @media all and (min-width: 768px){
      html{ font-size:; }
  }
  • 百分比布局
   宽度使用百分比——内填充、margin、border
   布局:浮动、定位、弹性盒子
   图片
     前景图:max-width属性控制图片大小,height: auto; 
     背景图:background-size属性
posted @ 2021-05-04 22:53  泰初  阅读(620)  评论(0编辑  收藏  举报