前言
一直比较喜欢收集网页特效,很多时候都会遇到CSS被压缩过的情况,这时查看起来就会非常不方便,有时为了减少文件大小,也会对自己的CSS进行压缩,网上提供这样服务的很多,但都不尽如人意,因此打算自己动手写一个JS来进行CSS的格式化和压缩
原理
CSS的结构如下:
选择器{ css属性声明:值;}
所以对CSS格式化也就比较简单,大致分为以下几步;
1、把多个空格合并成一个,去掉换行
2、对处理后的字符串按"{"进行分组
3、遍历分组,对含有"}"的部分再次以"}"进行分组
4、对分组后的数据进行处理,主要是加上空格和换行
对CSS压缩就比较简单了,把空格合并,去掉换行就可以了
格式化
下面分步对以上步骤进行实现。
初始化:
functionformathtmljscss(source, spaceWidth, formatType) {
this.source = source;
this.spaceStr = " ";
if(!isNaN(spaceWidth)) {
if(spaceWidth >1) {
this.spaceStr = "";
for(vari = 0; i
this.spaceStr += " ";
}
}
else{
this.spaceStr = " ";
}
}
this.formatType = formatType;
this.output = [];
}
这里几个参数分别是要格式化的CSS代码、CSS属性声明前空格宽度,类型(格式化/压缩)
1、把多个空格合并成一个,去掉换行:
formathtmljscss.prototype.removeSpace = function() {
this.source = this.source.replace(/s+| /g, " ")
.replace(/s*{s*/g, "{")
.replace(/s*}s*/g, "}")
.replace(/s*:s*/g, ":")
.replace(/s*;s*/g, ";");
}
2、对处理后的字符串按"{"进行分组
formathtmljscss.prototype.split = function() {
varbigqleft = this.source.split("{");
}
3、遍历分组,对含有"}"的部分再次以"}"进行分组
formathtmljscss.prototype.split = function() {
varbigqleft = this.source.split("{");
varbigqright;
for(vari = 0; i
if(bigqleft[i].indexOf("}") != -1) {
bigqright = bigqleft[i].split("}");
}
else{
}
}
}
4、对分组后的数据进行处理,主要是加上空格和换行
这里的处理主要分为,把CSS属性声明和值部分取出来,然后加上空格和换行:
formathtmljscss.prototype.split = function() {
varbigqleft = this.source.split("{");
varbigqright;
for(vari = 0; i
if(bigqleft[i].indexOf("}") != -1) {
bigqright = bigqleft[i].split("}");
varpv = bigqright[0].split(";");
for(varj = 0; j
pv[j] = this.formatStatement(this.trim(pv[j]),true);
if(pv[j].length >0) {
this.output.push(this.spaceStr + pv[j] + "; ");
}
}
this.output.push("} ");
bigqright[1] = this.trim(this.formatSelect(bigqright[1]));
if(bigqright[1].length >0) {
this.output.push(bigqright[1], " { ");
}
}
else{
this.output.push(this.trim(this.formatSelect(bigqleft[i])), " { ");
}
}
}
这里调用了几个方法:trim、formatSelect、formatStatement,下面一一说明。
trim:从命名就可以看出是去除首尾空格;
formathtmljscss.prototype.trim = function(str) {
returnstr.replace(/(^s*)|(s*$)/g, "");
}
formatSelect:是处理选择器部分语法,做法就是给"."前面加上空格,把","前后的空格去掉,把多个空格合并为一个:
formathtmljscss.prototype.formatSelect = function(str) {
returnstr.replace(/./g, " .")
.replace(/s+/g, " ")
.replace(/. /g, ".")
.replace(/s*,s*/g, ",");
}
formatStatement:是处理“css属性声明:值;”部分的语法,做法就是给":"后面加上空格,把多个空格合并为一个,去掉“#”后面的空格,去掉"px"前面的空格,去掉"-"两边的空格,去掉":"前面的空格:
formathtmljscss.prototype.formatStatement = function(str, autoCorrect) {
str = str.replace(/:/g, " : ")
.replace(/s+/g, " ")
.replace("# ", "#")
.replace(/s*px/ig, "px")
.replace(/s*-s*/g, "-")
.replace(/s*:/g, ":");
returnstr;
}
调用
调用部分比较简单,对于格式化来说就是去掉空格和换行,然后分组处理,对于压缩来说就是去掉空格和换行:
formathtmljscss.prototype.formatcss = function() {
if(this.formatType == "compress") {
this.removeSpace();
}
else{
this.removeSpace();
this.split();
this.source = this.output.join("");
}
}
界面HTML代码:
[[63738]]
[[63739]]
View Code
跟页面元素按钮绑定事件:
[[63738]]
[[63739]]
View Code
window.onload = function() {
varsubmitBtn = document.getElementById("submit");
vartabsize = document.getElementById("tabsize");
varsourceCon = document.getElementById("source");
varsize = 4;
varformatType = "format";
submitBtn.onclick = function() {
varradios = document.getElementsByName("format_type");
for(i = 0; i
if(radios[i].checked) {
formatType = radios[i].value;
break;
}
}
varformat = newformathtmljscss(sourceCon.value, size, formatType);
format.formatcss();
sourceCon.value = format.source;
}
tabsize.onchange = function() {
size = this.options[this.options.selectedIndex].value;
submitBtn.click();
returnfalse;
}
}
演示
欢迎大家测试挑刺哈!
[[63740]]
作者:Artwl 出处:http://artwl.cnblogs.com
本文首发博客园,版权归作者跟博客园共有。转载必须保留本段声明,并在页面显著位置给出本文链接,否则保留追究法律责任的权利。
推荐工具:在线测试正则表达式、JS/HTML在线格式化
网站题目:原生JS进行CSS格式化和压缩
网站链接:http://www.shufengxianlan.com/qtweb/news5/332605.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联