用scss写css,如何在写的时候直接能用px做为单位,但输出为rem单位?

用scss写css,如何在写的时候直接能用px做为单位,但输出为rem单位

比如以375px为宽度,我的html{font-size:4.26666vw;}
这样的scss如何写函数?

阅读 1.1k
avatarAI BotBETA

在SCSS中,你可以使用函数和变量来将px单位转换为rem单位。以下是一个简单的例子,它定义了一个函数,该函数接受一个px值作为参数,并返回相应的rem值。

首先,你需要确定你的基准字体大小(通常是基于视口宽度vw的)。在你的例子中,你已经有了html { font-size: 4.26666vw; }。这意味着每1vw等于0.25rem(因为4.26666vw等于1rem)。

现在,你可以定义一个SCSS函数,将px值转换为rem值:

@function px-to-rem($px) {
  $base-font-size: 4.26666vw; // 你的基准字体大小
  $vw-to-rem: 0.25rem; // 1vw等于多少rem

  @return ($px / $base-font-size) * 100 * $vw-to-rem;
}

// 使用函数
.your-class {
  width: px-to-rem(375px); // 这将输出相应的rem值
}

这个函数首先将px值除以基准字体大小(以vw为单位),然后乘以100(因为vw是视口宽度的百分比),最后乘以vw到rem的转换系数。

注意,这种方法假设你的视口宽度始终保持不变,或者你的基准字体大小是响应式的。如果视口宽度或基准字体大小发生变化,你需要相应地调整函数。

3 个回答

用插件转,参考这个:https://npm.io/package/postcss-px-to-viewport

module.exports = ({webpack}) => {
    return {
        plugins: {
            'postcss-px-to-viewport': {
                unitToConvert: 'px', // 需要转换的单位,默认为"px"
                viewportWidth: 750, // 设计稿的视口宽度
                unitPrecision: 5, // 单位转换后保留的精度
                propList: ['*'], // 能转化为vw的属性列表
                viewportUnit: 'vw', // 希望使用的视口单位
                fontViewportUnit: 'vw', // 字体使用的视口单位
                selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
                minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
                mediaQuery: false, // 媒体查询里的单位是否需要转换单位
                replace: true, //  是否直接更换属性值,而不添加备用属性
                exclude: [/preview/, /header/], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
                include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换
                landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
            },
        },
    };
};

可以使用插件postcss-pxtorem + flexible.js啊,在编译打包代码的时候,pxtorem会把页面上的px单位转化为rem单位,而flexible根据浏览器的可视窗口大小,动态地去设置根节点font-size的值,也就是rem的基准值,监听页面大小,将值动态的给到pxtorem配置中。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题