Задать вопрос
Ответы пользователя по тегу CSS
  • Как автоматически заменить в разных CSS-файлах любые относительные пути на абсолютные?

    0x9d8e
    @0x9d8e Автор вопроса
    Велосипедостроитель в терминальной стадии
    В общем решил это таким образом:
    Читаем каждый css-файл, регуляркой @([\.*\/\w+\/]*[\-\w]+\.(?>jpg|gif|png|svg|css|jpeg|woff|eot|ttf))@ (не очень-то ими владею, так что есть в ней проблемы) находим все ссылки на файлы. Для каждого совпадения делаем какие-то правки (для случаев типа ./filename.svg), конкатенируем эту ссылку с путём до css-файла в котором была ссылка и заменяем ей оригинал. После чего просто пишем всё в один большой файл (можно ещё минифицировать и всякое такое).

    private static function fixPathes($css_file_name, $file_string) {
        $path = dirname($css_file_name) . '/';
        $mathes = [];
        preg_match_all('@([\.*\/\w+\/]*[\-\w]+\.(?>jpg|gif|png|svg|css|jpeg|woff|eot|ttf))@iS', $file_string, $mathes);
        $fixed = [];
        foreach($mathes[0] as $original_file_name) {
    
            if(isset($fixed[$original_file_name]))
                continue;
    
            if(strpos($original_file_name, './') === 0) {
                $file_name = str_replace('./', '', $original_file_name);
            } else {
                $file_name = $original_file_name;
            }
    
            $file_string = str_replace($original_file_name, '/'.$path.$file_name, $file_string);
    
            $fixed[$original_file_name] = true;
        }
    
        return $file_string;
    }
    Ответ написан
    Комментировать