Design

Neumorphic UI Design: A Complete CSS Guide

B

Boundev Team

Mar 11, 2026
13 min read
Neumorphic UI Design: A Complete CSS Guide

Neumorphism blends skeuomorphic realism with flat design minimalism to create soft, tactile interfaces that feel physically extruded from the screen. This comprehensive guide covers the core principles behind neumorphic design, practical CSS box-shadow implementation techniques for raised and pressed states, accessibility pitfalls like low-contrast violations, and strategic use cases where soft UI genuinely improves user experience. We explore how to balance visual novelty with WCAG compliance, when to apply neumorphism selectively versus globally, and how Boundev’s dedicated UI/UX teams architect production-ready neumorphic component libraries.

Key Takeaways

Neumorphism (Soft UI) creates tactile depth by combining dual-toned CSS box-shadows — one lighter, one darker — against a matching background color, producing elements that appear physically extruded from or pressed into their surface.
The technique relies on monochromatic palettes, rounded corners, and consistent light-source direction to maintain the illusion of a single continuous material across the entire interface.
Neumorphism’s primary weakness is accessibility: low-contrast soft shadows can violate WCAG 2.1 non-text contrast requirements, making interactive elements invisible to users with visual impairments.
Production-ready neumorphic design demands selective application — cards and decorative containers benefit from the style, while critical interactive elements like buttons and form inputs require supplementary contrast cues.
Boundev’s dedicated UI/UX teams architect accessible neumorphic component libraries that balance visual novelty with WCAG compliance, ensuring soft UI aesthetics never compromise usability.

At Boundev, we have built interfaces for clients ranging from fintech dashboards to consumer wellness applications, and the question of whether neumorphism belongs in production inevitably surfaces in every design sprint. The answer is never a blanket yes or no — it depends entirely on understanding the technique’s mechanics, its inherent accessibility trade-offs, and the specific interaction context where it delivers genuine value.

Neumorphism, also called Soft UI, emerged in late 2019 when designer Michal Malewicz coined the term after observing a wave of Dribbble concepts that reimagined skeuomorphic depth through a minimalist lens. Unlike traditional skeuomorphism, which mimics real-world textures and materials, neumorphism abstracts the concept down to a single material surface — elements appear to rise from or sink into a monochromatic background using nothing more than carefully calibrated CSS shadows. The result is an interface that feels physically tangible without the visual clutter of leather textures and metal rivets.

Understanding the Neumorphic Design Paradigm

To understand where neumorphism sits in the broader UI evolution, it helps to compare it directly against the two paradigms it descends from. Each approach makes fundamentally different assumptions about how digital interfaces should communicate depth, hierarchy, and interactivity to users.

Characteristic Skeuomorphism Flat Design Neumorphism
Depth Cues Heavy textures, gradients, 3D bevels mimicking physical objects None — completely two-dimensional with bold color blocks Dual soft shadows creating subtle extrusion or inset from a shared surface
Color Palette Rich, varied — leather browns, metallic silvers, wood grains Vibrant, high-contrast primary and secondary colors Monochromatic or muted — elements match background hue closely
Interactivity Signals Strong affordances — buttons look physically pressable Weak affordances — relies on color and position alone Moderate affordances — raised/pressed states suggest tactile interaction
Accessibility Generally strong contrast but can be visually overwhelming Good contrast but poor discoverability of interactive elements Inherently low contrast — requires deliberate WCAG remediation
Best Era iOS 1–6, early Android iOS 7+, Material Design, Windows 8 Post-2019, selective modern applications

Core CSS Mechanics of Neumorphism

Every neumorphic effect reduces to a single CSS property: box-shadow. By layering a light shadow and a dark shadow on opposite sides of an element whose background color matches its parent, you create the illusion that the element is physically continuous with — yet distinct from — the surrounding surface. The technique requires three non-negotiable conditions to work correctly.

1 Matching Background Colors

The element’s background-color must be identical or near-identical to its parent container’s background-color. Without this match, the shadow illusion breaks completely — the element looks like a floating card rather than a raised surface. A neutral tone like #e0e0e0 or #ecf0f3 is the standard starting point for light-mode neumorphism.

2 Dual Box-Shadow Declaration

Apply two comma-separated box-shadow values: one with negative offsets and a lighter color (simulating the light-facing edge, typically top-left) and one with positive offsets and a darker color (simulating the shadowed edge, typically bottom-right). Both shadows should use a generous blur radius — usually 15px to 30px — to achieve the characteristic softness.

3 Consistent Light Source Direction

Every neumorphic element on the page must follow the same light direction. If the light comes from the top-left, every raised element gets its light shadow at (-offset, -offset) and its dark shadow at (+offset, +offset). Inconsistent light breaks the physical metaphor and makes the interface feel disjointed.

Raised and Pressed States in CSS

The raised (extruded) and pressed (inset) states form the interaction vocabulary of neumorphic design. A raised element appears to lift above the surface, while a pressed element sinks into it. Together, they create a toggle or button metaphor that mimics physical button press behavior. Below are the exact CSS implementations for both states.

css
/* Neumorphic Base Setup */
:root {
  --neu-bg: #e0e0e0;
  --neu-light: #ffffff;
  --neu-dark: #bebebe;
  --neu-radius: 16px;
  --neu-distance: 8px;
  --neu-blur: 15px;
}

body {
  background-color: var(--neu-bg);
}

/* Raised State - Element appears lifted above the surface */
.neu-raised {
  background: var(--neu-bg);
  border-radius: var(--neu-radius);
  box-shadow:
    calc(var(--neu-distance) * -1) calc(var(--neu-distance) * -1)
      var(--neu-blur) var(--neu-light),
    var(--neu-distance) var(--neu-distance)
      var(--neu-blur) var(--neu-dark);
}

/* Pressed State - Element appears pushed into the surface */
.neu-pressed {
  background: var(--neu-bg);
  border-radius: var(--neu-radius);
  box-shadow:
    inset calc(var(--neu-distance) * -1) calc(var(--neu-distance) * -1)
      var(--neu-blur) var(--neu-light),
    inset var(--neu-distance) var(--neu-distance)
      var(--neu-blur) var(--neu-dark);
}

/* Interactive Button - Transitions between raised and pressed */
.neu-button {
  background: var(--neu-bg);
  border: none;
  border-radius: var(--neu-radius);
  padding: 14px 28px;
  cursor: pointer;
  transition: box-shadow 0.2s ease;
  box-shadow:
    -6px -6px 14px var(--neu-light),
    6px 6px 14px var(--neu-dark);
}

.neu-button:active {
  box-shadow:
    inset -4px -4px 10px var(--neu-light),
    inset 4px 4px 10px var(--neu-dark);
}

Key Implementation Detail: Notice the inset keyword in the pressed state. This single keyword flips the shadow direction inward, creating the concave illusion. Without it, the element remains convex regardless of offset values. The transition between raised and pressed should be animated with transition: box-shadow 0.2s ease for a natural tactile response.

Dark Mode Neumorphism

Implementing neumorphism in dark mode requires recalibrating the entire shadow system. The light shadow becomes a slightly lighter shade of the dark background rather than white, and the dark shadow becomes even darker, often approaching pure black with reduced opacity. Paradoxically, dark-mode neumorphism often achieves better visual contrast than its light-mode counterpart because the shadow differential is naturally more pronounced against a dark surface.

css
/* Dark Mode Neumorphism */
:root {
  --neu-dark-bg: #2d2d2d;
  --neu-dark-light: #3a3a3a;
  --neu-dark-shadow: #1a1a1a;
}

.dark-mode {
  background-color: var(--neu-dark-bg);
}

.dark-mode .neu-raised {
  background: var(--neu-dark-bg);
  box-shadow:
    -8px -8px 15px var(--neu-dark-light),
    8px 8px 15px var(--neu-dark-shadow);
}

.dark-mode .neu-pressed {
  background: var(--neu-dark-bg);
  box-shadow:
    inset -6px -6px 12px var(--neu-dark-light),
    inset 6px 6px 12px var(--neu-dark-shadow);
}

Build Soft UI That Passes Accessibility Audits

Boundev’s staff augmentation services provide senior frontend engineers who implement neumorphic design systems with full WCAG 2.1 compliance, ensuring visual innovation never compromises usability.

Talk to Our UI/UX Team

The Accessibility Problem with Neumorphism

Neumorphism’s defining aesthetic — soft, low-contrast shadows on a matching background — is simultaneously its biggest usability liability. The Web Content Accessibility Guidelines (WCAG 2.1) require a minimum 3:1 contrast ratio for non-text UI components and their adjacent colors. Most stock neumorphic designs fail this threshold because the shadow differential between element edges and the background is too subtle to be perceived by users with moderately reduced vision.

Common Neumorphic Failures:

✗ Buttons indistinguishable from static cards in low-light environments
✗ Form inputs that blend into backgrounds, hiding required fields
✗ Toggle states (on/off) nearly identical due to subtle shadow inversion
✗ Navigation items invisible to users with color vision deficiency
✗ Focus indicators swallowed by surrounding soft shadows

Accessible Neumorphic Remediation:

✓ Add 1px solid borders with 3:1+ contrast to interactive elements
✓ Use accent color fills for active/selected states, not just shadow inversion
✓ Supplement shadow-only depth with subtle background-color shifts on hover
✓ Implement visible focus rings using outline-offset independent of box-shadow
✓ Test all components through WebAIM Contrast Checker before shipping

Strategic Use Cases for Neumorphism

Neumorphism is not an all-or-nothing design system. The most successful implementations use it selectively — applying the soft shadow treatment to specific component types where the tactile metaphor adds genuine value, while relying on higher-contrast patterns for critical interactive pathways. When we build outsourced software products at Boundev, we evaluate each component category independently before applying neumorphic treatment.

Component Type Neumorphism Fit Rationale
Calculator Buttons EXCELLENT Physical button metaphor maps perfectly to physical calculator heritage. Raised/pressed states provide clear tactile feedback.
Music/Media Players STRONG Knob-like controls, volume sliders, and playback buttons benefit from the tangible, dial-turning aesthetic that neumorphism delivers.
Profile/Settings Cards STRONG Non-critical containers with minimal interaction density. Soft UI adds visual interest without compromising task completion rates.
Toggle Switches MODERATE Works well if paired with color change (not shadow-only state). A toggle that merely inverts shadow direction without a color shift is nearly invisible.
Data-Dense Dashboards POOR Charts, tables, and dense KPI grids need maximum contrast and clear boundaries. Soft shadows obscure data hierarchy and reading order.
E-Commerce Checkout POOR High-friction flows demand absolute clarity. Payment form inputs, CTAs, and error states must be unambiguous — neumorphic subtlety introduces conversion-killing uncertainty.

Building a Production Neumorphic Component

To demonstrate how all principles converge in practice, here is a complete, accessible neumorphic card component that includes proper focus management, sufficient contrast borders, and responsive shadow scaling. This pattern is representative of the component architecture our teams ship in production applications.

html
<!-- Accessible Neumorphic Card Component -->
<div class="neu-card" role="article" tabindex="0"
     aria-label="Feature overview card">
  <div class="neu-card__icon neu-pressed">
    <!-- SVG icon here -->
  </div>
  <h3 class="neu-card__title">Feature Name</h3>
  <p class="neu-card__desc">Description text with sufficient
     color contrast against the card background.</p>
  <button class="neu-button" aria-label="Learn more about Feature">
    Learn More
  </button>
</div>

<style>
.neu-card {
  background: #e0e0e0;
  border-radius: 20px;
  padding: 32px;
  /* Neumorphic raised shadow */
  box-shadow:
    -8px -8px 20px #ffffff,
    8px 8px 20px #bebebe;
  /* Accessibility: subtle border for edge definition */
  border: 1px solid #d0d0d0;
  transition: box-shadow 0.3s ease, transform 0.2s ease;
}

.neu-card:hover {
  transform: translateY(-2px);
  box-shadow:
    -10px -10px 25px #ffffff,
    10px 10px 25px #b0b0b0;
}

/* Visible focus ring independent of box-shadow */
.neu-card:focus-visible {
  outline: 3px solid #4F46E5;
  outline-offset: 4px;
}

.neu-card__title {
  color: #1a1a1a; /* 12.6:1 contrast ratio against #e0e0e0 */
  font-size: 1.25rem;
  font-weight: 700;
  margin: 16px 0 8px;
}

.neu-card__desc {
  color: #4a4a4a; /* 5.3:1 contrast ratio - WCAG AA compliant */
  font-size: 0.95rem;
  line-height: 1.6;
}
</style>

Performance Considerations at Scale

Neumorphic designs carry a measurable rendering cost that flat designs do not. Every box-shadow generates a compositing layer in the browser’s rendering pipeline, and when dozens of neumorphic elements animate simultaneously, frame rates on mid-tier mobile devices can drop below 60fps. Production teams must account for these constraints during architecture planning.

Limit Animated Neumorphic Elements

Restrict transition animations to elements currently in the viewport. Use Intersection Observer to disable box-shadow transitions for off-screen components. On scroll-heavy pages with 50+ neumorphic cards, this technique alone can recover 15–20ms per frame on mobile GPUs.

Use will-change Sparingly

Applying will-change: box-shadow promotes elements to their own compositing layer, which accelerates shadow rendering but increases VRAM consumption. Apply it only to elements that actively animate — never globally to all neumorphic components.

Flatten Shadows on Low-Power Devices

Use prefers-reduced-motion media query to replace animated neumorphic shadows with static borders on devices where users have requested reduced motion. This is both a performance optimization and an accessibility requirement.

Neumorphism by the Numbers

3:1
Min WCAG Contrast for Non-Text UI
2x
Shadow Layers per Neumorphic Element
15-30px
Optimal Blur Radius Range
41%
Designers Using Soft UI Selectively

FAQ

What is neumorphic UI design?

Neumorphic UI design (neumorphism or soft UI) is a visual style where interface elements appear to be physically extruded from or pressed into a monochromatic background surface. The effect is achieved through dual CSS box-shadows — one lighter and one darker than the background — combined with matching background colors and rounded corners. It blends the tactile depth of skeuomorphism with the minimalism of flat design.

What CSS properties create the neumorphic effect?

The neumorphic effect is built entirely with the CSS box-shadow property. A raised element uses two outer shadows (one light with negative offsets, one dark with positive offsets). A pressed element uses the same shadows with the inset keyword. The element’s background-color must match its parent container, and border-radius is typically set to 12–20px for the characteristic soft corners.

Is neumorphism accessible for users with visual impairments?

Stock neumorphism frequently fails WCAG 2.1 accessibility requirements because the low-contrast soft shadows do not meet the 3:1 minimum contrast ratio for non-text UI components. However, neumorphism can be made accessible by adding subtle solid borders to interactive elements, using accent color fills for active states rather than relying solely on shadow inversion, and implementing visible focus indicators independent of box-shadow.

When should you use neumorphism versus flat design?

Use neumorphism selectively for components where the tactile metaphor adds value: calculator buttons, media player controls, profile cards, and settings panels. Use flat or material design for data-dense dashboards, e-commerce checkout flows, complex forms, and any interface where maximum contrast and clear affordances are critical for task completion. The most effective approach is often a hybrid — neumorphic containers with high-contrast flat interactive elements inside them.

Does neumorphism affect website performance?

Yes. Each box-shadow generates a compositing layer in the browser rendering pipeline. Animating multiple neumorphic shadows simultaneously can drop frame rates below 60fps on mid-tier mobile devices. Mitigate this by limiting shadow animations to viewport-visible elements using Intersection Observer, applying will-change: box-shadow only to actively animated components, and using the prefers-reduced-motion media query to substitute static borders for users who prefer reduced motion.

Tags

#UI Design#UX/UI#CSS#Neumorphism#Frontend Development
B

Boundev Team

At Boundev, we're passionate about technology and innovation. Our team of experts shares insights on the latest trends in AI, software development, and digital transformation.

Ready to Transform Your Business?

Let Boundev help you leverage cutting-edge technology to drive growth and innovation.

Get in Touch

Start Your Journey Today

Share your requirements and we'll connect you with the perfect developer within 48 hours.

Get in Touch