数据可视化大屏在完成交付后,客户反馈不是他们想要的,这边开发时用vue3脚手架开发出来的,效果也按照客户的要求实现了,但是最终不是客户需要的,客户要的是普通的html+js+css,在做之前收到的通知是vue来写,现在要改成html+js+css,所以做之前一定要再三确认对框架的要求,避免返工。
因为一直是用vue脚手架来写的,改成普通的html+js+css,代码的px转rem就不能自动完成了,需要前端手动处理。
这里我们使用scss来写的css,可以写一个方法
@function px2rem($px) {
@return $px / 100 * 1rem
}
我们需要将所有数字px替换为px2rem(数字),字符少的话,还可以手动来处理,但是太多的话,我们就要考虑使用js来处理了。
处理前的css
.pageTop {
width: 100%;
height: 84px;
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
position: absolute;
z-index: 0;
.left {
width: 30%;
position: relative;
height: 100%;
display: flex;
justify-content: flex-start;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
.address {
font-size: 14px;
font-family: PingFang;
font-weight: 500;
color: #C5E4FF;
margin-left: 30px;
margin-top: 50px;
span {
color: rgba(18, 244, 255, 1);
}
}
}
.right {
width: calc(30% - 30px);
margin-right: 30px;
position: relative;
height: 100%;
display: flex;
justify-content: flex-end;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
.weather {
font-size: 14px;
font-family: PingFang;
font-weight: 500;
color: #C5E4FF;
margin-top: 50px;
margin-left: 20px;
}
.date {
font-size: 14px;
margin-top: 50px;
font-family: PingFang;
font-weight: 500;
color: #C5E4FF;
}
}
.title {
position: relative;
width: 40%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
span {
font-size: 36px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #FBFFFF;
letter-spacing: 3px;
}
}
}
如果CSS内容以字符串形式存在于JavaScript中,你可以直接使用正则表达式进行替换。下面是一个简单的例子,展示了如何将CSS字符串中的所有数字px
替换为px2rem(数字)
:
// 示例CSS字符串
let cssStr = `
.pageTop {
width: 100%;
height: 84px;
// ... 其他CSS规则 ...
}
`;
// 使用正则表达式将数字后的px替换为px2rem(数字)
cssStr = cssStr.replace(/(\d+)px/g, (match, p1) => `px2rem(${p1})`);
console.log(cssStr); // 打印修改后的CSS字符串
在上面的代码中,我们使用了String.prototype.replace
方法与正则表达式一起使用。正则表达式/(\d+)px/g
匹配所有的数字px
模式,其中\d+
匹配一个或多个数字,px
匹配字面字符串"px",g
标志表示全局匹配。
当replace
方法的第二个参数是一个函数时,这个函数会为每个匹配的子串被调用。在上面的示例中,我们返回了字符串px2rem(数字)
,其中数字是正则表达式匹配的第一个组的内容(即p1
)。
我们调试输出后,就可以在控制面板里看到我们的代码了,复制出来再粘贴回去就可以了。
处理后的css
.pageTop {
width: 100%;
height: px2rem(84);
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
position: absolute;
z-index: 0;
.left {
width: 30%;
position: relative;
height: 100%;
display: flex;
justify-content: flex-start;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
.address {
font-size: px2rem(14);
font-family: PingFang;
font-weight: 500;
color: #C5E4FF;
margin-left: px2rem(30);
margin-top: px2rem(50);
span {
color: rgba(18, 244, 255, 1);
}
}
}
.right {
width: calc(30% - px2rem(30));
margin-right: px2rem(30);
position: relative;
height: 100%;
display: flex;
justify-content: flex-end;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
.weather {
font-size: px2rem(14);
font-family: PingFang;
font-weight: 500;
color: #C5E4FF;
margin-top: px2rem(50);
margin-left: px2rem(20);
}
.date {
font-size: px2rem(14);
margin-top: px2rem(50);
font-family: PingFang;
font-weight: 500;
color: #C5E4FF;
}
}
.title {
position: relative;
width: 40%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
flex-direction: row;
align-content: flex-start;
span {
font-size: px2rem(36);
font-family: PangMenZhengDao;
font-weight: 400;
color: #FBFFFF;
letter-spacing: px2rem(3);
}
}
}
部分不需要转换的地方手动改一下就完成了。
px转rem
为了可以快速使用,这里专门写了一个页面,可以快速实现我们想要的功能。