代码之家  ›  专栏  ›  技术社区  ›  oldhomemovie

在Ruby中解析、编辑和输出CSS

  •  4
  • oldhomemovie  · 技术社区  · 14 年前

    是否有一个gem可以在Ruby中执行css编辑和解析?我需要的是打开 css 文件,执行 find

    draft = CSSParser.load('structure.css')
    draft.find('#header a').style('color', '#333')
    draft.render
    

    4 回复  |  直到 14 年前
        1
  •  1
  •   oldhomemovie    14 年前

    我采取了一些措施来解决我的问题。目前,下面的代码能够改变CSS,尽管它缺少漂亮的finder行 draft.find('#header a').style('color', '#333') :

    CSS格式:

    $red: #900;
    
    #hello_world a{
      font-size: 1pt + 3pt;
    
      &:hover{ color: $red + #333 }
    
      color: #444333;
    }
    

    代码:

    require 'rubygems'
    require 'haml'
    require 'sass'
    
    def get_file_as_string(filename)
      data = ''
      File.open(filename, "r").each_line {|line| data += line}
      data
    end
    
    engine = Sass::Engine.new(template, :syntax => :scss)
    result, extends = engine.to_tree.perform(Sass::Environment.new).cssize
    
    @x = result.children[1] # nice search method should be here
    
    class Sass::Tree::RuleNode
      def set_property(property, value)
        prop = self.children.first{|child| child.class == 'Sass::Tree::PropNode' && child.instance_variable_get(:@resolved_name) == property }
        prop.instance_variable_set(:@resolved_value, value)
      end
    end
    
    @x.set_property('color', '#362')
    
    puts result.to_s
    
        2
  •  0
  •   wsanville    14 年前
        3
  •  0
  •   pablorc    14 年前

    尝试 Sass (非常棒的样式表)。

    我在用它,它太棒了!

        4
  •  0
  •   emptyflask    14 年前

    Sass包含一个CSS->Sass转换器,您可以创建“mixin”和变量以在样式表中使用。我知道这不完全是你所要求的,但取决于你试图做什么,这可能是一个更好的解决办法。

    否则,看起来ruby css解析器就和您不需要自己编写的东西一样接近了。