CSSMinifier is a compact, simple, and experimental tool crafted in PHP, designed for minifying CSS files. It strategically removes all unnecessary characters from your CSS code without compromising its functionality. The result is faster style loading, reduced bandwidth consumption, and consequently, enhanced user experience and SEO performance.
- Simplicity: Removes comments, whitespaces, and other non-essential characters
- Compatibility: Functions with CSS3 and earlier CSS versions
- Ease of Use: Easily integrates into any PHP project with minimal setup
- Flexible Configuration: Customizable minification options
- Color Compression: Converts and compresses color values (#aabbcc → #abc, rgb() → hex)
- Font Weight Optimization: Converts named font-weights to numeric values
- Important Comments Preservation: Keeps /*! */ comments for licenses
- File Operations: Direct file minification support with batch processing
- Statistics: Get detailed compression statistics
- Validation: Built-in CSS validation to ensure output integrity
- Feature Detection: Detect modern CSS features in your code
- PHP 8.0 or higher
- No external dependencies
git clone https://github.com/GLOBUS-studio/CSSMinifier.gitDownload CSSMinifier.php and include it in your project:
require_once 'path/to/CSSMinifier.php';require_once 'CSSMinifier.php';
$minifier = new CSSMinifier();
$css = file_get_contents('style.css');
$minified = $minifier->minify($css);
file_put_contents('style.min.css', $minified);$minifier = new CSSMinifier();
$css = file_get_contents('style.css');
$result = $minifier->minifyWithStats($css);
echo "Minified CSS: " . $result['minified'] . "\n";
echo "Original: {$result['stats']['original_size']} bytes\n";
echo "Minified: {$result['stats']['minified_size']} bytes\n";
echo "Savings: {$result['stats']['savings_percent']}%\n";
echo "Valid: " . ($result['valid'] ? 'Yes' : 'No') . "\n";$minifier = new CSSMinifier();
$files = [
'css/main.css',
'css/components.css',
'css/layout.css'
];
// Minify all files and save with .min.css extension
$results = $minifier->minifyFiles($files);
foreach ($results as $file => $result) {
if ($result['success']) {
echo "✓ {$file} → {$result['output']} ({$result['savings_percent']}% saved)\n";
} else {
echo "✗ {$file}: {$result['error']}\n";
}
}$minifier = new CSSMinifier([
'preserve_important_comments' => true, // Keep /*! */ comments
'remove_charset' => false, // Keep @charset
'compress_colors' => true, // Compress colors
'compress_font_weight' => true // Optimize font-weight
]);
$minified = $minifier->minify($css);$minifier = new CSSMinifier();
$minified = $minifier->minify($css);
// Quick validation
if (!$minifier->validate($minified)) {
echo "Warning: Minified CSS may have issues!\n";
// Get detailed report
$report = $minifier->getValidationReport($minified);
foreach ($report['errors'] as $error) {
echo "- {$error}\n";
}
}$minifier = new CSSMinifier();
$css = file_get_contents('style.css');
$features = $minifier->detectFeatures($css);
echo "Detected CSS features:\n";
foreach ($features as $feature => $detected) {
if ($detected) {
echo "- {$feature}\n";
}
}$minifier = new CSSMinifier();
try {
// Minify single file
$minifier->minifyFile('input.css', 'output.min.css');
echo "✓ Minification successful!\n";
} catch (RuntimeException $e) {
echo "✗ Error: " . $e->getMessage() . "\n";
}| Option | Type | Default | Description |
|---|---|---|---|
preserve_important_comments |
bool | true |
Keep comments marked with /*! ... */ |
remove_charset |
bool | false |
Remove @charset declarations |
compress_colors |
bool | true |
Compress hex colors and convert rgb() to hex |
compress_font_weight |
bool | true |
Convert normal/bold to 400/700 |
- CSS Variables:
--custom-property,var(--name) - CSS Functions:
calc(),clamp(),min(),max() - Color Functions:
rgb(),rgba(),hsl(),hsla() - Layout: Grid, Flexbox properties
- Media Queries:
@mediawith complex conditions - At-rules:
@supports,@layer,@container,@keyframes - Pseudo-elements:
::before,::after,:hover, etc. - Nested Functions:
calc(100% - min(20px, 5vw)) - Gradients:
linear-gradient(),radial-gradient() - Transforms & Animations: All standard properties
- Multi-line values:
grid-template-areas(verify output) - Deep nesting: Functions nested >10 levels
- URL with special chars: May need testing
- Source maps: Not generated
- Preprocessors: SCSS, LESS, Stylus syntax
- Modern color spaces:
oklch(),lab(),lch() - CSS-in-JS: Runtime-generated styles
Minify CSS string and return minified result.
Minify a single file. If $output is null, overwrites input file.
Batch minify multiple files. Returns array with results for each file.
Minify and return array with minified CSS, stats, and validation result.
Quick validation check. Returns true if CSS appears valid.
Detailed validation with error messages.
Get size statistics comparing original and minified CSS.
Detect modern CSS features used in the code.
Get CSSMinifier version.
- Small websites (< 50 pages)
- Landing pages and portfolios
- Personal blogs
- Prototypes and MVPs
- Internal tools
- Medium sites (test thoroughly first)
- Sites with complex CSS frameworks
- Projects with aggressive deadlines
- E-commerce platforms
- Banking/Financial applications
- Large corporate sites (> 100 pages)
- Mission-critical systems
- Speed: ~0.1-0.5s for typical CSS files (< 100KB)
- Memory: Minimal overhead, handles files up to 5MB
- Compression: Average 30-50% file size reduction
try {
$minifier = new CSSMinifier();
$minified = $minifier->minify($css);
if (!$minifier->validate($minified)) {
throw new Exception("Validation failed");
}
file_put_contents('output.min.css', $minified);
} catch (RuntimeException $e) {
error_log("Minification error: " . $e->getMessage());
// Fallback: use original CSS
file_put_contents('output.min.css', $css);
}- File Size: Warning triggered for files > 5MB
- Nesting Depth: Functions nested > 10 levels may not preserve correctly
- Exotic Features: Cutting-edge CSS features may need verification
- No Optimization: Doesn't optimize selectors or remove duplicates
| Feature | CSSMinifier | cssnano | clean-css |
|---|---|---|---|
| Language | PHP | JavaScript | JavaScript |
| Size | ~15KB | ~500KB | ~200KB |
| Dependencies | 0 | 20+ | 5+ |
| Speed | Fast | Very Fast | Fast |
| Modern CSS | ✅ Good | ✅ Excellent | ✅ Excellent |
| Source Maps | ❌ | ✅ | ✅ |
| Advanced Opts | Basic | Extensive | Extensive |
| Best For | PHP projects | Build tools | Node.js apps |
Solution: Check for unclosed strings or unbalanced braces in original CSS.
Solution: Use detectFeatures() to see if exotic features are used.
Solution: File may be too large (> 1MB). Consider splitting CSS.
Contributions welcome! Please:
- Test your changes thoroughly
- Update documentation
- Add examples for new features
- Follow existing code style
MIT License - free to use in personal and commercial projects.
-
1.2.0 (Current):
- Improved validation with escape sequence handling
- Enhanced at-rules processing for nested structures
- Better error reporting
- Performance optimizations
- Added feature detection
- Fixed issues with strings in at-rules
-
1.0.0: Initial stable release with full modern CSS support
- 🐛 Issues: GitHub Issues
- 📖 Docs: Documentation
- 💬 Discussions: GitHub Discussions
Made with ❤️ by GLOBUS Studio