所以我正在尝试编写一个与http://unused-css.com/类似的PHP脚本 - 基本上找到我网站上所有未使用的CSS并删除它以创建一个“干净”的CSS文件。
我使用Firefox插件'Dust me'来抓取网站并显示所有未使用的选择器。
Dustme插件以下列格式返回未使用的选择器:
#header #nav
#header #nav p
#header #nav p a
etc
所以我的PHP脚本如下:
<?php
//My site CSS (compressed) -- a small test sample
$allcss =
"body{color:#1c4866;font:13px/16px;}
#header #nav {float: left;}
#header #nav p {font-weight: bold;}
#header #nav p a {color: blue;}
input,textarea,select{font:13px/16px;color:#999;}";
//A sample of unused CSS selectors as returned by The Dustme plugin
$unusedcss =
"#header #nav
#header #nav p
#header #nav p a";
//and the code:
$rules = preg_split ('/$\R?^/m', $allcss); //Create array from all site css
$remove = preg_split ('/$\R?^/m', $unusedcss); //Create array from unused CSS selectors
$final = array();
foreach ($rules as $rule)
{
if (!in_array(substr($rule, 0, strpos($rule, " ")), $remove) )
$final[] = $rule .= "<br />";
}
echo implode("\n", $final);
当我将最终回显的结果粘贴到CSS文件中时,CSS的加载已被删除,甚至是网站上使用的CSS。
任何人都可以帮我识别问题吗?对不起,我不能在问题所在的地方提供更多帮助。
答案 0 :(得分:1)
您是否尝试过更换:
if (!in_array(substr($rule, 0, strpos($rule, " ")), $remove) )
$final[] = $rule .= "<br />";
使用:
if (!in_array(substr($rule, 0, strpos($rule, " {")), $remove) ) {
$final[] = $rule .= "<br />";
}
我在本地尝试了这个,在$ final中$ remove中的所有条目都消失了。