apps/public-docsite-v9/src/Concepts/UnprocessedStyles.mdx
import { Meta, Source } from '@storybook/addon-docs/blocks';
<Meta title="Concepts/Developer/Unprocessed Styles" />Fluent UI v9 components now ship with raw module alternatives to solve CSS style conflicts in multi-bundle applications. This feature addresses critical issues where Griffel-processed styles clash when multiple application bundles are loaded simultaneously.
Modern applications often split code into multiple bundles (main app bundle, CDN bundles, micro-frontends, etc.). When each bundle contains pre-processed Griffel styles, CSS class conflicts can occur:
<!-- Main bundle styles -->
<style>
.order0 {
padding: 10px;
}
.order1 {
padding-left: 5px;
}
</style>
<!-- CDN bundle styles (loaded later) -->
<style>
.order0 {
padding: 10px;
} /* Overrides main bundle! */
</style>
<!-- Result: Expected padding-left: 5px, but got padding: 10px -->
<div className="order0 order1"></div>
Raw modules contain unprocessed Griffel styles that can be configured with unique prefixes at build time, preventing CSS conflicts:
<!-- With prefixed styles -->
<style>
.main-order0 {
padding: 10px;
}
.main-order1 {
padding-left: 5px;
}
</style>
<style>
.cdn-order0 {
padding: 10px;
} /* No conflict! */
</style>
Configure your bundler to prioritize .raw.js extension resolution:
Webpack Configuration:
// webpack.config.js
module.exports = {
resolve: {
extensions: ['.raw.js', '...'],
},
};
Vite Configuration:
// vite.config.js
export default {
resolve: {
extensions: ['.raw.js', '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
},
};
| Package | Ships Processed Styles | Raw Modules Available | Version |
|---|---|---|---|
@fluentui/react-components | ⚠️ Yes | ✅ Available | v9.67.0+ |
@fluentui-contrib/* | ✅ No | ✅ Not needed | N/A |
@fluentui-copilot/* | ⚠️ Yes | ✅ Available | v0.28.4+, Older major version back-ports / v0.26.2-hotfix.1, v0.25.3-hotfix.1 |
@fluentui/react-icons | ⚠️ Yes | ✅ Available | v2.0.307+ |
@fluentui/react-charts | ⚠️ Yes | ✅ Available | v9.2.0+ |
| MSFT Design react-icons | ⚠️ Yes | ❌ Not planned | - |