Fluent UI Dropdown Not Clickable Inside Radix Dialog/Sheet
Fluent UI Dropdown Not Clickable Inside Radix Dialog/Sheet
This page is generated by AI "claude-4.5-sonnet"
Problem
When using a Fluent UI Dropdown component inside a Radix UI Dialog (or shadcn Sheet, which uses Radix Dialog under the hood), the dropdown menu becomes non-clickable. The dropdown appears to render correctly with proper z-index layering, but clicking on the options doesn't work.
Investigation
Initial Observations
- Fluent UI Dropdown **works fine** when placed outside the Sheet
- Fluent UI Dropdown **doesn't work** when placed inside the Sheet
- The dropdown menu is visible and has a high z-index (`1000000`)
- The Sheet overlay has a lower z-index (`50`)
Key Findings
Using browser DevTools, we discovered that the listbox element was inheriting `pointer-events: none` from the `
` element:<body style="pointer-events: none;">
└─ FluentProvider portal (pointer-events: none, inherited)
└─ Listbox (pointer-events: none, inherited)
└─ Options (pointer-events: none, inherited)
Root Cause
**Radix UI Dialog sets `pointer-events: none` as an inline style on the `
` element** when the dialog is open. This is intentional behavior to prevent users from interacting with content behind the modal.However, since `pointer-events` is an **inherited CSS property**, all children of `
` inherit this value, including:- Fluent UI portals (even with `z-index: 1000000`)
- Dropdown listboxes
- Dropdown options
This creates a conflict where:
- Radix Dialog blocks all pointer events on `` to prevent background interaction
- Fluent UI renders its dropdown in a portal as a child of ``
- The dropdown inherits `pointer-events: none` and becomes non-clickable
Why the Dropdown Outside Sheet Works
When no Sheet is open:
- `` doesn't have `pointer-events: none`
- Fluent UI portals and dropdowns can receive pointer events normally
- Everything works as expected
Solution
Override the inherited `pointer-events: none` by explicitly setting `pointer-events: auto` on Fluent UI components:
/* Enable pointer events on FluentUI portals to allow clicking */
.fui-Portal {
pointer-events: auto !important;
}
/* Enable pointer events on FluentUI listbox and options */
.fui-Listbox,
[role="listbox"],
[role="option"] {
pointer-events: auto !important;
}
Why This Works
The `!important` flag ensures these rules override the inherited `pointer-events: none` from `
`. By explicitly setting `pointer-events: auto` on:- `.fui-Portal`: The FluentProvider portal container
- `.fui-Listbox`, `[role="listbox"]`, `[role="option"]`: The dropdown menu and its options
We restore interactivity to the Fluent UI components while keeping the Radix Dialog's background-blocking behavior intact.
Complete Fix
Add this to your global CSS file (e.g., `index.css`):
/* Fix FluentUI Dropdown z-index to work inside Radix Sheet */
/* FluentUI portals need higher z-index than Sheet (z-50) */
[class*="fui-"] {
position: relative;
}
.fui-Portal,
.fui-Listbox,
[role="listbox"],
.fui-Dropdown__listbox {
z-index: 9999 !important;
}
/* Enable pointer events on FluentUI portals to allow clicking */
.fui-Portal {
pointer-events: auto !important;
}
/* Enable pointer events on FluentUI listbox and options */
.fui-Listbox,
[role="listbox"],
[role="option"] {
pointer-events: auto !important;
}
/* Ensure FluentUI popover surfaces are above Sheet overlay */
.fui-PopoverSurface {
z-index: 9999 !important;
}
Lessons Learned
- **CSS Inheritance**: `pointer-events` is an inherited property, which can cause unexpected issues when combining UI libraries
- **Modal Behavior**: Modal/Dialog libraries often set `pointer-events: none` on `` to prevent background interaction
- **Portal Conflicts**: Components that render in portals (as children of ``) can inherit unwanted styles from the body element
- **Cross-Library Compatibility**: When mixing UI libraries (Radix + Fluent UI), always test for CSS inheritance and z-index conflicts
Related Issues
This issue affects:
- Fluent UI Dropdown, Combobox, Select components inside Radix Dialog
- Any Fluent UI component that renders in a portal inside a Radix Dialog
- shadcn/ui Sheet component (which uses Radix Dialog) with Fluent UI components
References
- [MDN: pointer-events property](https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events)
- [Radix UI Dialog Documentation](https://www.radix-ui.com/primitives/docs/components/dialog)
- [Fluent UI React Components](https://react.fluentui.dev/)