引言 在h5开发中,我们经常会需要实现一些动效来让页面视觉效果更好,谈及动效便不可避免地会想到动效性能优化这个话题:减少页面DOM操作,可以使用CSS实现的动效不多出一行js代码 使用绝对定位脱离让D
顺晟科技
2021-09-07 12:49:19
267
我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数据库中作为配置项的,所以,这里不可避免的需要对css做解析,我这里给出我的解析方法,当然还有很大的优化空间,这只是一个初版,实现了最原始的解析过程,希望大家拍砖。
/**
* Css解析成json类
* Author:dreamzk
* Data: 2015.05.21.0001
* Release:b.15.05.21.01
*/
class CsstoJson{
/**
* CSS批量导入功能
* @function ImportCss
* @param $data{xxx:XXX; yyy:YYY;}
* @Description 按照一定规则导入CSS样式结构入库
* @return boolean
*/
public function ImportCss($post){
$data = str_replace("}","}&",$post); # 将}替换成}&
$data =explode(\'&\',$data); # &用于切割每个css样式表到数组
array_pop($data); # 去掉最后一个数组元素
$JsonData =self:: arrayToCss($data);
$length =1-count($JsonData);
$JsonData = substr($JsonData,$length,-1); # 截取字符串最后
$JsonData = "{".$JsonData."}";
$JsonData = json_decode($JsonData,true); # 转换成json数组
return $JsonData;
}
/**
* CSS数据样式化函数
* @function array_to_css
* @param $ArrayData 为格式话的css样式数据
*/
public function arrayToCss($ArrayData){
$GetData=null;
//遍历传送过来的数组
foreach($ArrayData as $key => $arraydatas ){
$arraydatas = str_replace("{","&{",$arraydatas); # 替换传送过来数据中的 { ,便于之后做字符串转换
$arraydatas = explode(\'&\',$arraydatas);
$jsondata = self::strToJson($arraydatas);
$GetData =$GetData.$jsondata.",";
}
return $GetData;
}
/**
* 解析数组里面的字符串操作
* @function strToJson
* $Strdata 二维数组,里面含有
*/
public function strToJson($Strdata){
//替换CSS数据名称
$Strdata[\'0\'] = str_replace(".","",$Strdata[\'0\']);
$Strdata[\'1\'] = str_replace("{","",$Strdata[\'1\']);
$Strdata[\'1\'] = str_replace("}","",$Strdata[\'1\']);
$temp = null;
$StrdataChild = explode(\';\',$Strdata[\'1\']);
array_pop($StrdataChild);
foreach($StrdataChild as $key => $StrdataChilds){
$StrdataChilds = explode(\':\',$StrdataChilds); # 分解每个类名下面的属性与具体数值的键值对
$ProName = trim($StrdataChilds[\'0\']); # 去掉表单字段的空格,不然入库无法识别
$jsondata = """.$ProName.""".\':\'.""".$StrdataChilds[\'1\']."","; # 把类似height:10px这样的键值对分开成想要的数据结构
$temp = $temp.$jsondata; # 操作css的height等具体字段配置关系
}
$ClassName = trim($Strdata[\'0\']); # 去掉表单字段的空格,不然入库无法识别
#获取当前字符串的长度
$length =1-count($temp);
#截取字符串最后
$temp = substr($temp,$length,-1);
#把当前所属分类名称加入到子集中
$temp = """."classname".""".":".""".$ClassName.""".",".$temp;
return """.$Strdata[\'0\'].""".":"."{".$temp."}";
}
}
$cssdata = ".wrapper .box{border:1px #e1e1e1 solid;}.wrapper .box .title{height:31px;border-bottom:1px #e1e1e1 solid;line-height:30px;}";
$toJson = new CsstoJson();
$reData = $toJson->ImportCss($cssdata);
var_dump($reData);
如果您有任何意见或建议,请联系作者
13
2022-09
13
2022-09
13
2022-09
23
2021-10
15
2021-09
07
2021-09