macOS doesn’t have a built-in scrolling screenshot: ⌘⇧3, ⌘⇧4 and the ⌘⇧5 Screenshot toolbar only capture what’s visible on screen. For a web page, your browser can do it instead. In Firefox, right-click the page, choose Take Screenshot, then Save full page. In Chrome, open DevTools, press ⌘⇧P and run Capture full size screenshot. In Safari, File → Export as PDF saves the whole page as a PDF. For anything that isn’t a web page (a Slack thread, a long settings pane, a document, a chat panel inside a web app), use a screenshot app with scrolling capture, such as hypershot: press ⌘⇧J, drag over the part that scrolls, scroll through it, and click Done.
The built-in way
There isn’t one in macOS itself, so the honest built-in answer is your browser. All three are free, already installed, and good at what they do: rendering a full web page they already understand.
Firefox
- Right-click an empty part of the page and choose Take Screenshot (or press ⌘⇧S).
- Click Save full page in the top-right corner.
- Download it as a PNG, or copy it.
Chrome (and most Chromium browsers)
- Open Developer Tools: View → Developer → Developer Tools, or ⌥⌘I.
- Press ⌘⇧P to open the Command Menu and type
screenshot. - Choose Capture full size screenshot, not the plain Capture screenshot, which only grabs what’s visible. Chrome saves a PNG like any other download.
Safari
- Choose File → Export as PDF.
- Name it and save.
The result is a PDF, not an image. That’s a feature if you want selectable text, and a detour if you wanted a PNG to paste somewhere.
The limits. These capture the web document, not what you see. A panel that scrolls on its own inside a page (the message list in a web chat app, a code viewer, a sidebar) usually won’t come out whole, because the page around it doesn’t scroll. Sticky headers and lazy-loaded images can turn out oddly. And none of them help outside the browser: a long Notes document, a Finder list, Xcode’s issue navigator, a native Slack or Discord thread.
With hypershot
hypershot’s scrolling capture works on the screen, not inside a browser, so whatever scrolls in any app can be captured.
- Press ⌘⇧J, or choose Scrolling Capture from the menu bar menu.
- Drag a box around the part that scrolls, and only that part.
- Scroll the content yourself, at a steady pace.
- Click Done (or Cancel to throw it away).
You get one tall image of everything that passed through the box, in order.
What it does that the browser options can’t:
- Any app. Slack, Mail, Notes, a terminal, a spreadsheet, a PDF in Preview. If it scrolls on screen, it can be stitched.
- One panel, not the whole page. Select only the conversation column of a web app, and the sidebar and header stay out.
- You watch it build. A live preview of the stitched image sits in the overlay, and a status light tells you when to slow down, when you’ve scrolled back up, and when you’ve reached the end.
- It’s a capture like any other. It opens in the editor, so you can redact the names in a thread or add arrows before you send it, and it’s already saved as an editable
.hypercapture.
The honest limits: you do the scrolling (steady beats fast), it works best scrolling vertically in one direction, and the tallest image is bounded by your GPU’s maximum texture size. Leave sticky headers out of the box; hypershot warns you with Fixed content detected if you don’t. The full walkthrough of the status light is in Capturing a page that refuses to fit on a screen.
Which to use
- A whole public web page, and you’re already in Firefox or Chrome: the browser’s full-page option is quick and perfectly good.
- You want a PDF with real text in it: Safari’s Export as PDF.
- Anything outside a browser, one panel of a web app, or something you need to mark up before sending: hypershot’s scrolling capture.
Does ⌘⇧5 have a scrolling option?
No. The Screenshot toolbar offers the entire screen, a window, or a selected portion (plus screen recording), all limited to what’s on screen at that moment. Scrolling capture needs a browser or a third-party app.
What does “Fixed content detected” mean?
Something in your selection doesn’t move when you scroll, usually a sticky header or nav bar, and that breaks the stitch. Start again and select only the content that moves.