Nếu bạn có Ruby trên hệ thống của mình, bạn có thể làm điều này:
http://unixgods.org/~tilo/Ruby/Using_Variables_in_CSS_Files_with_Ruby_on_Rails.html
Điều này được tạo ra cho Rails, nhưng xem bên dưới để biết cách sửa đổi nó để chạy độc lập.
Bạn có thể sử dụng phương pháp này một cách độc lập với Rails, bằng cách viết một tập lệnh trình bao bọc Ruby nhỏ hoạt động cùng với site_sinstall.rb và đưa các đường dẫn CSS của bạn vào tài khoản và bạn có thể gọi mỗi khi bạn muốn tạo lại CSS của mình (ví dụ: trong quá trình khởi động trang web)
Bạn có thể chạy Ruby trên hầu hết mọi hệ điều hành, vì vậy đây phải là nền tảng khá độc lập.
ví dụ: trình bao bọc: created_CSS.rb (chạy tập lệnh này bất cứ khi nào bạn cần tạo CSS)
#/usr/bin/ruby # preferably Ruby 1.9.2 or higher
require './site_settings.rb' # assuming your site_settings file is on the same level
CSS_IN_PATH = File.join( PATH-TO-YOUR-PROJECT, 'css-input-files')
CSS_OUT_PATH = File.join( PATH-TO-YOUR-PROJECT, 'static' , 'stylesheets' )
Site.generate_CSS_files( CSS_IN_PATH , CSS_OUT_PATH )
phương thức Gener_CSS_files trong site_sinstall.rb sau đó cần được sửa đổi như thế này:
module Site
# ... see above link for complete contents
# Module Method which generates an OUTPUT CSS file *.css for each INPUT CSS file *.css.in we find in our CSS directory
# replacing any mention of Color Constants , e.g. #SomeColor# , with the corresponding color code defined in Site::Color
#
# We will only generate CSS files if they are deleted or the input file is newer / modified
#
def self.generate_CSS_files(input_path = File.join( Rails.root.to_s , 'public' ,'stylesheets') ,
output_path = File.join( Rails.root.to_s , 'public' ,'stylesheets'))
# assuming all your CSS files live under "./public/stylesheets"
Dir.glob( File.join( input_path, '*.css.in') ).each do |filename_in|
filename_out = File.join( output_path , File.basename( filename_in.sub(/.in$/, '') ))
# if the output CSS file doesn't exist, or the the input CSS file is newer than the output CSS file:
if (! File.exists?(filename_out)) || (File.stat( filename_in ).mtime > File.stat( filename_out ).mtime)
# in this case, we'll need to create the output CSS file fresh:
puts " processing #{filename_in}\n --> generating #{filename_out}"
out_file = File.open( filename_out, 'w' )
File.open( filename_in , 'r' ).each do |line|
if line =~ /^\s*\/\*/ || line =~ /^\s+$/ # ignore empty lines, and lines starting with a comment
out_file.print(line)
next
end
while line =~ /#(\w+)#/ do # substitute all the constants in each line
line.sub!( /#\w+#/ , Site::Color.const_get( $1 ) ) # with the color the constant defines
end
out_file.print(line)
end
out_file.close
end # if ..
end
end # def self.generate_CSS_files
end # module Site