JS【实战】CSS 样式相关的处理

CSS 样式键转换

如 fontSize -> font-size

js 复制代码
// 函数封装 -- CSS样式键转换,如 fontSize -> font-size
function CSSformatKey(oldKey) {
  // 查找所有大写字母,转换为 "-小写"
  const newKey = oldKey.replace(/[A-Z]/g, (c) => `-${c.toLocaleLowerCase()}`);
  return newKey;
}
let oldKey = 'fontSize';
let result = CSSformatKey(oldKey);
console.log(result);

CSS 样式单位转换

px 转 vw

js 复制代码
// 函数封装 -- CSS样式单位转换,如 375px -> 100vw
function px2vw(components = []) {
  // 正则匹配 '10px' '9.5px',并对数值分组
  const reg = /^(\d+(\.\d+)?)px$/;
  components.forEach((component) => {
    const props = component.props || {};
    // 遍历组件的属性
    Object.keys(props).forEach((key) => {
      const val = props[key];

      // 非字符串无需转换;
      if (typeof val !== 'string') {
        return;
      }
      // 无px则无需转换
      if (reg.test(val) === false) {
        return;
      }
      // 取得匹配的分组,第1项为匹配的所有内容,如375px,第2项为匹配到的px前的数值,如375
      const arr = val.match(reg) || [];
      // 提取出数值部分
      const numStr = arr[1];
      // 将字符串数值转换为数字
      const num = parseFloat(numStr);
      // 因UI图的画布宽度是 375px,即100vw = 375px 则px 转 vw 的公式为  100vw = 375px/375*100
      const vwNum = (num / 375) * 100;
      // 避免无法除尽,保留两位小数
      props[key] = `${vwNum.toFixed(2)}vw`;
    });
  });
}

let components = [
  {
    props: {
      height: '100px',
    },
  },
  {
    props: {
      height: '140px',
    },
  },
];
px2vw(components);
console.log(components);

结果为:

js 复制代码
[ { props: { height: '26.67vw' } }, { props: { height: '37.33vw' } } ]
相关推荐
eric-sjq2 小时前
10 分钟实战:用 0.6B 本地模型生成中文网页(WanlyFrontend + 编译器全流程)
javascript·机器学习·自然语言处理·html
To_OC2 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
kyriewen3 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
一壶浊酒..4 小时前
Scrape Webpack练习
开发语言·javascript·webpack
默_笙7 小时前
⛵ 我用 React + TS 做了个"调色盘",顺便学会了企业级项目的目录架构
前端·javascript
渣波7 小时前
拒绝 Redux 样板代码:Zustand 核心原理与实战进阶指南(基础、异步与切片模式)
前端·javascript
C++、Java和Python的菜鸟8 小时前
第12章 前端Web进阶(Vue工程化+ElementPlus)
前端·javascript·vue.js
妙码生花8 小时前
让各大 AI 整理出来的前端工程命名最简实践(Vue + TS)
前端·javascript·vue.js
郭wes代码10 小时前
纯 CSS+JS 实战:手搓一张支持自定义的通用金色电子奖状(万字详细拆解)
前端·javascript·css
用户8471810541910 小时前
DeepAgents.js 教程 06—— 跨会话长期记忆(Memory与AGENTS.md)
javascript·agent