惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
腾讯CDC
P
Privacy & Cybersecurity Law Blog
V
Vulnerabilities – Threatpost
小众软件
小众软件
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
P
Privacy International News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Scott Helme
Scott Helme
Simon Willison's Weblog
Simon Willison's Weblog
Forbes - Security
Forbes - Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
G
Google Developers Blog
S
Secure Thoughts
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 司徒正美
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
TaoSecurity Blog
TaoSecurity Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Last Week in AI
Last Week in AI
H
Heimdal Security Blog
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
Security Latest
Security Latest
SecWiki News
SecWiki News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security Affairs
V2EX - 技术
V2EX - 技术
S
Schneier on Security
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
博客园_首页
AI
AI
Help Net Security
Help Net Security
I
Intezer
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hacker News: Ask HN
Hacker News: Ask HN
Project Zero
Project Zero
D
Docker

Codrops

Magnetic Commerce: Building the Dash Creative Website | Codrops The Craft Behind Memorable Digital Experiences: Inside Unseen Studio | Codrops ZERO: The Engineering Behind a Defiant Interactive Narrative | Codrops Meet the Speakers of the First Three.js Conference | Codrops The Architecture Behind Trionn: Coordinating GSAP, Three.js, Lenis, and Web Audio | Codrops Where Stories Become Interactive Worlds: How makemepulse Brings Ideas to Life Across Web, XR, and Beyond | Codrops The Sleepers: Creating an Atmospheric WebGL Experience with Lightweight Techniques Building an Interactive Wave Propagation Cube Grid with Three.js | Codrops Ten Years Away: Designing an Interactive Comic for Studio375’s Tenth Anniversary | Codrops Building a Scroll-Driven 3D Gallery Using a Blender Camera Path with Three.js and GSAP | Codrops From Years of Client Work to a Next.js + Sanity Starter Kit | Codrops Sculpting a Digital Athlete: Capturing Stefanos Tsitsipas Beyond the Court | Codrops Building Persistent Page Transitions with WebGPU and Vanilla JavaScript | Codrops Inside Bisous: Designing an Editorial Experience for Cinematic CGI | Codrops Engineering the Web Experience Behind Shopify’s Spring ’26 Edition: Everywhere | Codrops Shaping Stories into Experience: The Work of Kevin Lam | Codrops Testing What Users Actually See with Vitest and Chromatic | Codrops Podium: Building a Website Where Running Becomes Storytelling | Codrops Designing Beyond the Surface: How DashDigital Turns Complexity into Clarity | Codrops Creative Entrepreneurship: Designing the Machine | Codrops Exploring 3D Image Rotations on Scroll | Codrops Always Building, Always Learning: Cyd Stumpel’s Journey Through the Modern Web | Codrops Designing A Better Lou: Reducing Cognitive Load Through Design, Content, and Systems | Codrops Sketching the Impossible: A 3D Portfolio Built Without a Single 3D Model | Codrops Building Horeca: Advanced Motion Design in Webflow Without the Performance Trade-Offs | Codrops Building an Interactive Digital Stamp Collection with Shaders, Postcards, and Playful Inspection | Codrops No Two Paths Alike: Inside San Rita’s Approach to Digital Experiences | Codrops The Making of the New Lesse Studio Website: Clarity, Performance, and Intentionality | Codrops Creating a Thumbnail Flow Animation with GSAP MotionPath | Codrops Forging Her Own Path: Houmahani Kane’s Journey in Creative Development | Codrops Beaucoup and the Pursuit of Memorable Experiences | Codrops The Future of Emotional Technology: Comfort Websites for Growth and Self-Awareness | Codrops The Never Ending Story: Building a Seamless Infinite Scroll Experience with GSAP & Lenis | Codrops Whooshes, Snaps and Shaders: Adrien Vanderpotte and the Feeling of the Interface | Codrops Building a Scroll-Driven 3D Cube Gallery in Webflow with GSAP | Codrops Creating Scroll-Driven SVG Map Animations with GSAP | Codrops Made With Gsap: Building a Fun Gravity-Based Mouse Trail | Codrops 80s Business Tech and Seamless Scene Transitions: Inside Shader.se’s Scroll-Driven WebGPU Pipeline | Codrops Merlin: The Code Boutique Turning Motion Into Digital Magic | Codrops Designing Ourselves: The New Obys Identity and Website | Codrops Exploring the HTML-in-Canvas Proposal | Codrops Le:mma Studio: Building the Feeling Behind the Screen | Codrops From Shader Uniforms to Clip-Path Wipes: How GSAP Drives My Portfolio | Codrops Reverse-Engineering Claude AI’s Mascot Animations with SVG and GSAP | Codrops Akaru: Crafting Precision-Driven Digital Experiences | Codrops Designing Against the Gallery: A Two-Year Journey to a Layered Portfolio Experience | Codrops Between Human and Machine: Sofia Papadopoulou’s Approach to Augmented Creativity | Codrops More Than a Portfolio: Building a Scroll-Driven 3D World with Something to Say | Codrops Rhumb Studio: Small but Mighty, Shaped by Curiosity | Codrops Susurrus: Crafting a Cozy Watercolor World with Three.js and Shaders | Codrops Building 4WIDE: Turning Distortion, Blur, and Motion into a Coherent Experience | Codrops A Playful Clip Menu with GSAP’s easeReverse | Codrops False Earth: From WebGL Limits to a WebGPU-Driven World | Codrops Interactive Storytelling for the Web: Building Immersive Stories with Timelines, 3D, and Layered Scenes | Codrops The Art of Complex Motion: Corentin Bernadou’s World of Shaders and Experimentation | Codrops They Call Me Giulio: The Making of a Cinematic Cyberpunk Portfolio | Codrops Lusion: Where Digital Craft Meets Ambitious Experimentation | Codrops A Single DM, a First SOTD, and the Start of Chanh M. Ho’s Creative Journey | Codrops Creating Custom Page Transitions in Astro with Barba.js and GSAP | Codrops R—K ’26: The Thinking and Code Behind a Portfolio Led by Presence | Codrops Building the Maxima Therapy Website: React, GSAP, and Dabbling with AI | Codrops Where Engineering Meets Craft: Edoardo Lunardi’s Obsession with the Details | Codrops Animating 160,000 Cubes in Three.js to Visualize Dithering | Codrops Arnaud Rocca’s Portfolio: From a GSAP-Powered Motion System to Fluid WebGL | Codrops Where Confidence Needs No Decoration: The Malvah.Studio Story | Codrops Motion Highlights #17 | Codrops
The Exat Microsite: Pushing a Typography Showcase to New Creative Extremes | Codrops
By Studio Size · 2026-04-10 · via Codrops

