• postcss-px2rem-exclude 和 lib-flexible的适配


      对于前端项目而言,适配是很重要的,而且有时候也是一个令人比较头疼的问题。适配方案之一是使用rem,这里简单总结记录下有关px自动转rem的两个插件。

    • postcss-px2rem-exclude
      将样式文件中的px自动转为 rem。执行命令:

      npm install postcss-px2rem-exclude --save
      
    • lib-flexible
      该插件会自动在html的head中添加一个 meta name="viewport" 的标签,同时会自动设置html的font-size,大概是屏幕宽度除以10,也就是 1rem 等于 html 根节点的 font-size
      注意:

      1. 检查一下html文件的head中,如果有 meta name="viewport" 标签,需要将他注释掉,因为如果有这个标签的话,lib-flexible就会默认使用这个标签。而我们要使用lib-flexible自己生成的 meta name="viewport"来达到高清适配的效果。

      完成后,在 main.js 中引入 import 'lib-flexible'

    • 使用

      1. 在项目的 vue.config.js 文件中(如果没有则在根目录新建一个)配置
        module.exports = {
          css: {
            loaderOptions: {
              css: {},
              postcss: {
                plugins: [
                  require('postcss-px2rem-exclude')({
                    remUnit: 48,
                    exclude: '/node_modules/i',
                  }),
                ],
              },
            },
          },
        };
        
        • remUnit: 设置 rem 与 px 之间的转换关系
        • exclude:设置过滤的文件
      2. 重新运行项目即可(npm run serve)
    • 设置过滤的文件
      按照上面的设置完成后,发现可以自动转换了,但是像 element-ui 这样的第三方组件库,也被转换了,这...。而且设置了过滤文件后,发现不管用。试了很多种方法,都不行,最后是修改源码。
      修改前:

      module.exports = postcss.plugin('postcss-px2rem-exclude', function (options) {
        return function (css, result) {
          if (options.exclude && css.source.input.file.match(options.exclude) !== null) {
            result.root = css;
            return
          }
          var oldCssText = css.toString();
          var px2remIns = new Px2rem(options);
          var newCssText = px2remIns.generateRem(oldCssText);
          result.root = postcss.parse(newCssText)
        }
      });
      

      修改后:

      module.exports = postcss.plugin('postcss-px2rem-exclude', function (options) {
        return function (css, result) {
          try {
            var flag = options.exclude.includes('/')
            if (flag) {
              var arr = options.exclude.split('/')
              options.exclude = new RegExp(arr[1], arr[2])
            }
          } catch(e) {
            console.log(e)
          }
          if (options.exclude && css.source.input.file.match(options.exclude) !== null) {
            result.root = css;
            return
          }
          var oldCssText = css.toString();
          var px2remIns = new Px2rem(options);
          var newCssText = px2remIns.generateRem(oldCssText);
          result.root = postcss.parse(newCssText)
        }
      });
      
    • 修改 lib-flexible 插件源码
      如果不想页面缩的过小,可以设置 min-width,但是也会被转换为 rem,所以:
      在 refreshRem 方法中,将代码修改为:

      docEl.style.fontSize = (rem > 38 ? rem : 38) + 'px';
      

      具体要改为多少,看自己的需求。

  • 相关阅读:
    分页内存管理——虚拟地址到物理地址的转换【转】
    设备树(device tree)学习笔记【转】
    08 在设备树里描述platform_device【转】
    [dts]Device Tree机制【转】
    设备树快速入门【转】
    Linux 设备树详解【转】
    设备树处理之——device_node转换成platform_device【转】
    最新内核3.4)Linux 设备树加载I2C client adapter 的流程(内核3.4 高通)【转】
    基于tiny4412的Linux内核移植 --- aliases节点解析【转】
    Linux 文件系统IO性能优化【转】
  • 原文地址:https://www.cnblogs.com/aloneer/p/15340360.html
Copyright © 2020-2023  润新知