响应式与自适应布局是什么

文章介绍了响应式设计的概念,旨在确保web程序在不同设备上展示良好。它涉及到rem单位、媒体查询以及CSS3的flex和grid布局。同时,文章讨论了自适应布局在PC端的应用,包括使用百分比、vw/vh单位以及scale和zoom技术来适应不同屏幕尺寸,但同时也指出这些方法的优缺点和潜在问题。

响应式是可以针对不同的平台设备,如手机,电脑可以展示为不同的布局,效果
自适应是针对一端设备,如针对不同的电脑屏幕尺寸,适应不同的屏幕尺寸,但是布局一般不会改变

自适应

移动端

rem单位

为了使一个web程序应对不同大小的屏幕,而不至于大批量的重新实现效果,提出来响应式的思想。
屏幕小到手机、手环,大到电脑、大屏。除了确定的设计目标,其他场景考虑响应式很有必要。
对于不同设备的屏幕,需要考虑的比较多,可以使用rem与px转换获得好的效果。
对于不同的电脑屏幕。如1200-1800px,可以媒体查询进行改变布局。一些样式库使用媒体查询进行响应式实现。(缺点:只有在屏幕到达断点时才会变化)。

//如当屏幕>750px时,1rem为10px
(function (doc, win) {
  var docEl = doc.documentElement,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function () {
      var clientWidth = docEl.clientWidth;
      if (!clientWidth) return;
      if (clientWidth >= 750) {
        docEl.style.fontSize = '10px';
      } else {
        docEl.style.fontSize = 10 * (clientWidth / 750) + 'px';
      }
    };

  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

现代响应式:css3提供了多种布局方式,如flex弹性盒布局、grid网格布局,可以使用对应属性方便的实现一些响应式效果。(缺点:兼容性)
新的单位:相对于视口的单位vm/vw。会随着窗口大小而变化(简单来说就是缩放无效)

设置视口宽度为屏幕宽度
<meta name="viewport" content="width=device-width,initial-scale=1">

PC端自适应

pc端的一般来说,使用%或者vw作为单位进行布局比较好,但是在开发过程中会比较困难。

scale缩放适应

对整个body使用scale缩放,以屏幕宽度或高度进行缩放,适应屏幕的宽度或高度。
缺点:scale缩放仍会占据原来空间,需要进行定位调整;scale缩放可能会导致页面小的文字或图片变得模糊。
下面是以宽度为基准,保证页面不出现横向滚动条的自适应设计:
实现:首先根据开发时的设计图,和实时的屏幕尺寸,计算出缩放比例。然后对其使用定位,调整至左上角,设置超出屏幕的部分不可见。
代码:

// 首先给元素添加一下样式
#app {
  width: 1905px; //设计图宽度
  overflow-x: hidden;
  height: fit-content;
  position: absolute;
  top: 0%;
  left: 50%;
  transform:translate(-50%, -50%);
}
//width为基准,height为app的浏览器中渲染的高
function setCalc(width = 1920, height = 1000) {
  // width,height 为app元素宽高保持的比例
  // 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
  //只以宽度为基准,保证不出现
  const scaleX = document.documentElement.clientWidth / width
  //可以也计算高度,根据需求使用最小的为基准
  // const scaleY = document.documentElement.clientHeight / 1080
  const app = document.getElementById('app')
  app.style.transform = `translateZ(0) translate(-50%, -50%) scale(${scaleX})`;
  // 缩放之后距顶部距离 动画有延迟,会推迟到下一个操作
  // let top = $('.gtitle').offset().top - $(window).scrollTop();
  //直接计算缩放后距顶部距离  
  //height为app的浏览器中渲染的高
  document.getElementById('app').style.top = height * scaleX / 2 + 'px';
}

//每次窗口大小变化,需要重新计算
// 防抖优化
window.onresize = _.debounce(function () {
  let height = document.querySelector('#app').clientHeight,
  setCalc(1905, height)
}, 100)

以上方法只能保证水平方向上适应,当想要垂直方向上适应,不出现滚动条时,会导致水平方向上部分被截断隐藏

zoom缩放垂直适应

zoom适用于适应pc端不同设备,如显示器,笔记本等不同尺寸。只需要在初始化的时候计算一下不出现滚动条即可。频繁使用zoom性能消耗可能很大。
缺点
0.zoom在firefox浏览器中无效
1.zoom相对于页面左上角缩放,它可以改变元素缩放后所占据的空间,所以会引起页面重绘
2.由于zoom缩放改变元素占据空间,所以若是布局不做弹性或适应处理,只会使元素位于左上角。
3.zoom缩放后的最小字号为12像素,也就是说,即使你把页面做小了100倍,字体最小也会是12px,也由于这个原因,当缩小幅度大时,会影响页面缩放后的布局错乱。
实例:适应一定pc端不同屏幕尺寸,如显示器,笔记本等。使初始访问其不出现垂直滚动条

  <style>
    body {
      width: 100%;
      //保证缩放后仍然充满整个屏幕
      height: 100%;
      background-color: #f5f7f9 !important;
      display:flex;
    }
    //左右侧固定
    .left,.right{
	  flex:0 ,0 ,100px
	}
  </style>
  <body>
  <div class="left"></div>
  <div class="middel"></div>
 <div class="right"></div>
    <script>
    const StandWidth = 1920, StandHeight = 960;
    let curHeight = document.documentElement.clientHeight;
    const zoom = curHeight / StandHeight;
    //缩放整个body以适应屏幕
    document.body.style.zoom = zoom;
  </script>
  </body>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨灰ash2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值