Build tools that minify CSS sometimes also rename class names.
Loading Unminifier Beautifier…
Fully reverses whitespace compression to produce readable code
Preserves all selector names, property values, and at-rules exactly
Sets clear expectations about what class name obfuscation cannot be undone
Browser-based processing: nothing is sent to a server
Drop the Unminifier Beautifier into any page — blog post, product docs, intranet, school portal — with a single line of HTML. Your visitors get the full tool, processed entirely in their browser. No backend, no uploads, no signup.
Embed code
<iframe
src="https://www.fixtools.io/css-tool/unminifier-beautifier?embed=1"
width="100%"
height="780"
frameborder="0"
style="border:0;border-radius:16px;max-width:900px;"
title="Unminifier Beautifier by FixTools"
loading="lazy"
allow="clipboard-write"
></iframe>Attribution-friendly: a small "Powered by FixTools" link appears in the embed footer.
CSS obfuscation is a term that can mean different things depending on context. In the strictest sense, CSS cannot be truly obfuscated the way JavaScript can, because CSS is declarative and every rule must reference real HTML class names or element types. What build tools can do is rename class names during compilation: a human-readable class name like .navigation-menu-item becomes .a4x in the output CSS and in the corresponding HTML. This transformation is applied consistently across both the CSS and HTML files in a single build step. Tools like CSS Modules (in webpack), css-loader's localIdentName option, and some CSS-in-JS frameworks apply this renaming to provide scoped styles.
Whitespace recovery restores every space, newline, and indentation character that the minifier removed. After recovery, a rule like .a4x{display:flex;padding:0 16px} becomes a properly formatted block with .a4x on its own line and each property indented. The class name .a4x is preserved exactly because it is a real class name in the production code: the HTML uses it, the browser matches it, and changing it would break the styles. Recovery cannot substitute the original human-readable name because that information was discarded during the build and exists only in the source map or the original source files.
The practical implication is that whitespace recovery gives you fully readable code that you can search, compare, and reason about, but the class names may be unfamiliar if they were generated or obfuscated. To connect obfuscated class names back to their human-readable originals, you need either the source map (which maps minified class positions to original class names) or the build configuration (which specifies the naming pattern). If you have access to those resources, use them. If you do not, the whitespace-recovered CSS is still useful: you can find the rule that applies a specific visual property and write an override targeting the obfuscated class name directly.
A source map check should be the first step in any deobfuscation workflow, not a fallback. Scroll to the very bottom of the minified CSS file and look for a sourceMappingURL comment. If it points to a .css.map file that loads when you fetch it directly, attach it to DevTools and the Sources panel will show the authored class names alongside the obfuscated ones. This is strictly more informative than any whitespace recovery because the map carries the original naming and file structure that recovery cannot reconstruct. CSS Modules builds in particular emit detailed maps that show component-level original names. When the map has been stripped (a common production hardening choice) or returns 404, recovery is the right alternative path. The decision between map and recovery should be deliberate per file rather than a habit, because the map is often available and forgotten.
Paste CSS that has been minified or that has obfuscated class names (like .a4x or .b2z). The tool expands all whitespace to produce readable formatted code. Class names appear exactly as the build tool produced them.
Step-by-step guide to css deobfuscator online:
Copy the minified CSS with obfuscated class names
Open the production site in a browser, go to DevTools Network tab, and copy the minified stylesheet response body. The file may contain short generated class names alongside normal CSS syntax.
Paste into FixTools and recover whitespace
Open FixTools CSS Unminifier and paste the copied content. Click Unminify. All whitespace is restored, producing formatted code where each selector and property is on its own line.
Search by property value to find rules of interest
If class names are obfuscated, use Cmd+F to search for a known property value or CSS feature (like z-index, position: sticky, or a specific colour) rather than searching for a class name. This locates the relevant rule regardless of how the class name was generated.
Note the obfuscated class name for overrides
Once you find the relevant rule in the recovered CSS, copy the obfuscated class name. Use it in your override stylesheet to target the same element. The class name in the recovered CSS is the actual name used in the HTML, so targeting it will work.
Common situations where this approach makes a real difference:
Overriding styles from a CSS Modules component
A developer needs to override the padding of a button component built with CSS Modules, where the class name in production is something like Button__root--a1b2. They inspect the button in DevTools to find the obfuscated class name, then recover the whitespace of the production CSS and search for that class. The recovered CSS reveals all the declarations applied to that class, giving the developer the full context needed to write a specific override with correct specificity.
Debugging a z-index conflict in a component library
A modal from a third-party component library is appearing behind another modal on the page. Both use CSS Modules with obfuscated class names. The developer cannot read the minified CSS but recognises the obfuscated class names on the modal element in DevTools. They recover the whitespace of the library's CSS, search for z-index, and find two rules both setting z-index values. The recovered code makes the conflict immediately visible and the fix straightforward.
Understanding what a CSS-in-JS solution generates
A developer is reviewing a React application that uses a CSS-in-JS library generating atomic class names. They extract the generated stylesheet from the page, recover its whitespace, and read the structured output. The recovered CSS reveals that each atomic class corresponds to a single CSS property, and many class combinations are used to compose the final appearance of each component. This architectural pattern becomes clear in the recovered readable output in a way that is completely hidden in the minified version.
Writing a browser extension stylesheet override
A browser extension adds custom styles to a specific website. The website uses obfuscated class names that change between deployments. The extension developer recovers the current production CSS whitespace, identifies the structural selectors (element-type selectors and aria attributes) that are stable across deployments, and writes their override rules against those stable selectors rather than obfuscated class names. The recovered CSS enables this analysis.
Get better results with these expert suggestions:
Source maps solve what whitespace recovery cannot
If you need to connect obfuscated class names to original source names, a CSS source map is the tool for the job. Check whether the production CSS has a sourceMappingURL comment at the end of the file. If it does, DevTools will use the source map to show you the original class names and file locations when you inspect an element. Source maps and whitespace recovery solve different problems: use the map for name tracing, use the recovery for readability.
Identify CSS Modules hash patterns in obfuscated names
webpack's css-loader generates class names in the form ComponentName__className--hash (localIdentName default). After whitespace recovery, looking for double underscores and double hyphens in class names confirms the file used CSS Modules. The component name and original class name appear before the hash, giving you partial readable context even without the source map.
Use the recovered CSS to write override rules
If you are writing CSS overrides for a site you do not control, recovering the whitespace makes it easy to find the obfuscated selector and read its full declaration block. Copy the obfuscated class name from the recovered CSS, write your own rule targeting that class with higher specificity, and your override will apply. This approach works for third-party widget overrides and browser extension stylesheet injection.
Distinguish CSS Modules from manual obfuscation
CSS Modules generates consistent hash-based names following a pattern. Manually obfuscated CSS (where a developer deliberately used meaningless class names) produces names that may follow no pattern. If the recovered CSS has names like .a, .b, .c in sequence, a human likely chose them manually. If names have hashes like .btn--a1b2c3, a build tool generated them. The recovery process is identical, but the interpretation of the output differs.
Use DevTools Styles panel to connect obfuscated names to elements
If the CSS uses obfuscated class names, click on the styled element in Chrome DevTools and check the Styles panel. The panel shows which obfuscated class names apply to that element, letting you find the correct rule in the recovered CSS without knowing the original name.
Search recovered CSS by property value, not class name
If class names are obfuscated, searching for them is unproductive. Instead, search the recovered CSS for the property value that is causing the issue, such as z-index: 1000 or position: fixed. This value-based search works regardless of how the class names were generated.
Check the HTML for data attributes alongside obfuscated classes
Some build tools that obfuscate class names preserve readable data attributes in the HTML for testing purposes. Inspecting the element in DevTools may reveal a data-testid or data-component attribute that names the component, helping you locate the relevant rule block in the recovered CSS.
More use-case guides for the same tool:
Open the full Unminifier Beautifier — free, no account needed, works on any device.
Open Unminifier Beautifier →Free · No account needed · Works on any device