Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For ordinary in-page links, set scroll-behavior: smooth on the element that scrolls. Use JavaScript’s scrollIntoView() when a button or dynamic control needs to select a target or alignment. Use jQuery’s animate() when the project already uses jQuery and you need to set a duration or easing.

Use CSS for smooth scrolling on anchor links

Keep navigation as a regular link with a matching target ID. Then set the scrolling behavior on the scrolling box. For page-level scrolling, the root element is the usual choice:

<a href="#features">Features</a>

<section id="features">
  <h2>Features</h2>
  <p>The section content goes here.</p>
</section>
html {
  scroll-behavior: smooth;
}

/* Keep anchor targets visible below a fixed header. */
section[id] {
  scroll-margin-top: 5rem;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
}

The scroll-margin-top value is an example; adjust it to match the fixed header in your layout. MDN describes scroll-behavior as controlling scrolling triggered by navigation or CSSOM scrolling APIs. Put the property on the box that actually scrolls: for a page, that is commonly the root element; for a panel with its own overflow, use that panel instead. The browser controls the smooth animation’s timing and easing, so CSS does not promise a fixed duration or identical motion across browsers. The property is not animatable. MDN marks it “Baseline Widely available” and says it has been available across browsers since March 2022; check your project’s browser requirements if legacy support matters. MDN: scroll-behavior.

Use JavaScript to choose a target or alignment

For a button or other interaction that should scroll to a known element, call scrollIntoView() rather than writing an animation loop:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
<button type="button" id="show-features">Show features</button>

<section id="features">
  <h2>Features</h2>
</section>
const button = document.querySelector("#show-features");
const target = document.querySelector("#features");
const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)");

button?.addEventListener("click", () => {
  target?.scrollIntoView({
    behavior: reduceMotion.matches ? "instant" : "smooth",
    block: "start"
  });
});

scrollIntoView() accepts smooth, instant, or auto for behavior; auto follows the computed scroll-behavior. Its block alignment can be start, center, end, or nearest. Use scroll-margin-top on the target to account for a fixed header instead of adding header-height arithmetic to each call. MDN: Element.scrollIntoView().

For a known coordinate rather than an element, use scroll() or scrollTo() on the object that scrolls. For a nested panel, call the method on that panel, not on window. The same choice of scrolling box applies to both CSS and JavaScript.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Use jQuery when you need its duration and easing

If the project already includes jQuery, .animate() can animate a scroll position. This page-level example moves to the features section:

$("html, body").animate({
  scrollTop: $("#features").offset().top
}, 500);

The duration is in milliseconds. jQuery documents a default duration of 400 ms and a default easing of swing; its built-in easing options are swing and linear. Additional easing requires a plugin. Here the duration is explicitly set to 500 ms; that is an example, not a universal timing recommendation. jQuery .animate().

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.

For a panel with its own scroll bar, animate that panel’s scrollTop instead of assuming html, body is the target:

const $panel = $(".scroll-panel");
const targetTop = $panel.scrollTop() + $("#panel-target").position().top;

$panel.animate({ scrollTop: targetTop }, 500);

This calculation assumes #panel-target is inside .scroll-panel and uses its position relative to that panel. Check the actual DOM and positioning in your layout. jQuery’s .scrollTop() reads or sets an element’s vertical scroll position; an element that is not scrollable reports zero. jQuery .scrollTop().

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

Choose the method that matches the interaction

Method Best fit Control Dependency and container
CSS scroll-behavior Ordinary fragment links and CSSOM scrolling Browser-defined smooth timing and easing Native CSS; set it on the scrolling box
JavaScript scrollIntoView() Dynamic controls that select an element Choose smoothness and block alignment Native browser API; call it on the target element
jQuery .animate() Projects already using jQuery that need explicit duration or easing Set duration and built-in easing Requires jQuery; animate the actual scrolling element

For anchor navigation, CSS keeps the link semantic and functional without JavaScript. JavaScript adds target and alignment control without a dependency. jQuery is useful when it is already part of the project and its timing model is needed; adding it solely for a basic anchor effect introduces an unnecessary dependency.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Support reduced motion and keyboard-friendly navigation

The prefers-reduced-motion media query lets CSS respond to a visitor’s operating-system animation preference. The CSS example above switches smooth behavior off when reduced motion is requested. For JavaScript, check matchMedia("(prefers-reduced-motion: reduce)") and choose instant rather than smooth scrolling, as in the example. MDN: prefers-reduced-motion.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

Prefer real links such as <a href="#features"> for navigation where possible. They preserve expected fragment behavior, work without JavaScript, and support keyboard use. Use buttons for actions that are not navigation, such as a control that programmatically reveals or scrolls to content.

Troubleshoot scrolling that does not behave as expected

  • The page jumps instead of scrolling: confirm scroll-behavior: smooth is applied to the page’s scrolling box and that the link’s fragment matches an element ID. A reduced-motion setting intentionally switches the CSS example to automatic behavior.
  • The target lands behind a fixed header: give the target an appropriate scroll-margin-top. Tune the example’s 5rem value to the real header and layout.
  • A nested panel does not move: target the panel that has overflow and its scroll position. Setting smooth behavior on html or animating html, body will not substitute for scrolling a separate panel.
  • scrollIntoView() does nothing: verify the selector matches an element when the event runs. The optional chaining in the example prevents an exception for a missing element, but it cannot scroll to one.
  • jQuery returns a zero scroll position: check that the selected element is actually scrollable and that the selector points to the intended panel. jQuery documents zero for elements that are not scrollable.
  • Motion differs across browsers: CSS smooth timing and easing are user-agent-defined. If your design requires a configured duration, use an approach with explicit timing and validate it against the browsers and devices your project supports.

Or skip the browser setup

If what you need is a screenshot of a page rather than animated scrolling within your own interface, ScreenshotNeo provides a website screenshot API and MCP server. Its one-call cURL example is:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo documentation for request options. It accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in headers. Its MCP server offers take_screenshot, get_page_info, and capture_pdf to AI agents. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Sign up free for ScreenshotNeo.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.