Css parser
Ruby CSS Parser
By Alex Dunae (dunae.ca, e-mail 'code' at the same domain), 2007-11. The project is written primarily in Ruby, distributed under the Other license, first published in 2009. Key topics include: css-parser, ruby.
Ruby CSS Parser

Load, parse and cascade CSS rule sets in Ruby.
Setup
Bashgem install css_parser
Usage
Rubyrequire 'css_parser' include CssParser parser = CssParser::Parser.new parser.load_uri!('http://example.com/styles/style.css') parser = CssParser::Parser.new parser.load_uri!('file://home/user/styles/style.css') # load a remote file, setting the base_uri and media_types parser.load_uri!('../style.css', {base_uri: 'http://example.com/styles/inc/', media_types: [:screen, :handheld]}) # load a local file, setting the base_dir and media_types parser.load_file!('print.css', '~/styles/', :print) # load a string parser = CssParser::Parser.new parser.load_string! 'a { color: hotpink; }' # lookup a rule by a selector parser.find_by_selector('#content') #=> 'font-size: 13px; line-height: 1.2;' # lookup a rule by a selector and media type parser.find_by_selector('#content', [:screen, :handheld]) # iterate through selectors by media type parser.each_selector(:screen) do |selector, declarations, specificity| ... end # add a block of CSS css = <<-EOT body { margin: 0 1em; } EOT parser.add_block!(css) # output all CSS rules in a single stylesheet parser.to_s => #content { font-size: 13px; line-height: 1.2; } body { margin: 0 1em; } # capturing byte offsets within a file parser.load_uri!('../style.css', {base_uri: 'http://example.com/styles/inc/', capture_offsets: true) content_rule = parser.find_rule_sets(['#content']).first content_rule.filename #=> 'http://example.com/styles/styles.css' content_rule.offset #=> 10703..10752 # capturing byte offsets within a string parser.load_string!('a { color: hotpink; }', {filename: 'index.html', capture_offsets: true) content_rule = parser.find_rule_sets(['a']).first content_rule.filename #=> 'index.html' content_rule.offset #=> 0..21
Testing
Bashbundle bundle exec rake
Runs on Ruby 3.0/JRuby 9.4 or above.
Credits
By Alex Dunae (dunae.ca, e-mail 'code' at the same domain), 2007-11.
License: MIT
Thanks to all the wonderful contributors for their updates.
Made on Vancouver Island.
Contributors
Showing top 12 contributors by commit count.
This article is auto-generated from premailer/css_parser via the GitHub API.Last fetched: 6/27/2026
