Python的CSS级联样式表库
项目描述
概述
一个用于解析和构建CSS级联样式表的Python包。仅DOM,没有任何渲染功能!
基于并部分实现以下规范
- CSS 2.1rev1
在此定义了CSS的一般规则和属性
- CSS3模块:语法
自cssutils 0.9.4版本起用于组件。cssutils尝试使用CSS 2.1和CSS 3的特性,优先使用CSS3,但由于CSS 3尚未最终确定,因此某些部分来自CSS 2.1。
- CSS Fonts Module Level 3
添加了更改和附加内容(自cssutils v0.9.6起)
- MediaQueries
MediaQueries自v0.9.4起成为stylesheets.MediaList的一部分,用于@import和@media规则中。
- Namespaces
自v0.9.1添加,在v0.9.4更新为CSSOM中的定义,在v0.9.5的dev版本中更新
- CSS3 Module: Pages Media
实现了本规范的大多数属性,包括MarginRules
- Selectors
此处定义的选择器语法(而不是在CSS 2.1中定义)应该可以用cssutils解析(但请注意,应该;)
- CSS Backgrounds and Borders Module Level 3,CSS3 Basic User Interface Module,CSS Text Level 3
包含一些属性验证,主要是cursor,outline,resize,box-shadow,text-shadow
- Variables / CSS Custom Properties
CSS Variables的实验性规范,cssutils部分实现。在新版的CSS Custom Properties规范中定义的变量应该至少可以用cssutils解析。
- DOM Level 2 Style CSS
css包的DOM。0.9.8移除了对CSSValue和相关API的支持,现在请查看PropertyValue和Value API
- DOM Level 2 Style Stylesheets
stylesheets包的DOM
- CSSOM
从这里获取了一些细节(主要是NamespaceRule DOM)。计划将实现转移到这里定义的内容,这是更新的,但仍然是REC,可能会随时更改…
cssutils的标记器是对CSS3 Module: Syntax (W3C Working Draft 13 August 2003)的定制实现,它本身基于CSS 2.1标记器。它试图尽可能地遵守规范,但使用了CSS 2.1标记器的一些(有用的)部分。
我认为cssutils既不是CSS 2.1也不是CSS 3兼容的,但至少尝试解析这两种语法,包括一些更实际的情况(一些CSS技巧实际上可以解析和序列化)。这两个官方语法都不是最终的也不是无错误的,但仍然可行。cssutils的目标不是完全遵守任何CSS规范(规范似乎总是在不断流动),但cssutils应该能够尽可能多地读取和写入“野生”CSS样式表,同时实现官方API,这些API有良好的文档。还提供了一些小的扩展。
兼容性
cssutils是在现代Python版本上开发的。请检查包元数据以确定兼容性。
请注意,cssutils已知是线程不安全的。
示例
import cssutils css = '''/* a comment with umlaut ä */ @namespace html "http://www.w3.org/1999/xhtml"; @variables { BG: #fff } html|a { color:red; background: var(BG) }''' sheet = cssutils.parseString(css) for rule in sheet: if rule.type == rule.STYLE_RULE: # find property for property in rule.style: if property.name == 'color': property.value = 'green' property.priority = 'IMPORTANT' break # or simply: rule.style['margin'] = '01.0eM' # or: ('1em', 'important') sheet.encoding = 'ascii' sheet.namespaces['xhtml'] = 'http://www.w3.org/1999/xhtml' sheet.namespaces['atom'] = 'http://www.w3.org/2005/Atom' sheet.add('atom|title {color: #000000 !important}') sheet.add('@import "sheets/import.css";') # cssutils.ser.prefs.resolveVariables == True since 0.9.7b2 print sheet.cssText
结果是
@charset "ascii"; @import "sheets/import.css"; /* a comment with umlaut \E4 */ @namespace xhtml "http://www.w3.org/1999/xhtml"; @namespace atom "http://www.w3.org/2005/Atom"; xhtml|a { color: green !important; background: #fff; margin: 1em } atom|title { color: #000 !important }
善意请求
cssutils远非完美或完整。如果您发现任何错误(尤其是规范违规)或有问题或建议,请将它们放入问题跟踪器。
谢谢
特别感谢Christof Höke为该库的原始创建。
感谢Simon Sapin,Jason R. Coombs和Walter Doerwald提供的补丁,帮助和讨论。感谢Kevin D. Smith的价值验证模块。还感谢Cory Dodt,Tim Gerla,James Dobson和Amit Moscovich提供有用的建议和代码补丁。感谢Fredrik Hedman帮助将encutils移植到Python 3。
企业版
作为Tidelift订阅的一部分提供。
该项目和数千个其他包的维护者正在与Tidelift合作,提供一个企业订阅,涵盖您使用的所有开源软件。
了解更多.
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。