• 项目中屏幕适配


    一、vw和vh适配方案

    •   按照设计稿的尺寸,将px按比例计算转为vw和vh
    •   转换公式如下:

    假设设计稿尺寸为1820*1080(做之前一定问清楚ui设计稿的尺寸)

           即:
            网页宽度=1920px
            网页高度=1080px
     

            我们都知道

            网页宽度=100vw

            网页高度=100vh


            所以,在1920*1080px的屏幕分辨率下

            19220px=100vw

            1080px=100vh

            

            这样一来,以一个宽300px和200px的div来说,其所占的宽高,以vw和vh为单位,计算方式如下:

            vwDiv  = ( 300px / 1920px )* 100vw

            vhDiv  = ( 200px / 1080px )* 100vw

            所以,就在1920*1080的屏幕分辨率下,计算出单个div的宽高

            当屏幕放大或者缩小时,div函数i一vw和vh作为宽高的,就会自动适应不同分辨率的屏幕

    所以,我们每次写CSS时转换一下就好了,但是用计算器很慢,所以,我们要借助scss的函数来帮助我们计算

    二、vh和vw适配的实行

    1.安装scss

    npm install sass@1.26.5 sass-loader@8.0.2 --save

      2.封装计算工具函数

    • src/styles下新建一个utils.scss文件,定义好设计稿的宽度和高度两个变量
    • 在这里使用scss内置的math.div函数,定义两个vwvh的计算函数
    • 我们传入具体的像素值,其帮我们自动计算出vwvh的值

        utils.scss

    1. //使用scss的math函数,https://sass-lang.com/documentation/breaking-changes/slash-div
    2. @use "sass:math"
    3. //默认设计稿的宽度
    4. $designWidth:1920;
    5. //默认设计稿的高度
    6. $designHeight:1080;
    7. //px转为vw的函数
    8. @function vw($px) {
    9.   @return math.div($px , $designWidth) * 100vw;
    10. }
    11. //px转为vh的函数
    12. @function vh($px) {  
    13.   @return math.div($px , $designHeight) * 100vh;
    14. }

    3.路径配置全局使用

       这里使用的是vue2.6vue-clii3搭建的vue项目,所以只需要在vue.config.js里配置一下utils.scss的路径,就可以全局使用了

    1. const path = require('path')
    2. function resolve(dir) {
    3. return path.join(__dirname, dir)
    4. }
    5. module.exports={
    6. publicPath: '',
    7. configureWebpack: {
    8. name: "app name",
    9. resolve: {
    10. alias: {
    11. '@': resolve('src')
    12. }
    13. }
    14. },
    15. css:{
    16. //全局配置utils.scss,详细配置参考vue-cli官网
    17. loaderOptions:{
    18. sass:{
    19. prependData:`@import "@/styles/utils.scss";`
    20. }
    21. }
    22. }
    23. }

    单独引入使用:

     4.在vue文件中使用

    三、定义js样式处理函数去进行字体大小的适配

    写在vue的原型上,全局的,通过this.getFontSize()去调用适配字体大小

    1. Vue.prototype.getFontSize = (size,defalteWidth = 1920) => {
    2. let clientWidth = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
    3. if (!clientWidth) return size;
    4. let scale = (clientWidth / defalteWidth);
    5. return Number((size*scale).toFixed(3));
    6. }

    如果不是vue项目,可以在js文件中写方法,引入到对应页面的js中

    1. let fitChartSize = (size,defalteWidth = 1920) => {
    2. let clientWidth = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
    3. if (!clientWidth) return size;
    4. let scale = (clientWidth / defalteWidth);
    5. return Number((size*scale).toFixed(3));
    6. }

    注意:

            vue的scss对应的node.js的版本

  • 相关阅读:
    Postman高频面试题及答案汇总(接口测试必备)
    11.20 至 11.27 五道典型题记录: 贪心 | 应用题 | 脑筋急转弯 | 区间问题 | 双指针
    电源硬件设计----电源组件基本知识
    计算机毕业设计之java+springboot基于vue的逍遥大药房管理系统
    SpringMVC的异常处理
    react-native渲染富文本的几种方案
    彻底搞懂Redis持久化机制,轻松应对工作面试
    亚马逊卖家必看:测评补单提升店铺排名和转化率的有效方式
    kubeadm创建kubernetes集群
    SpringBoot无侵入式实现API接口统一JSON返回
  • 原文地址:https://blog.csdn.net/slom_fxt/article/details/126758282