CSS压缩工具(自动合并重复的定义)

最近一个项目,css主文件居然到了9800行,我震惊了。

于是写了个合并相同css的php。

 

合并之后有点点小问题,我难得去找什么问题了,稍微改下css就ok。有个压缩功能,默认开启的,不过没试。

 

<?php
define('CMP', $argv>1?$argv[1]:true);//压缩
if(CMP){
	define('SPA','');
	define('TAB','');
	define('NL','');
}else{
	define('SPA',' ');
	define('NL',"\n");
}	define('TAB',"\t");

$str = file_get_contents('green1.css');
$str = preg_replace('/\/\*.*\*\//', '',$str);
$str = preg_replace('/\/\/.*/', '',$str);
/*echo '
==========================
'.$str.'
==========================
';*/
preg_match_all("/([^{]+)\{([^}]+)}/", $str, $out);
$arr = array();
echo 'There are :'.count($out[0]).' css classes'.chr(10);
for($i=0;$i<count($out[1]);$i++){
	$out[1][$i] = trim($out[1][$i]);
	$left = substr($out[1][$i],0,1);
	if($left=='.'){
		$left = 'dot';
		$right = substr($out[1][$i],1);
	}else if($left=='#'){
		$left = 'jin';
		$right = substr($out[1][$i],1);
	}else {
		$left = 'emp';
		$right = $out[1][$i];
	}
	$cls = $left.$right;
	if(isset($arr[$cls])) $arr[$cls] = array();

	$stys = explode(';', $out[2][$i]);
	for($j=0;$j<count($stys);$j++){
		$tmp = explode(':', $stys[$j]);
		if(count($tmp)==2){
			$arr[$cls][trim($tmp[0])] = trim($tmp[1]);
		}else if(strlen(trim($stys[$j]))>0){
			echo 'Error: '.$stys[$j].chr(10);
		}
	}
}
$str = '';
foreach($arr as $cls=>$v){
	$pre = substr($cls,0,3);
	$left = substr($cls,3);
	if($pre=='dot'){
		$cls = '.'.$left;
	}else if($pre=='jin'){
		$cls = '#'.$left;
	}else if($pre=='emp'){
		$cls = $left;
	}
	file_put_contents('green.css', $cls.'{'.NL, FILE_APPEND);
	foreach ($v as $sty=>$txt)
		file_put_contents('green.css', TAB.$sty.':'.SPA.$txt.";".NL, FILE_APPEND);
	file_put_contents('green.css', '}'."\r\n", FILE_APPEND);
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值