Overlay
Install: npm install @mantine/core@9.7.1 @mantine/hooks@9.7.1
Version and compatibility
Pinned Mantine Core 9.7.1 requires React and React DOM ^19.2.0 and matching @mantine/hooks@9.7.1, from the installed npm package's peerDependencies. Do not force it into React 18 or another incompatible version. Explain upgrade impact and agree on a plan with the project owner; do not hide conflicts with --force/--legacy-peer-deps. The native Provider enables theme.respectReducedMotion and uses forceColorScheme for light/dark.
Use case
Place a translucent layer over a region.
Native props used by this example
These props are extracted from the local typechecked JSX and grouped by their owning native component. This is not an exhaustive prop list; see pinned source signatures and inheritance below.
| Component prop | Explanation |
|---|---|
Box.pos | Mantine positioning style prop. |
Box.p | Mantine padding style prop. |
Overlay.color | Native color value or theme color key. |
Overlay.backgroundOpacity | Background alpha, not the opacity of child content. |
Interaction and state checks
Current scenarios: Default. Check actual behavior after selecting supported disabled/error/read-only scenarios; components without those native states do not receive invented universal props. Verify keyboard focus and exits, then connect changed values through the native callback signature.
Business integration boundary
Demo content/state is local, without server persistence, authorization or fetching. A static display component is not a completed business workflow.
Host setup
Install pinned @mantine/core and @mantine/hooks, import @mantine/core/styles.css at the entry and use MantineProvider. The example's theme/variant are JGuang-authored host props, not universal native component APIs; forceColorScheme synchronizes the app theme. Native implementation source is a reading reference: use npm exports rather than copying internal engines. This batch covers Core, not dates/charts/forms extension packages. Detailed upstream prose remains English.
Runnable usage
import { useState } from 'react';
import * as M from '@mantine/core';
import '@mantine/core/styles.css';
function ComponentPreview({ variant = 'Default' }: { variant?: string }) {
const content = <M.Text>Build something beautiful / 构建美好的界面</M.Text>;
return <M.Box pos="relative" p="xl">{content}<M.Overlay color="#2F67FF" backgroundOpacity={0.15} /></M.Box>;
}
export default function Example({ variant = 'Default', theme = 'light' }: { variant?: string; theme?: 'light' | 'dark' }) {
return <M.MantineProvider forceColorScheme={theme} theme={{ respectReducedMotion: true }}><ComponentPreview variant={variant} /></M.MantineProvider>;
}
Preview states
Default
The example uses the native Mantine API. For supported input demos, change the local variant to Disabled, Invalid or Read only; these are example labels, not new component props. Keep the documented data, controlled values, stores and compound children when adapting the example.
Usage
Overlay takes 100% of the width and height of the parent container or viewport if the fixed prop is set.
Set the color and backgroundOpacity props to change the Overlay background-color. Note that the backgroundOpacity prop
does not change the CSS opacity property; it changes the background-color. For example, if you set
color="#000" and backgroundOpacity={0.85}, the background-color will be rgba(0, 0, 0, 0.85):
Gradient
Set the gradient prop to use background-image instead of background-color. When the gradient prop is set,
the color and backgroundOpacity props are ignored.
Blur
Set the blur prop to add backdrop-filter: blur({value}) styles.
Note that backdrop-filter is not supported in all browsers.
Source-backed parameter reference
Implementation signatures and types are generated from the pinned local source. Optional props, native inherited types, union branches and never exclusions are preserved. A forwardRef implementation's ref is a React reference, not an additional business prop.
Overlay(_props)
export type OverlayStylesNames = 'root';
export type OverlayCssVariables = {
root: '--overlay-bg' | '--overlay-filter' | '--overlay-radius' | '--overlay-z-index';
};
export interface OverlayProps extends BoxProps, StylesApiProps<OverlayFactory> {
/** Overlay `background-color` opacity 0–1, ignored when `gradient` prop is set @default 0.6 */
backgroundOpacity?: number;
/** Overlay `background-color` @default #000 */
color?: React.CSSProperties['backgroundColor'];
/** Overlay background blur in px (converted to rem). Applies `backdrop-filter: blur()`. Note: backdrop-filter is not supported in all browsers. @default 0 */
blur?: number | string;
/** Changes overlay to gradient. If set, both `color` and `backgroundOpacity` props are ignored. */
gradient?: string;
/** Overlay z-index @default 200 */
zIndex?: string | number;
/** Key of `theme.radius` or any valid CSS value to set border-radius @default 0 */
radius?: MantineRadius;
/** Content inside overlay */
children?: React.ReactNode;
/** Centers content inside the overlay using flexbox (sets display: flex, align-items: center, justify-content: center) @default false */
center?: boolean;
/** Changes position from `absolute` to `fixed` (viewport-relative instead of parent-relative) @default false */
fixed?: boolean;
}
export type OverlayFactory = PolymorphicFactory<{
props: OverlayProps;
defaultRef: HTMLDivElement;
defaultComponent: 'div';
stylesNames: OverlayStylesNames;
vars: OverlayCssVariables;
}>;
export type Mod = Record<string, any> | string;
export type BoxMod = Mod | Mod[] | BoxMod[];
export interface BoxProps extends MantineStyleProps {
/** Class added to the root element, if applicable */
className?: string | undefined;
/** Inline style added to root component element, can subscribe to theme defined on MantineProvider */
style?: MantineStyleProp;
/** CSS variables defined on root component element */
__vars?: CssVarsProp;
/** `size` property passed down the HTML element */
__size?: string;
/** Breakpoint above which the component is hidden with `display: none` */
hiddenFrom?: MantineBreakpoint;
/** Breakpoint below which the component is hidden with `display: none` */
visibleFrom?: MantineBreakpoint;
/** Determines whether component should be hidden in light color scheme with `display: none` */
lightHidden?: boolean;
/** Determines whether component should be hidden in dark color scheme with `display: none` */
darkHidden?: boolean;
/** Element modifiers transformed into `data-` attributes, for example, `{ 'data-size': 'xl' }`, falsy values are removed */
mod?: BoxMod;
}
export interface CSSProperties extends React.CSSProperties {
[key: string]: any;
}
type MantineStyle = CSSProperties | ((theme: MantineTheme) => CSSProperties);
export type MantineStyleProp = MantineStyle | MantineStyle[] | MantineStyleProp[] | undefined;
export type CssVariable = `--${string}`;
export type CssVariables<Variable extends string = CssVariable> = Partial<Record<Variable, string>>;
export type CssVars<Variable extends string = CssVariable> =
| CssVariables<Variable>
| ((theme: MantineTheme) => CssVariables<Variable>)
| CssVars<Variable>[];
export type CssVarsProp<Variable extends string = CssVariable> =
| CssVars<Variable>
| CssVars<Variable>[];
Native and external types
External types remain defined by React or native dependencies, not manually expanded into guessed props. The installed version's TypeScript definitions are authoritative.
PolymorphicFactory<{
props: OverlayProps;
defaultRef: HTMLDivElement;
defaultComponent: 'div';
stylesNames: OverlayStylesNames;
vars: OverlayCssVariables;
}>
MantineStyleProps
React.CSSProperties
MantineTheme
Partial<Record<Variable, string>>
Record<Variable, string>
Variable
MantineBreakpoint
Record<string, any>
StylesApiProps<OverlayFactory>
MantineRadius
React.ReactNode
HTMLDivElement