Skill

Glassmorphism

Design-style skill for Glassmorphism: backdrop-blurred, semi-transparent frosted-glass panels over vibrant backgrounds.

Maintainer of this project? Claim this page to edit the listing.


79
Spark score
out of 100
Updated 28 days ago
Version 13.5.0

Add to Favorites

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ag-glassmorphism | bash

Overview

Glassmorphism

A design-style skill for Glassmorphism - backdrop-blurred, semi-transparent frosted-glass panels over vibrant backgrounds - with matching Web CSS and native SwiftUI Material implementations. Use it for dashboards, settings panels, or overlays sitting on a vibrant gradient or photo background - it requires that busy background to actually show the frosted effect.

What it does

Glassmorphism is a design-style child skill ('looking through a frosted window - interfaces that blend seamlessly with vibrant backgrounds'), part of the design-it family and not meant to be triggered directly. Three core principles: Background Blur (the defining characteristic - elements blur whatever sits underneath them via backdrop filter), Semi-Transparent White/Dark Backgrounds (panels use rgba() colors so the background shines through), and Subtle Light Borders (a 1px semi-transparent white or light border simulates the glass edge catching light).

When to use - and when NOT to

Use it when the user's request matches this frosted-glass, layered-transparency aesthetic - modern dashboards, settings panels, or any UI overlaying a vibrant gradient or photo background. It explicitly requires a complex, vibrant, or textured background to actually work - a plain solid background gives the effect nothing to blur, defeating the point. As a design sub-style, it's selected by the parent design-it skill's routing rather than invoked on its own.

Inputs and outputs

Visual DNA needs a vibrant or textured background (gradients, abstract meshes, or photos), often over Yacht Club or Earth-Grounded Elegance if there's underlying visual texture, clean geometric sans-serifs, and high-contrast pure-white or pure-black text required for legibility against the glass. The web implementation leans entirely on backdrop-filter: blur(): a glass panel uses a light rgba(255,255,255,0.15) or dark rgba(0,0,0,0.25) background, backdrop-filter: blur(16px) (with the -webkit- prefix for Safari), a semi-transparent white border to simulate the glass edge, and a soft, subtle drop shadow to detach the pane from the background.

.glass-panel {
  background: rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(16px);
  border: 1px solid rgba(255, 255, 255, 0.3);
}

Integrations

SwiftUI has native, built-in glassmorphism via the .ultraThinMaterial, .thinMaterial, .regularMaterial, and .thickMaterial background modifiers - no manual blur implementation required. A glass card composes one of these materials as its background, a white-stroked RoundedRectangle overlay for the glass edge highlight, and a soft detached shadow, placed over a vibrant LinearGradient background so the frosted effect is actually visible - even nested elements like buttons can use .ultraThinMaterial for a consistent layered-glass look.

Who it's for

Designers and developers building a dashboard, settings panel, or overlay UI meant to sit visually on top of a vibrant gradient or photo background, using genuine backdrop-blur transparency rather than a flat semi-transparent color fill that just fakes the look - the difference is immediately visible once anything moves behind the panel, since a real blur tracks it and a faked one doesn't.

Source README

Glassmorphism

"Looking through a frosted window. Interfaces that blend seamlessly with vibrant backgrounds."

When to Use

Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the design-it skill and is not meant to be triggered directly.

Core Principles

  1. Background Blur (Backdrop Filter): The defining characteristic. Elements blur whatever is underneath them.
  2. Semi-transparent White/Dark Backgrounds: Panels use rgba() colors to let the background shine through.
  3. Subtle Light Borders: A 1px semi-transparent white (or light) border to simulate the glass edge catching the light.

Visual DNA

  • Colors: Requires a vibrant or textured background to work (e.g., gradients, abstract meshes, or photos). Works beautifully over Yacht Club or Earth-Grounded Elegance if there is underlying visual texture.
  • Typography: Clean, geometric sans-serifs. High contrast text (pure white or pure black) is required for legibility against the glass.
  • Shadows: Soft, subtle drop shadows to detach the glass pane from the background.

