一个10行代码的大屏自适应方案

335 阅读2分钟

本篇解决的是同分辨率,不同尺寸的屏幕自适应问题,以及开发者屏幕和正式版屏幕不适配的问题。

屏幕分辨率和尺寸

屏幕分辨率是指纵横向上的像素点数,单位是px。屏幕尺寸是指屏幕对角线的长短。分辨率决定的是屏幕的长宽比、清晰度,尺寸决定的是屏幕的大小。就是说,两块屏幕同样都是1920*1080的分辨率,但是屏幕大小不同,那么就一定存在一个系数,将小的屏幕同比放大到一定倍数,就会和大的屏幕相同。根据上面的理念,利用代码,求出这个系数,然后再通过css进行放大,就可以达到自适应的效果。

求放大系数

以3200*1200分辨率的屏幕为例,因为分辨率的单位是px,所以直接将页面大小设置为3200*1200px就可以,然后用当前屏幕的宽度除以3200就得到了放大系数,再利用transform的scale将页面放大就可以实现自适应了。这么做的好处是铺页面的时候直接根据设计稿的大小使用px做单位就可以了,不需要使用百分比或者rem等方法做自适应。vue代码为例:

<template>
  <div
    class="app-container"
    :style="`
    width:3200px;
    height:1200px;
    transform:scale(${scaleNum});
    -ms-transform:scale(${scaleNum});
    -moz-transform:scale(${scaleNum});
    -webkit-transform:scale(${scaleNum});
    -o-transform:scale(${scaleNum});
    transform-origin:left top;`"
  >
  </div>
</template>

<script>
export default {
  data() {
    return {
      scaleNum: 1,
    };
  },
  mounted() {
    let scale = () => {
      this.scaleNum = (window.innerWidth / 3200).toFixed(5);
    };
    scale();
    window.onresize = function () {
      scale();
    };
  },
};
</script>

开发者屏幕和正式屏幕的适配

代码中是用宽度计算的放大系数,那为什么不用高度呢?开发使用的主流屏幕大部分都是1920*1080的分辨率,而大屏大部分都是类似带鱼屏这种非常长的屏幕,用宽度计算,再开发屏幕上会显示成屏幕下方留白,可以一目了然的看到整个页面的布局,如果使用高度计算,会出现横向滚动条,不方便做开发。

使用宽度计算: image.png

使用高度计算: image.png