4

所以我正在尝试编写一个类似于http://unused-css.com/的 PHP 脚本 - 基本上在我的网站上找到所有未使用的 CSS 并将其删除以创建一个“干净”的 CSS 文件。

我使用 Firefox 插件“除尘”来抓取网站并显示所有未使用的选择器。

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。

谁能帮我确定问题?抱歉,对于问题出在哪里,我无法提供更多帮助。

4

1 回答 1

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 中的所有条目都消失了。

于 2013-03-10T12:25:34.413 回答