Package Exports
- simple-liquid-glass
Readme
Simple Liquid Glass
A tiny, zero-dependency React component that renders a beautiful “liquid” glassmorphism panel using an SVG displacement map. It supports chromatic aberration, adjustable saturation, gradient borders, a configurable semi‑transparent glass color, and automatic text color based on the surrounding background.
Features
- Liquid glassmorphism with SVG displacement
- Auto text color: detects dark/light backgrounds to keep text legible
- Custom glass color: accepts only semi‑transparent colors (
rgba,hsla, hex with alpha) - Chromatic dispersion and blur with fine‑grained controls
- Adjustable saturation to boost or tame color vibrancy
- Chromatic aberration intensity control to tune the vividness of the edge colors
- Gradient border with masking
- Responsive and content‑agnostic
- TypeScript and tree‑shakable builds (ESM and CJS)
Installation
npm install simple-liquid-glassor with yarn:
yarn add simple-liquid-glassUsage
Basic Usage
import React from 'react';
import { LiquidGlass } from 'simple-liquid-glass';
function App() {
return (
<div style={{ width: '300px', height: '200px' }}>
<LiquidGlass autoTextColor glassColor="rgba(255,255,255,0.4)">
<div style={{ padding: '20px' }}>
<h2>Your Content Here</h2>
<p>This content has a liquid glass effect!</p>
</div>
</LiquidGlass>
</div>
);
}Advanced Usage with Custom Settings
import React from 'react';
import { LiquidGlass } from 'simple-liquid-glass';
function App() {
return (
<div style={{ width: '400px', height: '300px' }}>
<LiquidGlass
mode="custom"
scale={200}
radius={20}
border={0.1}
lightness={60}
displace={0.5}
alpha={0.8}
blur={10}
dispersion={30}
frost={0.2}
glassColor="rgba(255,255,255,0.4)"
autoTextColor
textOnDark="#ffffff"
textOnLight="#111111"
forceTextColor
borderColor="rgba(255, 255, 255, 0.5)"
className="my-glass-container"
style={{ boxShadow: '0 8px 32px rgba(0, 0, 0, 0.1)' }}
>
<div style={{ padding: '30px' }}>
<h1>Custom Glass Effect</h1>
<p>Fully customized liquid glass morphism</p>
</div>
</LiquidGlass>
</div>
);
}Preset Mode
The component comes with a beautiful preset that works out of the box:
<LiquidGlass mode="preset">
<YourContent />
</LiquidGlass>Note: In preset mode, incoming props still override the preset defaults (e.g., scale, radius, blur, etc.).
On iOS, when iosBlurMode is 'auto', a minimal blur (iosMinBlur, default 2px) is applied even if blur is 0 to ensure a visible fallback effect.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
children |
ReactNode |
- | Content to display inside the glass effect |
mode |
'preset' | 'custom' |
'preset' |
Use preset values or custom configuration |
scale |
number |
160 |
Scale of the displacement effect (-360 to 360) |
radius |
number |
50 |
Border radius of the glass effect |
border |
number |
0.05 |
Border thickness (0 to 0.5) |
lightness |
number |
53 |
Lightness of the glass (0 to 100) |
displace |
number |
5 |
Displacement blur amount (0 to 10) |
alpha |
number |
0.9 |
Alpha transparency (0 to 1) |
blur |
number |
0 |
Blur amount for the glass effect |
dispersion |
number |
50 |
Chromatic dispersion amount |
saturation |
number |
140 |
Color saturation multiplier (%) applied via CSS saturate() |
aberrationIntensity |
number |
2 |
Multiplier for chromatic aberration (red/blue separation) |
frost |
number |
0.1 |
Frost effect intensity (0 to 1) |
borderColor |
string |
'rgba(120, 120, 120, 0.7)' |
Border color in CSS format |
glassColor |
string |
– | Semi‑transparent glass color (rgba, hsla, hsl(.../a), #RGBA, #RRGGBBAA). Invalid/opaque values fall back to frost‑based default |
autoTextColor |
boolean |
true |
Automatically detect background luminance and set text color |
textOnDark |
string |
'#ffffff' |
Text color used when background is detected as dark |
textOnLight |
string |
'#111111' |
Text color used when background is detected as light |
forceTextColor |
boolean |
false |
Force the computed text color on all descendants (!important) to override nested styles |
className |
string |
- | Additional CSS class names |
style |
CSSProperties |
- | Additional inline styles |
Examples
Card with Glass Effect
<div className="card-container" style={{
width: '350px',
height: '200px',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
}}>
<LiquidGlass radius={15} frost={0.15} autoTextColor glassColor="rgba(255,255,255,0.35)">
<div style={{ padding: '24px', height: '100%' }}>
<h3 style={{ marginBottom: '12px' }}>
Glass Card
</h3>
<p>
This is a beautiful glass morphism card with liquid distortion effects.
</p>
</div>
</LiquidGlass>
</div>Overlay Effect
<div style={{ position: 'relative', width: '100%', height: '400px' }}>
<img src="background.jpg" alt="Background" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />
<div style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
width: '300px',
height: '150px'
}}>
<LiquidGlass autoTextColor glassColor="rgba(255,255,255,0.4)">
<div style={{ padding: '20px', textAlign: 'center' }}>
<h2>Overlay Content</h2>
<p>Glass effect over image</p>
</div>
</LiquidGlass>
</div>
</div>Browser Support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
The component leverages modern CSS (backdrop-filter) and SVG filters. Older browsers may not support all effects.
Performance Tips
- The component uses
ResizeObserverto adapt to size changes efficiently - SVG filters are hardware-accelerated in modern browsers
- For best performance, avoid animating the glass parameters rapidly
- Use the
presetmode for optimal default settings
Accessibility
autoTextColoruses computed styles from the nearest opaque ancestor to decide betweentextOnDarkandtextOnLight. This helps maintain readable contrast automatically. You can setforceTextColorto enforce the computed color on deeply nested content.
Storybook
Run a live playground:
npm run storybookSwitch the Backgrounds toolbar between light/dark to see text color adapt in real time.
License
MIT © [lucaperullo]
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Support
If you find this package helpful, please consider giving it a star on GitHub!
Keywords
react, react component, react ui, glassmorphism, glass morphism, liquid glass, liquid-glass, glass effect, frosted glass, frosted-glass, blur, blur effect, backdrop-filter, svg filter, displacement, displacement map, chromatic aberration, ui effects, card, overlay, glass ui, glass card, glass panel, glassmorphism react
For issues and feature requests, please create an issue.