跳转到主要内容

Python的CSS级联样式表库

项目描述

https://img.shields.io/pypi/v/cssutils.svg https://img.shields.io/pypi/pyversions/cssutils.svg tests Ruff https://readthedocs.org/projects/cssutils/badge/?version=latest https://img.shields.io/badge/skeleton-2024-informational https://tidelift.com/badges/package/pypi/cssutils

概述

一个用于解析和构建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 3CSS3 Basic User Interface ModuleCSS Text Level 3

包含一些属性验证,主要是cursoroutlineresizebox-shadowtext-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合作,提供一个企业订阅,涵盖您使用的所有开源软件。

了解更多.

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

cssutils-2.11.1.tar.gz (711.7 kB 查看哈希值)

上传时间

构建分布

cssutils-2.11.1-py3-none-any.whl (385.7 kB 查看哈希值)

上传时间 Python 3

由以下支持