Getting Started
Install
Bun
bun install @m_three_ui/m3ripple
Others
npm
npm i @m_three_ui/m3ripple
pnpm
pnpm add @m_three_ui/m3ripple
Yarn
yarn add @m_three_ui/m3ripple
Use
Import <RippleContainer>
component(based on <div />
) and set props.
Example
import { RippleContainer } from '@m_three_ui/m3ripple'; //import it
import styles from './some_css_file.module.css';
const YourComponent = () => {
return (
<RippleContainer
isMaterial3={true} {/* optional, default: true */}
className={styles.rippleContainer} {/* optional */}
rippleColor="hsla(29,81%,84%,0.15)" {/* optional */}
sparklesColorRGB="255 255 255" {/* optional */}
opacity_level1="0.4" {/* optional */}
opacity_level2="0.1" {/* optional */}
>
<div className={styles.children} /> {/* children here */}
</RippleContainer>
);
};
export default YourComponent;
FAQ
The Ripple Effect looks broken. The ripple’s width and height seem to affect the layout of the child elements inside RippleContainer
, as if the ripple doesn’t have position: absolute
. What’s going on?
This is a known issue. It occurs when the CSS provided by the library fails to apply correctly.
As a workaround, please assign a custom class via the className prop on RippleContainer, and apply the following CSS manually:
.rippleContainer {
/* Workaround(m3ripple's css modules is not working) */
overflow: hidden;
position: relative;
z-index: 0;
& :global(.ripple) {
position: absolute;
border-radius: 100%;
z-index: -1;
transform: translateX(-50%) translateY(-50%);
pointer-events: none;
display: flex;
align-items: center;
justify-content: center;
user-select: none;
}
& :global(.sparkles_canvas) {
position: absolute;
user-select: none;
}
}
This works only in environments where CSS is scoped using something like CSS Modules and supports :global().
If you’re not using such an environment, please use the following alternative instead.\
.rippleContainer {
/* Workaround(m3ripple's css modules is not working) */
overflow: hidden;
position: relative;
z-index: 0;
& .ripple {
position: absolute;
border-radius: 100%;
z-index: -1;
transform: translateX(-50%) translateY(-50%);
pointer-events: none;
display: flex;
align-items: center;
justify-content: center;
user-select: none;
}
& .sparkles_canvas {
position: absolute;
user-select: none;
}
}