Web Implementation

  • Rely heavily on backdrop-filter: blur().
  • CSS Example:
body {
  /* Requires a complex background to see the glass effect */
  background: url('abstract-mesh.jpg') cover; 
}

.glass-panel {
  background: rgba(255, 255, 255, 0.15); /* Light glass */
  /* OR background: rgba(0, 0, 0, 0.25); for Dark glass */
  
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  
  border: 1px solid rgba(255, 255, 255, 0.3); /* The glass edge */
  border-radius: 16px;
  box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
  
  padding: 32px;
}

App Implementation

SwiftUI

struct GlassCard: View {
    var body: some View {
        ZStack {
            // Vibrant background required for glass to show
            LinearGradient(
                colors: [.purple, .blue, .cyan],
                startPoint: .topLeading,
                endPoint: .bottomTrailing
            )
            .ignoresSafeArea()
            
            // Glass panel
            VStack(alignment: .leading, spacing: 16) {
                Text("Glass Panel")
                    .font(.system(size: 22, weight: .semibold))
                    .foregroundColor(.white)
                Text("Content floating on frosted glass.")
                    .font(.system(size: 15))
                    .foregroundColor(.white.opacity(0.8))
                
                Button(action: {}) {
                    Text("Continue")
                        .font(.system(size: 15, weight: .semibold))
                        .foregroundColor(.white)
                        .padding(.horizontal, 24)
                        .padding(.vertical, 12)
                        .background(.ultraThinMaterial)
                        .cornerRadius(8)
                }
            }
            .padding(24)
            .background(.ultraThinMaterial)  // Built-in frosted glass
            .cornerRadius(16)
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(.white.opacity(0.3), lineWidth: 1) // Glass edge highlight
            )
            .shadow(color: .black.opacity(0.1), radius: 20, x: 0, y: 10)
            .padding(24)
        }
    }
}
  • Use .ultraThinMaterial, .thinMaterial, .regularMaterial, .thickMaterial - Apple built glassmorphism natively.
  • Add .overlay(RoundedRectangle().stroke(.white.opacity(0.3))) for the light edge catch.
  • Glass only works if there's a vibrant background visible behind it.

Flutter

class GlassCard extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        // Vibrant background
        Container(
          decoration: const BoxDecoration(
            gradient: LinearGradient(
              colors: [Colors.purple, Colors.blue, Colors.cyan],
              begin: Alignment.topLeft,
              end: Alignment.bottomRight,
            ),
          ),
        ),
        // Glass panel
        Center(
          child: ClipRRect(
            borderRadius: BorderRadius.circular(16),
            child: BackdropFilter(
              filter: ImageFilter.blur(sigmaX: 16, sigmaY: 16),
              child: Container(
                padding: const EdgeInsets.all(24),
                decoration: BoxDecoration(
                  color: Colors.white.withOpacity(0.15),
                  borderRadius: BorderRadius.circular(16),
                  border: Border.all(
                    color: Colors.white.withOpacity(0.3),
                    width: 1,
                  ),
                  boxShadow: [
                    BoxShadow(
                      color: Colors.black.withOpacity(0.1),
                      blurRadius: 20,
                      offset: const Offset(0, 10),
                    ),
                  ],
                ),
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    const Text('Glass Panel',
                      style: TextStyle(fontSize: 22, fontWeight: FontWeight.w600,
                        color: Colors.white)),
                    const SizedBox(height: 16),
                    Text('Content floating on frosted glass.',
                      style: TextStyle(fontSize: 15,
                        color: Colors.white.withOpacity(0.8))),
                  ],
                ),
              ),
            ),
          ),
        ),
      ],
    );
  }
}
  • Critical: BackdropFilter MUST be wrapped in ClipRRect - without clipping, the blur applies to the entire screen.
  • Use ImageFilter.blur(sigmaX: 10...20, sigmaY: 10...20) for the frosted effect.
  • Set the container color to Colors.white.withOpacity(0.1...0.2) - too opaque kills the glass look.

