Быстрая минификация css для bitrix
Идея в том, чтобы взять готовую php библиотеку для минификации css и рекурсивно пройтись им по всем css файлам шаблона, создавая min копии, которые битрикс подхватывает автоматически.
Готовых решений для минификации css на php полно, ссылку на какой-то конкретный давать не буду, т.к. сам с ними еще не работал. Использовать готовое решение это правильный подход. Ниже будет неправильный :)
Я для своего блога написал экспериментальный скриптик которые делает min.css файлы для всех файлов стилей.
<? $dir = new RecursiveDirectoryIterator($_SERVER['DOCUMENT_ROOT'].'/local/'); // в папке local $it = new RecursiveIteratorIterator($dir); $res = new RegexIterator($it, '/^.+(?<!min)\.css$/i', RecursiveRegexIterator::GET_MATCH); // найдёт все css файлы (не *.min.css) foreach ($res as $arFiles) { foreach ($arFiles as $file) { $css = file_get_contents($file); $minCss = preg_replace( array( "/\n\s+/", // удаляет пробелы-отступы '!/\*[^*]*\*+([^/][^*]*\*+)*/!', // удаляет комментарии "/[\n\r]+/", // удаляет все переносы строк ), "", $css ); $minCss = str_ireplace( array(';}', ' {', ' }', ': ', ', .', "\t", ':0px', ' !important', ', ', 'font-weight:normal', 'font-weight:bold', ':0.', ' >', '> '), array('}', '{', '}', ':', ',.', " ", ':0', '!important', ',', 'font-weight:400', 'font-weight:700', ':.', '>', '>'), $minCss ); // убирает немного пробелов и ненужных символов $minCss = preg_replace("/\s\s+/", ' ', $minCss); // более 2-х пробелов заменяет на 1 $minCss = preg_replace("/\}[\w\s#=\",-:()\[\]\*~\+>^\$]+\{\}/i", '}', $minCss); // Удаляет селекторы с пустыми стилями $minCss = preg_replace("/url\(['\"](.+?)['\"]\)/i", 'url($1)', $minCss); // Удаляет кавычки в url $minCss = preg_replace('/([^=])#([a-f\d])\2([a-f\d])\3([a-f\d])\4([\s;}])/i', '$1#$2$3$4$5', $minCss); // Укарочивает hex // минифицированный css будет записан в файл, рядом с оригиналом, в .min.css $minFile = substr_replace($file, 'min.css', mb_strlen($file)-3, 3); file_put_contents($minFile, $minCss); } }
Простой скрипт, но опасный, т.к. может сломать вёрстку. Есть небезопасные замены, которые в редких случаях могут приводить к неправильному результату. Использовать на свой страх и риск.
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.