前端编程-拷贝css样式到内联样式
2023-04-18 14:26:21 时间
网页中,文档结构是由HTML定义的,文档外观是由css(样式文件)定义的。通常css样式可以写在外部单独的css文件中,然后通过<link>元素引入,也可以写在<head>标签的子节点<style>元素中,也可以直接写在DOM元素style属性里(内联样式)。
1.使用css文件的样式定义
2.使用<style>来定义
3.使用内联样式
对于重用的样式最好写在单独的css文件中,比如前端框架,无论是bootstrap还是layui,都用自己单独的css文件来定义通用的元素样式。
对于单独本页面个性化的样式,如果较多也可以定义在单独的css文件中,较少可以写在本页面的<style>元素中,如果需要定义的样式属性不多,也可以写在DOM元素的style属性中。
我们有时在页面中会遇到将table导出为Excel表,或者页面某区域导出为word文档。具体实现可以由前端js库实现,或者后台实现。如果使用外部css文件,或者<style>元素定义,可能会出现导出时丢失样式的情况。这种情况下,我们最好使用内联样式。
但是为需要样式的每个DOM元素定义内联样式有些麻烦。这时候我们可以使用js将外部css文件或<style>元素里的样式拷贝到对应的DOM元素的style属性里。思路为用正则表达式处理css文件或<style>元素里的文本,根据样式选择器选择页面中对应的DOM元素,然后把对应文本区域里的样式属性赋值给对应DOM元素的style属性。
下面简单演示实现原理(只支持class选择器,并且css样式定义时没有使用“,”逗号来同时定义多个选择器的样式)
$('body').find('[class]').each((i, x) => {
var classes = $(x).attr('class').trim().split(' ');
classes.forEach(class0 => {
var styleText=$('style').html();//每次都定义,定义到全局会报错
var matches = styleText.match(RegExp('\.' + class0.trim() + '\s*{([^}]*)}'))
if (!!matches) {
var styleText = matches[1].replaceAll('
', '');
var oldStyle = $(x).attr('style');
if (!oldStyle) {
oldStyle = '';
}
$(x).attr('style', oldStyle + styleText);
}
})
})
效果如下:
执行拷贝css到内联样式js前,DOM元素没有style属性。
执行拷贝css到内联样式js后,DOM元素拷贝了对应的样式到style属性。
相关文章
- Spring 事务失效场景总结
- git或gitee 提交代码到远程仓库
- gitee 创建代码仓库,并提交本地代码
- Logback 实现日志链路追踪
- Jackson 使用 @JsonFormat 注解进行时间格式化
- linux 安装redis
- Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
- Zookeeper 实现 ssl 双向认证
- keystore 与 trust store 的区别 及 keytool 常用命令
- webflux 的使用总结
- Feign 实现微服务调用及进行服务熔断与降级
- Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
- zookeeper分布式锁原理及使用 curator 实现分布式锁
- zookeeper 节点介绍及节点常用命令总结
- 深入理解Kafka核心设计及原理(六):Controller选举机制,分区副本leader选举机制,再均衡机制
- 计算机界最大“追书坑”,82岁大神高德纳仍在笔耕不辍
- Web前端开发必不可少的9个开源框架
- 树的遍历
- JavaScript vs Dart 两者之间的比较
- Jstack 查看线程状态及定位占用 cpu 较高的 java 线程