React Native

import { BlurView } from '@react-native-community/blur';

const GlassCard = () => (
  <View style={{ flex: 1 }}>
    {/* Vibrant background */}
    <LinearGradient
      colors={['#9B59B6', '#3498DB', '#1ABC9C']}
      style={StyleSheet.absoluteFill}
    />
    
    {/* Glass panel */}
    <View style={{
      margin: 24,
      borderRadius: 16,
      overflow: 'hidden', // Required for blur clipping
    }}>
      <BlurView
        blurType="light"
        blurAmount={16}
        style={{ padding: 24 }}
      >
        <View style={{
          // Glass border overlay
          borderRadius: 16,
          borderWidth: 1,
          borderColor: 'rgba(255,255,255,0.3)',
        }}>
          <Text style={{
            fontSize: 22, fontWeight: '600', color: '#FFF',
            marginBottom: 16,
          }}>
            Glass Panel
          </Text>
          <Text style={{
            fontSize: 15, color: 'rgba(255,255,255,0.8)',
          }}>
            Content floating on frosted glass.
          </Text>
        </View>
      </BlurView>
    </View>
  </View>
);
  • Install @react-native-community/blur - React Native has NO native blur support.
  • Wrap the BlurView parent in a View with overflow: 'hidden' and borderRadius to clip the blur.
  • Use blurType: 'light' for light glass, 'dark' for dark glass, 'chromeMaterial' for iOS Chrome effect.
  • Android limitation: BlurView performance varies on Android. Test thoroughly.

Jetpack Compose

@Composable
fun GlassCard() {
    Box(modifier = Modifier.fillMaxSize()) {
        // Vibrant background
        Box(modifier = Modifier
            .fillMaxSize()
            .background(Brush.linearGradient(
                colors = listOf(Color(0xFF9B59B6), Color(0xFF3498DB), Color(0xFF1ABC9C)),
                start = Offset.Zero,
                end = Offset.Infinite,
            ))
        )
        
        // Glass panel — Compose lacks native backdrop-filter,
        // so use a semi-transparent surface with blur via Modifier.blur()
        Card(
            modifier = Modifier
                .padding(24.dp)
                .align(Alignment.Center),
            shape = RoundedCornerShape(16.dp),
            colors = CardDefaults.cardColors(
                containerColor = Color.White.copy(alpha = 0.15f),
            ),
            border = BorderStroke(1.dp, Color.White.copy(alpha = 0.3f)),
            elevation = CardDefaults.cardElevation(defaultElevation = 0.dp),
        ) {
            Column(modifier = Modifier.padding(24.dp)) {
                Text("Glass Panel",
                    fontSize = 22.sp,
                    fontWeight = FontWeight.SemiBold,
                    color = Color.White)
                Spacer(Modifier.height(16.dp))
                Text("Content floating on frosted glass.",
                    fontSize = 15.sp,
                    color = Color.White.copy(alpha = 0.8f))
            }
        }
    }
}
  • Compose limitation: True backdrop-filter blur doesn't exist natively. Use Modifier.blur() (API 31+) on the background, or use RenderEffect.createBlurEffect() for lower APIs.
  • Use the haze library (dev.chrisbanes.haze) for proper glassmorphism in Compose - it provides Modifier.haze() and Modifier.hazeChild().
  • Without native blur, fallback to Color.White.copy(alpha = 0.15f) with a strong border to simulate the glass edge.

Do's and Don'ts

  • DO: Ensure there is enough contrast between text and the blurred background. Accessibility is often a challenge with this style.
  • DON'T: Use Glassmorphism on a solid white or solid black background-the effect will be completely invisible.

Limitations

  • This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
  • Ensure appropriate contrast ratios and responsive behaviors are verified separately.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.