When Hot Type approached us to build the promotional site for Exat, their most ambitious typeface release yet, we knew a static specimen page wouldn’t be sufficient.

Exat is a 21-style, 1,715-glyph typographic system inspired by Croatian modernism and the EXAT 51 art collective. The site needed to reflect the logic, structure, and energy of that context.

The result is a scroll-driven experience where typography reacts, shifts, and transforms through interaction. This case study focuses on the design intent behind those decisions and how motion and interaction were used to communicate the type system.

Design Task

The core task was to present Exat as a system rather than a collection of styles. The typeface carries historical and cultural references, but it is also a contemporary variable font built for flexible use.

The microsite needed to:

  • Show the full range of the typeface without overwhelming the viewer
  • Make variation legible through interaction, not explanation
  • Balance expressive moments with clarity and restraint
  • Work as both a promotional site and a functional specimen

Rather than separating “content” and “interaction,” we treated typography itself as the primary interface element.

Structure and Flow

The site is structured as a continuous vertical experience. Each section introduces one aspect of the type system, then moves on before it becomes repetitive.

Calmer sections focused on reading and comparison are followed by denser, more expressive ones. This pacing was important to prevent visual fatigue while still demonstrating the font’s range.

Scroll is used as a structural tool rather than a trigger. Progress through the site is directly tied to movement, allowing the experience to feel controlled and predictable, even when the visuals become more complex.

The Glyph Grid

The opening glyph grid introduces Exat through proximity-based interaction. A field of lowercase characters responds to cursor position, shifting weight and color based on distance.

This interaction was designed to communicate several things at once:

  • The continuity of the variable weight axis
  • The precision of interpolation between extremes
  • The character of the typeface under stress

There are no instructions. The behavior is immediate and readable. On touch devices, where this interaction would lose clarity, the grid is replaced with a static fallback to avoid forced or ambiguous behavior.

How It Works

We calculate the Euclidean distance from the cursor to each letter’s center, then apply styles based on distance thresholds:

