Last active
December 7, 2021 22:48
-
-
Save jhonnrodr/a90e88e5b65609f54b0a181183f6648b to your computer and use it in GitHub Desktop.
Minify AMP CSS in <style> with PHP/Laravel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In blade: | |
<style amp-custom> | |
{!! \App\Helpers\Minify::amp_custom() !!} | |
</style> | |
Create a file Minify.php | |
<?php | |
namespace App\Helpers; | |
use View; | |
class Minify | |
{ | |
public static function amp_custom() | |
{ | |
return self::minify_css(View::getSection('amp-custom')); | |
} | |
public static function minify_css($input) | |
{ | |
if(trim($input) === "") return $input; | |
return preg_replace( | |
array( | |
// Remove comment(s) | |
'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s', | |
// Remove unused white-space(s) | |
'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si', | |
// Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0` | |
'#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si', | |
// Replace `:0 0 0 0` with `:0` | |
'#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i', | |
// Replace `background-position:0` with `background-position:0 0` | |
'#(background-position):0(?=[;\}])#si', | |
// Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space | |
'#(?<=[\s:,\-])0+\.(\d+)#s', | |
// Minify string value | |
'#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si', | |
'#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si', | |
// Minify HEX color code | |
'#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i', | |
// Replace `(border|outline):none` with `(border|outline):0` | |
'#(?<=[\{;])(border|outline):none(?=[;\}\!])#', | |
// Remove empty selector(s) | |
'#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s' | |
), | |
array( | |
'$1', | |
'$1$2$3$4$5$6$7', | |
'$1', | |
':0', | |
'$1:0 0', | |
'.$1', | |
'$1$3', | |
'$1$2$4$5', | |
'$1$2$3', | |
'$1:0', | |
'$1$2' | |
), | |
$input); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment