大屏适配方案

1. vw(1920*1080等比例缩放)

  1. 插件px to rem & rpx & vw (cssrem),之后可以直接用px开发,插件会将px转换成vw。(此方案底部会出现留白,可通过 vh 实现高度顶满)

     

 

2. flexible.js + rem(1920*1080等比例缩放)

  1. 工具配置(配置完需重启编辑器) 

    1.1. vscode 安装px转rem自动计算的插件  

       

   1.2. 工具扩展中设置:因为flexible中将1920分成了24份,1rem = 80px

       

  2.引入flexible.js

(function flexible(window, document) {
  var docEl = document.documentElement;
  var dpr = window.devicePixelRatio || 1;

  // adjust body font size
  function setBodyFontSize() {
    if (document.body) {
      document.body.style.fontSize = 12 * dpr + "px";
    } else {
      document.addEventListener("DOMContentLoaded", setBodyFontSize);
    }
  }
  setBodyFontSize();

  // set 1rem = viewWidth / 10
  function setRemUnit() {
    var rem = docEl.clientWidth / 24;
    docEl.style.fontSize = rem + "px";
  }

  setRemUnit();

  // reset rem unit on page resize
  window.addEventListener("resize", setRemUnit);
  window.addEventListener("pageshow", function(e) {
    if (e.persisted) {
      setRemUnit();
    }
  });

  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement("body");
    var testElement = document.createElement("div");
    testElement.style.border = ".5px solid transparent";
    fakeBody.appendChild(testElement);
    docEl.appendChild(fakeBody);
    if (testElement.offsetHeight === 1) {
      docEl.classList.add("hairlines");
    }
    docEl.removeChild(fakeBody);
  }
})(window, document);

 3. 使用插件帮我们转换,(宽根据设计稿的尺寸进行设置, 高用vh)

vite.config.ts

import postcssPluginPx2rem from "postcss-plugin-px2rem"
export default ({mode}: { mode: string }) => defineConfig({
    css: {
            postcss: {
                plugins: [
                    postcssPluginPx2rem({
                      rootValue: 192, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
                      minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
                    })
                ]
        }
    }
}                

 

posted @ 2019-11-14 10:27  番茄西红柿u  阅读(291)  评论(0编辑  收藏  举报