const frames = el.querySelectorAll(".frame");
const radius = remToPx(6); // Base influence radius
const distances = new Array(frames.length).fill(0);

// Define concentric "rings" of influence
const rules = {
    ring1: { distance: radius * 1.00, weight: 200, color: "#0000cb" },
    ring2: { distance: radius * 0.75, weight: 300, color: "#2546FF" },
    ring3: { distance: radius * 0.55, weight: 400, color: "#5C92FF" },
    ring4: { distance: radius * 0.45, weight: 500, color: "#FFCE2E" },
    ring5: { distance: radius * 0.35, weight: 700, color: "#FFAE00" },
    ring6: { distance: radius * 0.25, weight: 800, color: "#FF6200" },
    ring7: { distance: radius * 0.125, weight: 900, color: "#FF0B00" },
};

On every mouse movement, we recalculate distances:

function processMouseMove(e) {
    for (let i = 0; i < frames.length; i++) {
        const rect = frames[i].getBoundingClientRect();
        const centerX = rect.left + rect.width / 2;
        const centerY = rect.top + rect.height / 2;
        
        distances[i] = Math.sqrt(
            (e.clientX - centerX) ** 2 + 
            (e.clientY - centerY) ** 2
        );
    }
}

The animation loop applies styles via CSS custom properties:

function animate() {
    for (let i = 0; i < frames.length; i++) {
        const dist = distances[i] / modifier.val;
        const fr = frames[i];
        
        // Find which ring this letter falls into
        if (dist > rules.ring1.distance) {
            fr.style.setProperty("--fw", 200);
            fr.style.setProperty("--color", "#0000cb");
            // Fade out letters far from cursor
            const opacity = normalize(dist, rules.ring1.distance * 2.5, rules.ring1.distance);
            fr.style.setProperty("--opacity", isHovering ? opacity : 1);
        } 
        else if (dist < rules.ring7.distance) {
            fr.style.setProperty("--fw", 900);
            fr.style.setProperty("--color", "#FF0B00");
        }
        // ... check other rings
    }
    
    if (isReady) requestAnimationFrame(animate);
}

Subtle Motion as Context

Not all motion is meant to be noticed. In several sections, large numerals move in slow sine-wave patterns that react to scroll speed.

These movements do not carry information on their own. Their purpose is to add temporal depth and prevent the page from feeling static during pauses. When scrolling stops, the motion settles. When scrolling accelerates, so does the oscillation.

This approach keeps the page active without competing with the typography.

Variable Font Exploration

The Design Space section focuses on controlled comparison. Hovering over style names morphs the specimen text between weights and widths in real time.

Transitions are smooth and continuous, avoiding hard jumps between styles. This allows users to understand the relationship between extremes rather than treating styles as isolated presets.

The interaction is intentionally limited in scope. One text block, one axis at a time. The goal was clarity, not abundance.

Scroll-Driven Panels

To present font weights and key characteristics, we used stacked panels within a pinned scroll section. As the user scrolls, panels replace each other vertically, creating a clear sense of progression.

Each panel triggers its own internal text animations only when it becomes visible. This keeps attention focused and prevents multiple elements from competing for emphasis.

Scroll direction is fully reversible. Moving backward restores previous states, reinforcing the idea that scroll position equals state, not sequence.

Expressive Typography Moments

Certain statements are treated differently. Large typographic lines rotate in three-dimensional space as they enter the viewport, using a full X-axis rotation before settling into place.

These moments are used sparingly. Their role is to punctuate the experience and reference the experimental spirit of the source material without turning the entire site into a display of effects.

Collaboration and Constraints

The project was developed in close collaboration with RISE2 Studio, with design and development evolving in parallel. Performance considerations informed design decisions early, particularly in sections with many simultaneous animations.

The Tech Stack:

  • WordPress with a custom theme and ACF for content management
  • GSAP + ScrollTrigger + SplitText for all animations
  • Lenis for buttery-smooth scrolling
  • Splide.js for infinite marquees
  • Variable fonts for real-time weight/width morphing

Motion loops and interactions pause when off-screen, and smooth scrolling is applied selectively. On mobile devices, interactions are simplified rather than replicated.

Performance was treated as part of the design system, not a technical afterthought.

Outcome

The Exat microsite presents typography as an active system rather than a static artifact. Interaction is used to reveal structure, range, and behavior, not to decorate the page.

The result is a specimen that communicates how the typeface works by letting users experience it directly.