https://github.com/premailer/css_parser
Ruby CSS Parser
https://github.com/premailer/css_parser
Keywords
css-parser ruby
Keywords from Contributors
activejob activerecord mvc crash-reporting rubygems nokogiri inline mail premailer rack
Last synced: about 10 hours ago
JSON representation
Repository metadata
Ruby CSS Parser
- Host: GitHub
- URL: https://github.com/premailer/css_parser
- Owner: premailer
- License: other
- Created: 2009-12-08T17:22:24.000Z (about 16 years ago)
- Default Branch: master
- Last Pushed: 2025-04-17T17:27:03.000Z (8 months ago)
- Last Synced: 2025-12-06T00:30:50.359Z (9 days ago)
- Topics: css-parser, ruby
- Language: Ruby
- Homepage:
- Size: 680 KB
- Stars: 287
- Watchers: 9
- Forks: 110
- Open Issues: 23
- Releases: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: MIT-LICENSE
README.md
Ruby CSS Parser

Load, parse and cascade CSS rule sets in Ruby.
Setup
gem install css_parser
Usage
require '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
bundle
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.
Owner metadata
- Name: premailer
- Login: premailer
- Email:
- Kind: organization
- Description:
- Website:
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/5750522?v=4
- Repositories: 5
- Last ynced at: 2024-04-21T03:04:42.616Z
- Profile URL: https://github.com/premailer
GitHub Events
Total
- Issues event: 2
- Watch event: 7
- Issue comment event: 9
- Push event: 9
- Pull request review comment event: 1
- Pull request review event: 4
- Pull request event: 10
- Fork event: 1
- Create event: 4
Last Year
- Issues event: 1
- Watch event: 6
- Issue comment event: 6
- Push event: 7
- Pull request review comment event: 1
- Pull request review event: 3
- Pull request event: 9
- Fork event: 1
- Create event: 3
Committers metadata
Last synced: 3 days ago
Total Commits: 383
Total Committers: 70
Avg Commits per committer: 5.471
Development Distribution Score (DDS): 0.783
Commits in past year: 9
Committers in past year: 3
Avg Commits per committer in past year: 3.0
Development Distribution Score (DDS) in past year: 0.556
| Name | Commits | |
|---|---|---|
| Alex Dunae | a****x@d****a | 83 |
| Michael Grosser | m****l@g****t | 63 |
| Akzhan Abdulin | a****n@g****m | 54 |
| Geremia Taglialatela | t****v@g****m | 15 |
| ojab | o****b@o****u | 15 |
| Alex Dunae | a****x@d****x@d****a | 13 |
| Godwin | g****n@h****m | 12 |
| Tyler Cunnion | t****n@g****m | 9 |
| Nick Plante | n****p@z****g | 7 |
| Steven Daniels | s****8@g****m | 6 |
| Morten Primdahl | m****n@z****m | 6 |
| Simon | s****o@t****o | 5 |
| Dorian Marié | d****n@d****r | 4 |
| George | 3****a | 4 |
| Mark Edmondson | m****n@g****m | 4 |
| martent | m****n@t****e | 4 |
| ju1ius | j****e@l****t | 3 |
| Tres Wong-Godfrey | t****s@c****o | 3 |
| Julien Kirch | c****e@a****t | 3 |
| Leonid Shevtsov | l****d@s****e | 3 |
| Matt Sanford | m****t@m****m | 3 |
| Matthew Hicks | m****m@g****m | 2 |
| Kieran | k****r@k****o | 2 |
| Jonathan del Strother | me@d****m | 2 |
| Johnny Shields | j****s@g****m | 2 |
| Jason | m****l@j****k | 2 |
| J Smith | d****a@g****m | 2 |
| Anton Rieder | 1****r | 2 |
| Andy Beckwith | a****h@z****m | 2 |
| Mikkel | m****l@h****t | 2 |
| and 40 more... | ||
Committer domains:
- zendesk.com: 2
- timcraft.com: 1
- envato.com: 1
- smgt.me: 1
- hacklite.net: 1
- jasonlambert.co.uk: 1
- delstrother.com: 1
- kwest.info: 1
- mzsanford.com: 1
- shevtsov.me: 1
- archiloque.net: 1
- clean.io: 1
- laposte.net: 1
- thavenius.se: 1
- dorianmarie.fr: 1
- telhaug.no: 1
- zerosum.org: 1
- dunae.ca = alex dunae alex: 1
- ojab.ru: 1
- grosser.it: 1
- dunae.ca: 1
- seriousorange.com: 1
- boedicker.org: 1
- causes.com: 1
- sympliact.com: 1
- post.cz: 1
- fale.io: 1
- 4angle.com: 1
- ddimitrov.name: 1
- warmlyyours.com: 1
- kublai.com: 1
- logicaltext.com: 1
- willoller.com: 1
- trevreport.org: 1
- rocketbox.in: 1
- scvngr.com: 1
- allm.inc: 1
- pure360.com: 1
- duckinator.net: 1
- oozou.com: 1
- flavorpill.com: 1
- maski.org: 1
Issue and Pull Request metadata
Last synced: about 2 months ago
Total issues: 42
Total pull requests: 116
Average time to close issues: 10 months
Average time to close pull requests: 4 months
Total issue authors: 36
Total pull request authors: 59
Average comments per issue: 2.45
Average comments per pull request: 1.6
Merged pull request: 91
Bot issues: 0
Bot pull requests: 0
Past year issues: 3
Past year pull requests: 7
Past year average time to close issues: N/A
Past year average time to close pull requests: about 21 hours
Past year issue authors: 2
Past year pull request authors: 2
Past year average comments per issue: 0.67
Past year average comments per pull request: 0.86
Past year merged pull request: 6
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- stoivo (3)
- ojab (2)
- sarken (2)
- twe4ked (2)
- tagliala (2)
- jonhyman (1)
- jdelStrother (1)
- joevandyk (1)
- marocas (1)
- Mange (1)
- mrueg (1)
- getaaron (1)
- devend711 (1)
- jpbarbosa (1)
- mike-engel (1)
Top Pull Request Authors
- tagliala (17)
- stoivo (15)
- ojab (8)
- grosser (6)
- leonid-shevtsov (6)
- markedmondson (3)
- mogest (2)
- reud (2)
- scouttyg (2)
- george-gca (2)
- jdelStrother (2)
- davidwessman (2)
- timcraft (2)
- aried3r (2)
- rickmzp (1)
Top Issue Labels
Top Pull Request Labels
Package metadata
- Total packages: 3
-
Total downloads:
- rubygems: 318,738,824 total
- Total docker downloads: 1,182,742,282
- Total dependent packages: 93 (may contain duplicates)
- Total dependent repositories: 8,621 (may contain duplicates)
- Total versions: 159
- Total maintainers: 4
gem.coop: css_parser
A set of classes for parsing CSS in Ruby.
- Homepage: https://github.com/premailer/css_parser
- Documentation: http://www.rubydoc.info/gems/css_parser/
- Licenses: MIT
- Latest release: 1.21.1 (published 9 months ago)
- Last Synced: 2025-12-12T19:36:50.765Z (2 days ago)
- Versions: 60
- Dependent Packages: 0
- Dependent Repositories: 0
- Downloads: 159,362,077 Total
- Docker Downloads: 591,371,141
-
Rankings:
- Dependent repos count: 0.0%
- Dependent packages count: 0.0%
- Average: 0.077%
- Downloads: 0.154%
- Docker downloads count: 0.155%
- Maintainers (4)
rubygems.org: css_parser
A set of classes for parsing CSS in Ruby.
- Homepage: https://github.com/premailer/css_parser
- Documentation: http://www.rubydoc.info/gems/css_parser/
- Licenses: MIT
- Latest release: 1.21.1 (published 9 months ago)
- Last Synced: 2025-12-13T06:00:37.472Z (1 day ago)
- Versions: 60
- Dependent Packages: 93
- Dependent Repositories: 8,621
- Downloads: 159,376,747 Total
- Docker Downloads: 591,371,141
-
Rankings:
- Downloads: 0.158%
- Docker downloads count: 0.204%
- Dependent packages count: 0.34%
- Dependent repos count: 0.351%
- Average: 1.168%
- Forks count: 2.492%
- Stargazers count: 3.465%
- Maintainers (4)
proxy.golang.org: github.com/premailer/css_parser
- Homepage:
- Documentation: https://pkg.go.dev/github.com/premailer/css_parser#section-documentation
- Licenses: other
- Latest release: v1.21.1 (published 9 months ago)
- Last Synced: 2025-12-05T03:06:00.051Z (10 days ago)
- Versions: 39
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Forks count: 2.498%
- Stargazers count: 3.275%
- Average: 6.538%
- Dependent packages count: 9.576%
- Dependent repos count: 10.802%
Dependencies
- addressable 2.8.0
- ast 2.4.1
- benchmark-ips 2.8.4
- bump 0.10.0
- css_parser 1.11.0
- maxitest 3.6.0
- memory_profiler 1.0.0
- minitest 5.12.0
- parallel 1.20.1
- parser 3.0.0.0
- public_suffix 4.0.6
- rainbow 3.0.0
- rake 13.0.3
- regexp_parser 2.0.3
- rexml 3.2.4
- rubocop 1.8.0
- rubocop-ast 1.4.0
- rubocop-rake 0.5.1
- ruby-progressbar 1.11.0
- unicode-display_width 2.0.0
- webrick 1.7.0
- benchmark-ips >= 0 development
- bump >= 0 development
- maxitest >= 0 development
- memory_profiler >= 0 development
- rake >= 0 development
- rubocop ~> 1.8 development
- rubocop-rake >= 0 development
- webrick >= 0 development
- addressable >= 0
- actions/checkout v2 composite
- ruby/setup-ruby v1 composite
Score: 31.11479163657771