https://framer.com/m/Radiusonscrol-9T6vkh.js

Io / Enhancements / RadiusOnScroll

RadiusOnScroll

RadiusOnScroll ties a media block’s corner radius and padding to the scroll position, so a picture rounds off or opens out as the section travels through the viewport.

Enhancements21 controlsscroll-boundimage or video

Examples

Live specimens for every control the component exposes.

Default

An image goes from square and flush at the start of the scroll window to rounded and inset at the end. Radius and padding animate together.

mountain ridge
mountain ridge
mountain ridge

Radius

startRadius and endRadius are the two ends of the corner animation. Put the larger value first to round off on entry instead of on exit.

end radius 0

mountain ridge
mountain ridge
mountain ridge

end radius 48

desert dunes
desert dunes
desert dunes

start 64 → end 0

forest canopy
forest canopy
forest canopy

Padding

startPadding and endPadding inset the media inside its own box, which reads as the picture pulling away from a full-bleed edge.

no padding

desert dunes
desert dunes
desert dunes

end padding 40

forest canopy
forest canopy
forest canopy

start padding 40

mountain ridge
mountain ridge
mountain ridge

Scroll window

Start and End pick the viewport moments the animation runs between. transformDistance stretches or compresses that window.

enter-bottom → exit-center

mountain ridge
mountain ridge
mountain ridge

enter-center → exit-top

desert dunes
desert dunes
desert dunes

transform distance 50%

forest canopy
forest canopy
forest canopy

Props

The controls exposed on the instance panel.

PropTypeBehaviour
mediaTypeenumimage · video · instant. Picks what the block renders.
sizingenumfit keeps the media’s own ratio; fixed fills the frame you draw.
imageFileimageThe still shown when mediaType is image.
videoSourceenumurl or upload, for video mode.
videoUrlstringAddress of the video file when videoSource is url.
videoFilefileUploaded mp4, mov or webm when videoSource is upload.
instantComponentcomponentA component instance to animate instead of media.
playingbooleanWhether the video plays.
posterimageStill shown before the video starts.
startTimenumberWhere the video begins, as a percentage of its length.
loopbooleanRepeats the video when it ends.
showControlsbooleanShows the browser’s own video controls.
mutedbooleanMutes the video. Required for autoplay in most browsers.
startRadiusnumberCorner radius at the start of the scroll window, in pixels.
endRadiusnumberCorner radius at the end of the scroll window, in pixels.
startPaddingnumberInset around the media at the start, in pixels.
endPaddingnumberInset around the media at the end, in pixels.
StartenumViewport moment the animation begins: enter-top · enter-center · enter-bottom · exit-top · exit-center · exit-bottom.
EndenumViewport moment the animation finishes, from the same six options.
offsetnumberShifts the whole scroll window up or down, in pixels.
transformDistancenumberStretches or compresses the window, as a percentage.
PropTypeBehaviour
mediaTypeenumimage · video · instant. Picks what the block renders.
sizingenumfit keeps the media’s own ratio; fixed fills the frame you draw.
imageFileimageThe still shown when mediaType is image.
videoSourceenumurl or upload, for video mode.
videoUrlstringAddress of the video file when videoSource is url.
videoFilefileUploaded mp4, mov or webm when videoSource is upload.
instantComponentcomponentA component instance to animate instead of media.
playingbooleanWhether the video plays.
posterimageStill shown before the video starts.
startTimenumberWhere the video begins, as a percentage of its length.
loopbooleanRepeats the video when it ends.
showControlsbooleanShows the browser’s own video controls.
mutedbooleanMutes the video. Required for autoplay in most browsers.
startRadiusnumberCorner radius at the start of the scroll window, in pixels.
endRadiusnumberCorner radius at the end of the scroll window, in pixels.
startPaddingnumberInset around the media at the start, in pixels.
endPaddingnumberInset around the media at the end, in pixels.
StartenumViewport moment the animation begins: enter-top · enter-center · enter-bottom · exit-top · exit-center · exit-bottom.
EndenumViewport moment the animation finishes, from the same six options.
offsetnumberShifts the whole scroll window up or down, in pixels.
transformDistancenumberStretches or compresses the window, as a percentage.

Usage

Guidance carried over from the component definition.

Reach for RadiusOnScroll

A hero image should open from a rounded card into full bleed as the reader scrolls.

The shape change must track scroll position, not fire once on entry.

The same treatment has to cover video as well as stills.

Radius and inset should move together as one gesture.

Reach for something else

You only need a fixed radius — set it on the frame instead.

The picture should drift rather than change shape — use ImageParallax.

The effect should replay on hover or tap — this is scroll-bound only.

Io — Enhancements

Every specimen above is a live component instance. Colour, type and radius resolve from the project theme tokens.

io

An experiment in what a design system becomes when AI can consume it.

© 2026 io

Contact me

Create a free website with Framer, the website builder loved by startups, designers and agencies.