如何优雅实现页面动态样式
场景:我有两个div,第一个div内边距30px,第二个内边距20px
想要实现的功能:如何写一个公共样式,可以动态接收参数,在标签里调用时直接传过来我想要的值
如:
<div class="padding(20)">div>
<style lang='less' >
.padding(e){
padding:e + 'px'
}
style>
@list: 5, 10, 15, 20, 30;
each(@list, {
.pd-@{value} {
padding: @value * 1px;
}
})
如果是根据类名动态设置样式,需要加点js代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<link rel="icon" href="" />
<title>html</title>
<style>
/* 选择其 class 属性值中包含 "padding-" 子串的每个元素
这里可以写一些此类的公共样式*/
[class*="padding-"] {
margin: 20px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="padding-10 other">这里的内边距为10</div>
<div class="padding-20 anywhere">这里的内边距为20</div>
<div class="padding-30">这里的内边距为30</div>
<p class="padding">这个无效</p>
<script>
let list = document.querySelectorAll(' [class*="padding-"]');
list.forEach((item, index) => {
//将当前元素的class集合转为数组并遍历
Array.from(item.classList).forEach((item2) => {
//找到class名包含padding-的class
if (item2.indexOf("padding-") !== -1) {
//将获取到的padding-10,padding-20等等,按-分割,再获取到设置的具体值,
//值的类型为字符串,如需要可自行转换为数字。
let paddingValue = item2.split("-")[1];
//设置padding的值为calss(如padding-10)上对应的值
item.style.padding = paddingValue + "px";
}
});
});
</script>
</body>
</html>
谢谢大家的回答,已解决问题,写了一篇文章以此记录,可以来看看~
https://blog.csdn.net/ke_sin/article/details/128080144?spm=1001.2014.3001.5502