{"id":20321,"date":"2025-10-22T12:15:15","date_gmt":"2025-10-22T06:45:15","guid":{"rendered":"https:\/\/vinish.dev\/?p=20321"},"modified":"2025-10-22T12:15:16","modified_gmt":"2025-10-22T06:45:16","slug":"css-scroll-linked-animation","status":"publish","type":"post","link":"https:\/\/vinish.dev\/css-scroll-linked-animation","title":{"rendered":"Building Scroll-Linked Animations in CSS"},"content":{"rendered":"\n<p>Have you ever visited a website where elements smoothly fade in, slide across, or scale up as you scroll down the page? These scroll-linked animations used to require JavaScript libraries, but now you can create them with pure CSS using the <code>@scroll-timeline<\/code> rule and <code>animation-timeline<\/code> property.<\/p>\n\n\n\n<p>In this tutorial, I will show you how to create scroll-linked animations in CSS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Are CSS Scroll-Linked Animations?<\/h2>\n\n\n\n<p>Scroll-linked animations in CSS are visual effects that trigger based on your scrolling position. Instead of playing automatically when the page loads, these animations respond to how far you've scrolled. Think of elements that appear gradually as they enter your viewport or images that zoom in as you scroll past them.<\/p>\n\n\n\n<p>In my experience, these animations make websites feel more dynamic and engaging without overwhelming your visitors. The best part? With modern CSS, you don't need any JavaScript to make them work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding the Scroll-Linked Animation Basics<\/h2>\n\n\n\n<p>Before we dive into scroll animations, you need to understand how regular CSS animations work. An animation has keyframes that define what changes happen, like moving from invisible to visible or from small to large.<\/p>\n\n\n\n<p>Here's where scroll-linked animations differ: instead of running based on time (like \"complete this animation in 2 seconds\"), they run based on scroll position. When you scroll down 50% of the page, the animation is 50% complete.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Core CSS Properties for Scroll-Linked Animation<\/h2>\n\n\n\n<p>You'll work with two main CSS features:<\/p>\n\n\n\n<p><strong>@scroll-timeline<\/strong>: This creates a timeline based on scrolling. You define which scrollable container to track and in which direction (vertical or horizontal).<\/p>\n\n\n\n<p><strong>animation-timeline<\/strong>: This property connects your animation to the scroll timeline instead of running on a time-based timeline.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Use @scroll-timeline<\/h2>\n\n\n\n<p>In CSS, the <code>@scroll-timeline<\/code> rule lets you create a named scroll timeline that you can reference later. Here's the basic syntax:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@scroll-timeline my-scroller {<br>    source: auto;<br>    orientation: block;<br>    scroll-offsets: 0%, 100%;<br>}<\/pre>\n\n\n\n<p>In this code, <code>my-scroller<\/code> is the name you give to your timeline. The <code>source: auto<\/code> means it will track the nearest scrollable ancestor, and <code>orientation: block<\/code> specifies vertical scrolling (use <code>inline<\/code> for horizontal).<\/p>\n\n\n\n<p>Then you connect this timeline to an animation:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.animated-element {<br>    animation: fadeIn linear;<br>    animation-timeline: my-scroller;<br>}<\/pre>\n\n\n\n<p>This approach gives you more control, especially when you want multiple elements to animate based on a specific container's scroll position.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using animation-timeline with Built-in Functions<\/h2>\n\n\n\n<p>Instead of manually creating a <code>@scroll-timeline<\/code>, you can use built-in functions directly with <code>animation-timeline<\/code>. This is much simpler and what I use most often:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.element {<br>    animation: slideIn linear;<br>    animation-timeline: scroll();<br>}<\/pre>\n\n\n\n<p>The <code>scroll()<\/code> function creates an automatic timeline based on the nearest scrollable ancestor. You can also use:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.element {<br>    animation: fadeIn linear;<br>    animation-timeline: view();<br>}<\/pre>\n\n\n\n<p>The <code>view()<\/code> function is different. It creates a timeline based on when the element enters and exits the viewport. This means the animation starts when the element becomes visible and completes when it's fully in view.<\/p>\n\n\n\n<p>Let me show you these in action with practical examples.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example 1: Scroll-Linked Progress Bar Using Named Scroll Timeline in CSS<\/h2>\n\n\n\n<p>Let's start with a pure named scroll timeline example where we create a progress bar that grows as you scroll through content:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!DOCTYPE html><br>&lt;html><br>&lt;head><br>    &lt;style><br>        body {<br>            margin: 0;<br>            padding: 20px;<br>            background: #0f172a;<br>            font-family: system-ui, sans-serif;<br>        }<br>        <br>        h1 {<br>            color: white;<br>            text-align: center;<br>            margin-bottom: 10px;<br>        }<br>        <br>        .instruction {<br>            color: #94a3b8;<br>            text-align: center;<br>            margin-bottom: 20px;<br>        }<br>        <br>        .scroll-container {<br>            width: 90%;<br>            max-width: 600px;<br>            height: 400px;<br>            margin: 40px auto;<br>            overflow-y: scroll;<br>            background: white;<br>            border-radius: 16px;<br>            padding: 30px;<br>            box-shadow: 0 20px 60px rgba(0,0,0,0.3);<br>            scroll-timeline-name: --container-timeline;<br>            scroll-timeline-axis: block;<br>            position: relative;<br>        }<br>        <br>        .progress-bar {<br>            position: sticky;<br>            top: 0;<br>            left: 0;<br>            right: 0;<br>            height: 6px;<br>            background: linear-gradient(to right, #3b82f6, #8b5cf6, #ec4899);<br>            transform-origin: left;<br>            border-radius: 3px;<br>            margin-bottom: 20px;<br>            animation: growBar linear;<br>            animation-timeline: --container-timeline;<br>            z-index: 10;<br>        }<br>        <br>        @keyframes growBar {<br>            from {<br>                transform: scaleX(0);<br>            }<br>            to {<br>                transform: scaleX(1);<br>            }<br>        }<br>        <br>        .content {<br>            line-height: 1.8;<br>            color: #475569;<br>        }<br>        <br>        .content h2 {<br>            color: #1e293b;<br>            margin-top: 0;<br>        }<br>        <br>        .content p {<br>            margin-bottom: 16px;<br>        }<br>    &lt;\/style><br>&lt;\/head><br>&lt;body><br>    &lt;h1>Named Scroll Timeline Demo&lt;\/h1><br>    &lt;p class=\"instruction\">Scroll inside the white box and watch the progress bar&lt;\/p><br>    &lt;div class=\"scroll-container\"><br>        &lt;div class=\"progress-bar\">&lt;\/div><br>        &lt;div class=\"content\"><br>            &lt;h2>Scroll Progress Indicator&lt;\/h2><br>            &lt;p>As you scroll through this container, the colorful bar above grows from left to right. This demonstrates using a named scroll timeline with scroll-timeline-name property.&lt;\/p><br>            &lt;p>The timeline is tied specifically to this scrollable container, not the entire page. This gives you precise control over which scroll area triggers your animations.&lt;\/p><br>            &lt;p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.&lt;\/p><br>            &lt;p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident.&lt;\/p><br>            &lt;p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis.&lt;\/p><br>            &lt;p>Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.&lt;\/p><br>            &lt;p>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt.&lt;\/p><br>            &lt;p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores.&lt;\/p><br>            &lt;p>When you reach the end of this content, the progress bar will be completely filled, showing you've scrolled through the entire container!&lt;\/p><br>        &lt;\/div><br>    &lt;\/div><br>&lt;\/body><br>&lt;\/html><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Live Preview:<\/h3>\n\n\n\n<p class=\"codepen\" data-height=\"500\" data-theme-id=\"dark\" data-slug-hash=\"MYKVear\" data-pen-title=\"sl-anim-1\" data-user=\"foxinfotech\" style=\"height: 500px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\">\n  <span>See the Pen <a href=\"https:\/\/codepen.io\/foxinfotech\/pen\/MYKVear\">\n  sl-anim-1<\/a> by Vinish Kapoor (<a href=\"https:\/\/codepen.io\/foxinfotech\">@foxinfotech<\/a>)\n  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<\/span>\n<\/p>\n<script async src=\"https:\/\/public.codepenassets.com\/embed\/index.js\"><\/script>\n\n\n\n<p>In this example, I created a named timeline using <code>scroll-timeline-name: --container-timeline<\/code> and <code>scroll-timeline-axis: block<\/code> properties on the scrollable container itself. The double dash prefix (--) is required for named timelines. The progress bar stays at the top using <code>position: sticky<\/code> and grows horizontally as you scroll through the content.<\/p>\n\n\n\n<p>The <code>transform: scaleX(0)<\/code> makes the bar start with zero width, and as you scroll, it expands to full width with <code>scaleX(1)<\/code>. This creates a visual indicator of your scroll progress through that specific container, which is a common pattern I use for long-form content.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example 2: Fade-In Effect (Scroll-Linked Animation with view())<\/h2>\n\n\n\n<p>Let's create a simple fade-in effect for a box as you scroll down:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!DOCTYPE html><br>&lt;html><br>&lt;head><br>    &lt;style><br>        body {<br>            margin: 0;<br>            padding: 20px;<br>            min-height: 200vh;<br>            background: linear-gradient(to bottom, #1e3a8a, #3b82f6);<br>        }<br>        <br>        .fade-box {<br>            width: 300px;<br>            height: 200px;<br>            background: white;<br>            margin: 600px auto 0;<br>            border-radius: 12px;<br>            display: flex;<br>            align-items: center;<br>            justify-content: center;<br>            font-size: 24px;<br>            font-weight: bold;<br>            color: #1e3a8a;<br>            animation: fadeIn linear;<br>            animation-timeline: view();<br>        }<br>        <br>        @keyframes fadeIn {<br>            from {<br>                opacity: 0;<br>                transform: translateY(50px);<br>            }<br>            to {<br>                opacity: 1;<br>                transform: translateY(0);<br>            }<br>        }<br>    &lt;\/style><br>&lt;\/head><br>&lt;body><br>    &lt;h1 style=\"color: white; text-align: center;\">Scroll Down&lt;\/h1><br>    &lt;div class=\"fade-box\">I Fade In!&lt;\/div><br>&lt;\/body><br>&lt;\/html><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Live Preview:<\/h3>\n\n\n\n<p class=\"codepen\" data-height=\"500\" data-theme-id=\"dark\" data-slug-hash=\"OPMvXMN\" data-pen-title=\"sc-anim-2\" data-user=\"foxinfotech\" style=\"height: 500px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\">\n  <span>See the Pen <a href=\"https:\/\/codepen.io\/foxinfotech\/pen\/OPMvXMN\">\n  sc-anim-2<\/a> by Vinish Kapoor (<a href=\"https:\/\/codepen.io\/foxinfotech\">@foxinfotech<\/a>)\n  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<\/span>\n<\/p>\n<script async src=\"https:\/\/public.codepenassets.com\/embed\/index.js\"><\/script>\n\n\n\n<p>In this example, I'm using <code>animation-timeline: view()<\/code>, which creates an automatic scroll timeline based on the element's visibility in the viewport. The animation starts when the element enters the viewport and completes when it's fully visible. You don't need to write a separate <code>@scroll-timeline<\/code> rule because <code>view()<\/code> handles it automatically.<\/p>\n\n\n\n<p>The <code>@keyframes fadeIn<\/code> rule defines what happens: the box starts invisible (<code>opacity: 0<\/code>) and slightly below its final position (<code>translateY(50px)<\/code>), then transitions to fully visible at its natural position.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example 3: Scale on Scroll (Scroll-Linked Animation Using CSS)<\/h2>\n\n\n\n<p>Now let's create something that grows as you scroll:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!DOCTYPE html><br>&lt;html><br>&lt;head><br>    &lt;style><br>        body {<br>            margin: 0;<br>            padding: 40px;<br>            min-height: 200vh;<br>            background: #0f172a;<br>        }<br>        <br>        .scale-container {<br>            margin-top: 400px;<br>            text-align: center;<br>        }<br>        <br>        .scale-box {<br>            width: 200px;<br>            height: 200px;<br>            background: linear-gradient(135deg, #ec4899, #8b5cf6);<br>            margin: 0 auto;<br>            border-radius: 20px;<br>            animation: scaleUp linear;<br>            animation-timeline: view();<br>        }<br>        <br>        @keyframes scaleUp {<br>            from {<br>                transform: scale(0.5) rotate(0deg);<br>                opacity: 0.5;<br>            }<br>            to {<br>                transform: scale(1) rotate(360deg);<br>                opacity: 1;<br>            }<br>        }<br>        <br>        h2 {<br>            color: white;<br>            margin-bottom: 30px;<br>        }<br>    &lt;\/style><br>&lt;\/head><br>&lt;body><br>    &lt;h1 style=\"color: white; text-align: center;\">Scroll to See Magic&lt;\/h1><br>    &lt;div class=\"scale-container\"><br>        &lt;h2>Watch Me Grow&lt;\/h2><br>        &lt;div class=\"scale-box\">&lt;\/div><br>    &lt;\/div><br>&lt;\/body><br>&lt;\/html><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Live Preview:<\/h3>\n\n\n\n<p class=\"codepen\" data-height=\"500\" data-theme-id=\"dark\" data-slug-hash=\"emJMzJr\" data-pen-title=\"sc-anim-3\" data-user=\"foxinfotech\" style=\"height: 500px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\">\n  <span>See the Pen <a href=\"https:\/\/codepen.io\/foxinfotech\/pen\/emJMzJr\">\n  sc-anim-3<\/a> by Vinish Kapoor (<a href=\"https:\/\/codepen.io\/foxinfotech\">@foxinfotech<\/a>)\n  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<\/span>\n<\/p>\n<script async src=\"https:\/\/public.codepenassets.com\/embed\/index.js\"><\/script>\n\n\n\n<p>Here, the animation combines multiple effects. The <code>transform: scale(0.5)<\/code> makes the box start at half its size, and <code>rotate(0deg)<\/code> begins with no rotation. As you scroll, it grows to full size (<code>scale(1)<\/code>) while rotating 360 degrees. I find combining transformations like this creates more interesting visual effects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When to Use Named Timelines vs Built-in Functions<\/h2>\n\n\n\n<p>You might wonder when to use the named timeline approach versus the simpler <code>scroll()<\/code> or <code>view()<\/code> functions. Here's my recommendation:<\/p>\n\n\n\n<p>Use named timelines (with <code>scroll-timeline-name<\/code>) when you need to animate based on a specific scrollable container's position, especially if multiple elements need to reference the same timeline. This gives you precise control.<\/p>\n\n\n\n<p>Use <code>scroll()<\/code> for simple page-wide effects like progress bars that track the entire document scroll.<\/p>\n\n\n\n<p>Use <code>view()<\/code> when you want elements to animate as they enter and exit the viewport, which is perfect for reveal animations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Browser Support Note<\/h2>\n\n\n\n<p>I must mention that scroll-linked animations in CSS are relatively new. As of now, they work in Chrome, Edge, and other Chromium-based browsers. Firefox and Safari are working on support. For production websites, you might want to check browser compatibility and consider fallbacks for unsupported browsers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>CSS Scroll-linked animations open up creative possibilities for modern web design. You can create engaging experiences without relying on JavaScript libraries. Start simple with fade-ins and grow from there. The examples I've shared should give you a solid foundation to experiment with your own scroll-based effects.<\/p>\n\n\n\n<p><strong>See also:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vinish.dev\/object-oriented-css-examples\">Object-Oriented CSS Examples<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vinish.dev\/bem-css-examples\">BEM CSS Examples<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever visited a website where elements smoothly fade in, slide across, or scale up as you scroll down the page? These scroll-linked animations used to require JavaScript libraries, but now you can create them with pure CSS using the @scroll-timeline rule and animation-timeline property. In this tutorial, I will show you how to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20323,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1821],"tags":[1822],"class_list":["post-20321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css","tag-ai-assisted"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building Scroll-Linked Animations in CSS &#8226; Vinish.Dev<\/title>\n<meta name=\"description\" content=\"Learn to create scroll-linked animations using CSS @scroll-timeline and animation-timeline. Pure CSS, Includes examples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vinish.dev\/css-scroll-linked-animation\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Scroll-Linked Animations in CSS &#8226; Vinish.Dev\" \/>\n<meta property=\"og:description\" content=\"Learn to create scroll-linked animations using CSS @scroll-timeline and animation-timeline. Pure CSS, Includes examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vinish.dev\/css-scroll-linked-animation\" \/>\n<meta property=\"og:site_name\" content=\"Vinish.Dev\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/foxinfotech2014\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-22T06:45:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-22T06:45:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vinish.dev\/wp-content\/uploads\/2025\/10\/scroll-progress-indicator-scroll-linked-animation.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"767\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Vinish Kapoor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/x.com\/vinish_kapoor\" \/>\n<meta name=\"twitter:site\" content=\"@foxinfotech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vinish Kapoor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation\"},\"author\":{\"name\":\"Vinish Kapoor\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/#\\\/schema\\\/person\\\/a7790479716d2a54131ca873f8483d3f\"},\"headline\":\"Building Scroll-Linked Animations in CSS\",\"datePublished\":\"2025-10-22T06:45:15+00:00\",\"dateModified\":\"2025-10-22T06:45:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation\"},\"wordCount\":959,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/#\\\/schema\\\/person\\\/df5e5ca816f6f4302efc03cf58dc97b4\"},\"image\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/scroll-progress-indicator-scroll-linked-animation.png\",\"keywords\":[\"AI-Assisted\"],\"articleSection\":[\"CSS\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation\",\"url\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation\",\"name\":\"Building Scroll-Linked Animations in CSS &#8226; Vinish.Dev\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/scroll-progress-indicator-scroll-linked-animation.png\",\"datePublished\":\"2025-10-22T06:45:15+00:00\",\"dateModified\":\"2025-10-22T06:45:16+00:00\",\"description\":\"Learn to create scroll-linked animations using CSS @scroll-timeline and animation-timeline. Pure CSS, Includes examples.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#primaryimage\",\"url\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/scroll-progress-indicator-scroll-linked-animation.png\",\"contentUrl\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/scroll-progress-indicator-scroll-linked-animation.png\",\"width\":1200,\"height\":767,\"caption\":\"Colorful gradient progress bar growing horizontally as user scrolls through white container, demonstrating CSS named scroll timeline.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/css-scroll-linked-animation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vinish.dev\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CSS\",\"item\":\"https:\\\/\\\/vinish.dev\\\/category\\\/css\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Building Scroll-Linked Animations in CSS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/#website\",\"url\":\"https:\\\/\\\/vinish.dev\\\/\",\"name\":\"Vinish.Dev\",\"description\":\"Vinish Kapoor&#039;s Blog: Best Oracle Blog for Developers\",\"publisher\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/#\\\/schema\\\/person\\\/df5e5ca816f6f4302efc03cf58dc97b4\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vinish.dev\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/vinish.dev\\\/#\\\/schema\\\/person\\\/df5e5ca816f6f4302efc03cf58dc97b4\",\"name\":\"Vinish Kapoor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/vinishprofile.png\",\"url\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/vinishprofile.png\",\"contentUrl\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/vinishprofile.png\",\"width\":192,\"height\":192,\"caption\":\"Vinish Kapoor\"},\"logo\":{\"@id\":\"https:\\\/\\\/vinish.dev\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/vinishprofile.png\"},\"description\":\"Vinish Kapoor is a seasoned software development professional and a fervent enthusiast of artificial intelligence (AI). His impressive career spans over 25+ years, marked by a relentless pursuit of innovation and excellence in the field of information technology. As an Oracle ACE, Vinish has distinguished himself as a leading expert in Oracle technologies, a title awarded to individuals who have demonstrated their deep commitment, leadership, and expertise in the Oracle community.\",\"sameAs\":[\"https:\\\/\\\/vinish.dev\\\/\",\"https:\\\/\\\/www.facebook.com\\\/foxinfotech2014\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/vinish-kapoor\\\/\",\"https:\\\/\\\/x.com\\\/foxinfotech\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vinish.dev\\\/#\\\/schema\\\/person\\\/a7790479716d2a54131ca873f8483d3f\",\"name\":\"Vinish Kapoor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a67232caa79b11f24f16c371866a96cfb575e011ebda6fa6e3d088a837a31bde?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a67232caa79b11f24f16c371866a96cfb575e011ebda6fa6e3d088a837a31bde?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a67232caa79b11f24f16c371866a96cfb575e011ebda6fa6e3d088a837a31bde?s=96&d=identicon&r=g\",\"caption\":\"Vinish Kapoor\"},\"description\":\"Vinish Kapoor is a seasoned software development professional and a fervent enthusiast of artificial intelligence (AI). His impressive career spans over 25+ years, marked by a relentless pursuit of innovation and excellence in the field of information technology. As an Oracle ACE, Vinish has distinguished himself as a leading expert in Oracle technologies, a title awarded to individuals who have demonstrated their deep commitment, leadership, and expertise in the Oracle community.\",\"sameAs\":[\"https:\\\/\\\/vinish.dev\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/vinish-kapoor\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/x.com\\\/vinish_kapoor\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Scroll-Linked Animations in CSS &#8226; Vinish.Dev","description":"Learn to create scroll-linked animations using CSS @scroll-timeline and animation-timeline. Pure CSS, Includes examples.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vinish.dev\/css-scroll-linked-animation","og_locale":"en_US","og_type":"article","og_title":"Building Scroll-Linked Animations in CSS &#8226; Vinish.Dev","og_description":"Learn to create scroll-linked animations using CSS @scroll-timeline and animation-timeline. Pure CSS, Includes examples.","og_url":"https:\/\/vinish.dev\/css-scroll-linked-animation","og_site_name":"Vinish.Dev","article_publisher":"https:\/\/www.facebook.com\/foxinfotech2014","article_published_time":"2025-10-22T06:45:15+00:00","article_modified_time":"2025-10-22T06:45:16+00:00","og_image":[{"width":1200,"height":767,"url":"https:\/\/vinish.dev\/wp-content\/uploads\/2025\/10\/scroll-progress-indicator-scroll-linked-animation.png","type":"image\/png"}],"author":"Vinish Kapoor","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/x.com\/vinish_kapoor","twitter_site":"@foxinfotech","twitter_misc":{"Written by":"Vinish Kapoor","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#article","isPartOf":{"@id":"https:\/\/vinish.dev\/css-scroll-linked-animation"},"author":{"name":"Vinish Kapoor","@id":"https:\/\/vinish.dev\/#\/schema\/person\/a7790479716d2a54131ca873f8483d3f"},"headline":"Building Scroll-Linked Animations in CSS","datePublished":"2025-10-22T06:45:15+00:00","dateModified":"2025-10-22T06:45:16+00:00","mainEntityOfPage":{"@id":"https:\/\/vinish.dev\/css-scroll-linked-animation"},"wordCount":959,"commentCount":0,"publisher":{"@id":"https:\/\/vinish.dev\/#\/schema\/person\/df5e5ca816f6f4302efc03cf58dc97b4"},"image":{"@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#primaryimage"},"thumbnailUrl":"https:\/\/vinish.dev\/wp-content\/uploads\/2025\/10\/scroll-progress-indicator-scroll-linked-animation.png","keywords":["AI-Assisted"],"articleSection":["CSS"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vinish.dev\/css-scroll-linked-animation#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vinish.dev\/css-scroll-linked-animation","url":"https:\/\/vinish.dev\/css-scroll-linked-animation","name":"Building Scroll-Linked Animations in CSS &#8226; Vinish.Dev","isPartOf":{"@id":"https:\/\/vinish.dev\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#primaryimage"},"image":{"@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#primaryimage"},"thumbnailUrl":"https:\/\/vinish.dev\/wp-content\/uploads\/2025\/10\/scroll-progress-indicator-scroll-linked-animation.png","datePublished":"2025-10-22T06:45:15+00:00","dateModified":"2025-10-22T06:45:16+00:00","description":"Learn to create scroll-linked animations using CSS @scroll-timeline and animation-timeline. Pure CSS, Includes examples.","breadcrumb":{"@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vinish.dev\/css-scroll-linked-animation"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#primaryimage","url":"https:\/\/vinish.dev\/wp-content\/uploads\/2025\/10\/scroll-progress-indicator-scroll-linked-animation.png","contentUrl":"https:\/\/vinish.dev\/wp-content\/uploads\/2025\/10\/scroll-progress-indicator-scroll-linked-animation.png","width":1200,"height":767,"caption":"Colorful gradient progress bar growing horizontally as user scrolls through white container, demonstrating CSS named scroll timeline."},{"@type":"BreadcrumbList","@id":"https:\/\/vinish.dev\/css-scroll-linked-animation#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vinish.dev\/"},{"@type":"ListItem","position":2,"name":"CSS","item":"https:\/\/vinish.dev\/category\/css"},{"@type":"ListItem","position":3,"name":"Building Scroll-Linked Animations in CSS"}]},{"@type":"WebSite","@id":"https:\/\/vinish.dev\/#website","url":"https:\/\/vinish.dev\/","name":"Vinish.Dev","description":"Vinish Kapoor&#039;s Blog: Best Oracle Blog for Developers","publisher":{"@id":"https:\/\/vinish.dev\/#\/schema\/person\/df5e5ca816f6f4302efc03cf58dc97b4"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vinish.dev\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/vinish.dev\/#\/schema\/person\/df5e5ca816f6f4302efc03cf58dc97b4","name":"Vinish Kapoor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vinish.dev\/wp-content\/uploads\/2023\/12\/vinishprofile.png","url":"https:\/\/vinish.dev\/wp-content\/uploads\/2023\/12\/vinishprofile.png","contentUrl":"https:\/\/vinish.dev\/wp-content\/uploads\/2023\/12\/vinishprofile.png","width":192,"height":192,"caption":"Vinish Kapoor"},"logo":{"@id":"https:\/\/vinish.dev\/wp-content\/uploads\/2023\/12\/vinishprofile.png"},"description":"Vinish Kapoor is a seasoned software development professional and a fervent enthusiast of artificial intelligence (AI). His impressive career spans over 25+ years, marked by a relentless pursuit of innovation and excellence in the field of information technology. As an Oracle ACE, Vinish has distinguished himself as a leading expert in Oracle technologies, a title awarded to individuals who have demonstrated their deep commitment, leadership, and expertise in the Oracle community.","sameAs":["https:\/\/vinish.dev\/","https:\/\/www.facebook.com\/foxinfotech2014","https:\/\/www.linkedin.com\/in\/vinish-kapoor\/","https:\/\/x.com\/foxinfotech"]},{"@type":"Person","@id":"https:\/\/vinish.dev\/#\/schema\/person\/a7790479716d2a54131ca873f8483d3f","name":"Vinish Kapoor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a67232caa79b11f24f16c371866a96cfb575e011ebda6fa6e3d088a837a31bde?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a67232caa79b11f24f16c371866a96cfb575e011ebda6fa6e3d088a837a31bde?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a67232caa79b11f24f16c371866a96cfb575e011ebda6fa6e3d088a837a31bde?s=96&d=identicon&r=g","caption":"Vinish Kapoor"},"description":"Vinish Kapoor is a seasoned software development professional and a fervent enthusiast of artificial intelligence (AI). His impressive career spans over 25+ years, marked by a relentless pursuit of innovation and excellence in the field of information technology. As an Oracle ACE, Vinish has distinguished himself as a leading expert in Oracle technologies, a title awarded to individuals who have demonstrated their deep commitment, leadership, and expertise in the Oracle community.","sameAs":["https:\/\/vinish.dev\/","https:\/\/www.linkedin.com\/in\/vinish-kapoor\/","https:\/\/x.com\/https:\/\/x.com\/vinish_kapoor"]}]}},"_links":{"self":[{"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/posts\/20321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/comments?post=20321"}],"version-history":[{"count":2,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/posts\/20321\/revisions"}],"predecessor-version":[{"id":20324,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/posts\/20321\/revisions\/20324"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/media\/20323"}],"wp:attachment":[{"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/media?parent=20321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/categories?post=20321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vinish.dev\/wp-json\/wp\/v2\/tags?post=20321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}