Parsing with tinycss


Import tinycss, make a parser object with the features you want, and parse a stylesheet:

>>> import tinycss
>>> parser = tinycss.make_parser('page3')
>>> stylesheet = parser.parse_stylesheet_bytes(b'''@import "foo.css";
...     p.error { color: red }  @lorem-ipsum;
...     @page tables { size: landscape }''')
>>> stylesheet.rules
[<ImportRule 1:1 foo.css>, <RuleSet at 2:5 p.error>, <PageRule 3:5 ('tables', None)>]
>>> stylesheet.errors
[ParseError('Parse error at 2:29, unknown at-rule in stylesheet context: @lorem-ipsum',)]

You’ll get a Stylesheet object which contains all the parsed content as well as a list of encountered errors.


Parsers are subclasses of tinycss.css21.CSS21Parser. Various subclasses add support for more syntax. You can choose which features to enable by making a new parser class with multiple inheritance, but there is also a convenience function to do that:

Parsing a stylesheet

Parser classes have three different methods to parse CSS stylesheet, depending on whether you have a file, a byte string, or an Unicode string.

Parsing a style attribute

Parsed objects

These data structures make up the results of the various parsing methods.


All subsequent objects have line and column attributes (not repeated every time fore brevity) that indicate where in the CSS source this object was read.


Some parts of a stylesheet (such as selectors in CSS 2.1 or property values) are not parsed by tinycss. They appear as tokens instead.