Skip to main content

Removes unused classes, ids, and element selectors from CSS.

Project description

RefreshCSS 🫧

Make your CSS so fresh, so clean.

RefreshCSS is a Python library that removes unused classes, ids, and element selectors from CSS.

🔧 Installation

pip install refreshcss

⭐️ Features

  • Python library to integrate in other Python projects
  • Can be used as a filter with django-compressor as part of minifying CSS

🗜️ Integrate with django-compressor

Add "refreshcss.filters.RefreshCSSFilter" to COMPRESS_FILTERS in the Django settings file.

COMPRESS_FILTERS = {
    "css": [
        "refreshcss.filters.RefreshCSSFilter",
        ...
    ],
    "js": [...],
}

🤓 How does it work?

  1. Catalogue classes, ids, and elements that are currently being used in found HTML templates
  2. Catalogue classes, ids, and elements in a CSS stylesheet
  3. Return new CSS stylesheet that only contains rules that are actively being used by the HTML

🧐 Why?

I wanted to have a filter for django-compressor that would purge unused CSS as part of the compress step when deploying for coltrane apps. After dealing with a manual process and attempting to integrate https://purgecss.com and https://github.com/uncss/uncss I thought "this couldn't be that hard to do in Python".

Which is always the thought at the beginning of every side project... and is never accurate.

🙋 FAQ

Will this work with SPAs?

RefreshCSS only inspects HTML, so if CSS classes are being changed client-side then it will not know about it.

Does this work by crawling a website URL?

Currently no, although that is a possibility in the future.

Does this support HTML written in the Django Template Language?

Yes! That was a primary reason I built my own solution. 😅 Jinja might also be possible to support with some small tweaks, although it is untested.

Is this what people mean when they say "treeshaker"?

Maybe.🤷

I found a bug!

Thanks for trying RefreshCSS out! Please make a PR (pull request) with a small test that replicates the bug or, if that is not possible, create a new discussion.

🤘 Related libraries

Node

Python

  • treeshake: I unfortunately could not get this to work on my local environment
  • cssutils: This unfortunately seemed to choke on more modern CSS (when I tested on Bulma 1.0)
  • css-optomizer

🙏 Thanks

❤️ Support

This project is supported by GitHub Sponsors and Digital Ocean.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

refreshcss-0.2.0.tar.gz (12.4 kB view hashes)

Uploaded Source

Built Distribution

refreshcss-0.2.0-py3-none-any.whl (13.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page