我正在寻求升级到更新的CSS minifier,它可以在PHP中缩小CSS。我目前正在使用旧版https://github.com/mrclay/minify
但是,我还发现http://code.google.com/p/cssmin/似乎更频繁地更新,并且经常被提及。
对于速度和兼容性以及较新的CSS3规则和htc文件,您对这两个库有什么经验?
我已经发现Minify必须在我的情况下进行编辑才能在我的网站上工作,因为当放在另一个目录中时,包含似乎不能很好地工作,这可以通过更换文件来更轻松地进行更新工作。 / p>
缩小的CSS将存储在CSS文件中一次,直到原始CSS文件更新为止,因此缩小器将不会经常运行。但是,我不希望访问者在CSS更新后第一次访问网站时必须等待太长时间。
提前致谢!
答案 0 :(得分:6)
我通常也会使用自己的缩小器:
<?php
function compress ($code) {
$code = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $code);
$code = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $code);
$code = str_replace('{ ', '{', $code);
$code = str_replace(' }', '}', $code);
$code = str_replace('; ', ';', $code);
return $code;
}
但最近已切换到SASS所以现在我使用它的--style = compressed。
我也尝试过CSSTidy,它不仅仅是简化并且可以与PHP一起使用:
<?php
include DOCROOT . 'Lib/CSSTidy/class.csstidy.php';
$cssTidy = new csstidy();
$cssTidy->parse($CSSCode);
$cssTidy->set_cfg('remove_last_;', true);
echo $cssTidy->print->plain();
答案 1 :(得分:1)
YUI compressor。您甚至可以创建一个ANT任务来在CSS上运行它,同时生成可部署的版本和内容
答案 2 :(得分:0)
虽然这不是一个编程问题,但我实际上使用了我自己的,非常简单的缩小器:
public static function CompressCssFile($file) {
ob_start(array(self::GetInstance(), 'compressCss'));
header('Cache-Control: max-age='.(3600 * 24).', must-revalidate');
header('Content-type: text/css');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + (3600 * 168)) . ' GMT');
header('Last modified: ' . (file_exists($file) ? filemtime($file) : gmdate('D, d M Y H:i:s', time())) . ' GMT');
include_once $file;
ob_end_flush();
}
private function compressCss($buffer) {
// Remove comments:
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// Remove tabs, excessive spaces and newlines
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' '), '', $buffer);
return $buffer;
}
非常适合我。
答案 3 :(得分:0)
http://code.google.com/p/minify/
我在所有项目中使用它。它很容易设置:只需将“min”目录放在根文件夹中,然后转到http://yourserver.com/min将文件添加到minify URL。
它的主要优点是生产,但是在开发中使用它可能会令人沮丧,因为文件被缓存(因此,如果您的CSS文件不断变化,这不是您的最佳选择)。但是,它非常强大,可以组合多个CSS或多个JS文件,并缓存组合的缩小文件,以显着优化加载时间。
P.S。
我将此与lessphp https://github.com/leafo/lessphp结合使用 这个较少的PHP实现仍然有一些关于解析百分比的错误,但除此之外就像魅力一样。
答案 4 :(得分:0)
这非常好:https://github.com/leafo/lessphp 您可以在PHP脚本中将其用作类,也可以从命令行执行它。它将Less编译成CSS并且还可以缩小它。即使你不使用Less,它仍然可以缩小普通的旧CSS。
答案 5 :(得分:0)
作为https://packagist.org/packages/tubalmartin/cssmin的作者,我建议你试一试吗?它是一个最初基于YUI压缩器的PHP端口。如果你问我,它应该覆盖CSS3就好了;)
答案 6 :(得分:0)
此article也有一些示例代码,并带有解释。我发现此代码块比此处的其他代码更完整,更易于阅读:
function minimizeCSS($css){
$css = preg_replace('/\/\*((?!\*\/).)*\*\//', '', $css); // negative look ahead to remove comments
$css = preg_replace('/\s{2,}/', ' ', $css); // remove extra whitespace
$css = preg_replace('/\s*([:;{}])\s*/', '$1', $css); // remove unneeded whitespace
$css = preg_replace('/;}/', '}', $css); // remove last semicolon
return $css;
}
一个测试是:
/* crazy ** /** test */ body { /* who would write css
like this? */background: white !important;}
a
{
color :blue
;
}
哪个会成为:
body{background:white !important}a{color:blue}
对以下情况进行正确处理的测试: