Dive into the flexibility of CSS with calc(), an indispensable tool for micro-level control over your layout. The demos focus on interaction with CSS variables (var()), allowing you to create complex yet readable formulas for dimensions. Technically, this is a breakthrough: you’ll achieve pixel-perfect precision even when working with relative units, for instance, for perfect alignment or formula-based element centering. This is a collection that transforms static styles into truly computed and adaptive ones.
31 CSS calc() Examples
Scroll-Driven Masonry Reveal
demo & codeThis Scroll-Driven Masonry Reveal creates a playful, tactile experience where content cards appear to be “dealt” onto the screen as the user scrolls. By leveraging the native CSS Scroll-driven Animations API, it achieves smooth, main-thread-free entrance effects without a single line of JavaScript. The layout adapts intelligently from 2 to 8 columns, making it a robust solution for image galleries or blog archives.
Bouncy Digital Block Clock
demo & codeThis Bouncy Digital Block Clock transforms a standard time display into a playful, tactile UI element. It utilizes a split-digit technique where numbers “roll” into place while their container physically bounces, adding weight and character to every second that passes. The component is fully responsive, supports system dark mode automatically, and ensures accessibility via dynamic ARIA labels.
Merging Pill Filter Buttons
demo & codeThis Merging Pill Filter Button set introduces a fluid, organic feel to standard multi-select inputs. Instead of keeping active items isolated, this component visually fuses adjacent selected buttons into a single continuous shape. It’s an excellent choice for music apps, filtering systems, or any UI where categories are related and grouping them visually adds context.
Pure CSS Animated Details Accordion
demo & codeThis Pure CSS Animated Details Accordion utilizes cutting-edge CSS functions to achieve smooth height transitions on native HTML elements without a single line of JavaScript. By leveraging the revolutionary calc-size() function and the ::details-content pseudo-element, it finally solves the age-old problem of animating from height: 0 to height: auto.
Synchronized Pure CSS Skeleton Loader
demo & codeThis Synchronized Pure CSS Skeleton Loader pushes the boundaries of modern CSS by creating a unified “shimmer” effect that sweeps across multiple disparate elements simultaneously. Unlike standard skeleton loaders that animate each block independently, this implementation ensures a single, globally aligned gradient flow using advanced CSS math and Houdini properties.
Fancy Hover Effect on Avatar
A pure CSS “pop-out” avatar effect utilizing CSS variables to orchestrate a scale transition.
See the Pen Fancy Hover Effect on Avatar.
Wavy Image Gallery
Images appear as jigsaw puzzle pieces with interlocking edges that can visually fit together.
See the Pen Wavy Image Gallery.
CSS Cube
A pure CSS isometric text cube constructed via 3D transforms and trigonometry-based SCSS calculations. It features dynamic styling controlled by :has() and CSS variables, allowing for runtime theme switching (tritone/monotone/dim) and dark mode adaptation without JavaScript logic.
See the Pen CSS Cube.
Neumorphic Loader
A tactile Neumorphic progress indicator where JavaScript drives the animation state by updating a custom property --progress. The visual logic relies on CSS conic-gradient utilizing calculated color stops to dynamically render the filling arc, while complex layered box-shadow creates a soft, extruded 3D aesthetic.
See the Pen Neumorphic Loader.
Soft Button Styling
A collection of skeuomorphic buttons rendered entirely in CSS using complex gradient layering and calc()-driven geometry variables.
See the Pen Soft Button Styling.
Progress
A minimalist dashboard visualizing the passage of time across multiple scales (minute to year) via animated progress bars, updated in real-time.
See the Pen Progress.
Magnetic Links
A sophisticated magnetic navigation menu that uses JavaScript to map mouse proximity to CSS variables, driving smooth translations via translate. It features a configurable “follow” effect where a background pseudo-element glides between items based on bounding box coordinates calculated on hover.
See the Pen Magnetic Links.
Scrambling Letter Effect on Hover
On hover, letters scatter chaotically, creating a dynamic, interactive explosion of text without complex animation libraries.
See the Pen Scrambling Letter Effect on Hover.
Vertical Original vs. Negative Card (Hover and Drag)
An interactive card that reveals a negative version of the image on hover, with a draggable slider to compare the two versions, utilizing CSS blend modes and 3D transforms.
See the Pen Vertical Original vs. Negative Card (Hover and Drag).
Segmented/Pill Radio Input
A sliding segmented control that uses CSS Custom Properties calculated via JS to animate a pseudo-element background. The layout relies on flexbox for equal distribution, while calc() dynamically positions the “pill” based on the active index, enhanced by a springy cubic-bezier transition.
See the Pen Segmented/Pill Radio Input.
Product Plan Cards with CSS Ribbons
A pure CSS pricing component that creates a dimensional ‘ribbon’ aesthetic solely through ::after pseudo-elements and clip-path geometry. The layout leverages CSS Custom Properties for distinct color themes and calc with negative margins to extend elements beyond the parent container, creating a folded paper effect without any JavaScript dependencies.
See the Pen Product Plan Cards with CSS Ribbons.
Fancy Image Hover Effects with Splitting.js
Explore a variety of sophisticated hover effects, where complex animation patterns are created using advanced CSS selectors like :nth-child(-n + 3). These selectors target specific ranges of “cells” generated by Splitting.js.
See the Pen Fancy Image Hover Effects with Splitting.js.
Text Reveal with Splitting.js
This demo is a showcase of Splitting.js, a library that splits HTML elements into granular parts for detailed animation. The “Course Clear” heading is split into individual characters, and a grid overlay is created with data-splitting="cells", allowing for complex, staggered animations on each part.
See the Pen Text Reveal with Splitting.js.
CSS Blockquote with Gradient Drop Cap
A unique drop cap is created with modern CSS techniques - its complex background is generated by layering linear-gradient and repeating-conic-gradient, while its responsive size is managed by calc().
See the Pen CSS Blockquote with Gradient Drop Cap.
Scalable CSS Radial Gradient Pattern
A pure CSS pattern created by overlaying five radial-gradient declarations on a single element. The main feature is that all ring sizes and their count depend on a couple of CSS variables, making the pattern fully scalable using calc().
See the Pen Scalable CSS Radial Gradient Pattern.
Fancy Corner Decoration for Images
A border effect for an <img> tag - the size of the decorative edge, created with repeating-conic-gradient and -webkit-mask, is dynamically calculated via a complex calc() function controlled by CSS variables.
See the Pen Fancy Corner Decoration for Images.
Interactive Card Glow Effect
A modular React card component where a single pointermove listener updates CSS variables, powering a customizable, multi-layer glow and spotlight effect.
See the Pen Interactive Card Glow Effect.
Circular Battery Meter
An SVG-based battery meter where the fill level is a clever trick - JavaScript updates a CSS variable that drives a calc() function to animate the stroke-dashoffset of several <circle> elements simultaneously, creating a multi-layered visual effect.
See the Pen Circular Battery Meter.
Digital-Analog Dial Clock
A digital-analog clock hybrid where JavaScript’s setInterval only updates a single CSS variable - --dRotate, while all the complex rotation and counter-rotation of the dials and numbers is handled by pure CSS transform.
See the Pen Digital-Analog Dial Clock.
Multi-Card Spotlight Effect
An interactive 3D card effect where JavaScript tracks pointermove, calculates the relative cursor position, and passes it to --ratio-x and --ratio-y CSS variables, while CSS uses calc() to drive rotateX and rotateY.
See the Pen Multi-Card Spotlight Effect.
CSS Knob Widget with Range Slider
A demonstration of the power of CSS and Sass - the knob is a standard range slider where the thumb is styled as a knob, and its transform: rotate is calculated based on the input’s value via CSS variables updated by JS.
See the Pen CSS Knob Widget with Range Slider.
Range Slider with Value and Ruler
An unconventional use of datalist to create a custom ruler scale under the slider, where tick marks are styled using box-shadow and linear-gradient, and their visibility is controlled by CSS variables within media queries.
See the Pen Range Slider with Value and Ruler.
CSS Triangles with pow() and sqrt()
A demonstration of creating perfectly equilateral CSS triangles using the native pow() and sqrt() mathematical functions inside calc(). This showcases how to achieve geometric precision without preprocessors, relying solely on modern CSS.
See the Pen CSS Triangles with pow() and sqrt().
Pure CSS Responsive Hex Grid
An adaptive hexagonal grid without media queries, built on Container Queries, where the column count and the position of each element are calculated in CSS via complex calc() functions. The code demonstrates progressive enhancement - with a fallback to @property and a tan(atan2()) math trick to emulate division in older browsers.
Wheel Timeline. Pure CSS
An interactive radial carousel in pure CSS, where element positioning in a circle is calculated via calc(). State management is handled without JS using the “radio button hack” and the :has() pseudo-class, which triggers rotation animations and sequential content appearance.
Hover/Focus Effect For Flat Burron
A “slicing” fill effect created with two pseudo-elements - rotated rectangles that slide in from opposite sides on hover. The animation state is controlled by the --p CSS variable, which changes from 0 to 1, triggering the transform of the pseudo-elements via calc() to create a complex geometric transition.