Reveal Footer
ComponentsReveal Footer
SectionsNew

Reveal Footer

End with an invitation. Page content scrolls away to uncover a generous contact footer, oversized wordmark, and useful links.

USE IT FORAgency contact sectionsPortfolio footersBrand websitesEditorial landing pages
React + CSS
Explore the full-width experienceOpen preview
Live component. Go ahead, interact.
01

Installation

Run this in your shadcn-configured React project. The component and stylesheet are added together.

TERMINAL
npx shadcn@latest add http://localhost:5173/r/reveal-footer.json

This command uses the current site address. For localhost, keep this preview running on the same computer. Files follow your configured components alias.

02

Usage

Import the component and make the details your own.

TypeScript
import { RevealFooter } from '@/components/anticraft/RevealFooter';

export function Example() {
  return (
    <RevealFooter
      title={'What’s next\nstarts here.'}
      brand="AFTERHOURS"
      contact={{ label: 'Start a conversation', href: 'mailto:hello@example.com' }}
      availability="Open for the right project"
      links={[
        { label: 'Our work', href: '/work' },
        { label: 'Our approach', href: '/about' },
      ]}
      note="Independent minds. Shared ambition. A small studio for brands going somewhere."
      legal="AFTERHOURS © 2026"
    >
      <section style={{ minHeight: 720, padding: '64px 32px', color: '#30282d' }}>
        <p>SELECTED WORK / 2026</p>
        <h2 style={{ maxWidth: '12ch', fontSize: 'clamp(44px, 8vw, 100px)', fontWeight: 400, lineHeight: 1 }}>A different point of view.</h2>
        <p>Place the page content that precedes your footer here.</p>
      </section>
    </RevealFooter>
  );
}
03

Props

PropTypeDefaultDescription
titlestringRequiredThe contact section heading. A newline preserves an intentional line break; longer text wraps naturally.
brandstringRequiredA large text wordmark at the foot of the composition. Short studio or product names work best. It wraps rather than painting outside the component.
contactRevealFooterLinkRequiredThe main ordinary link: {label,href}. Use your real email, contact page, or booking destination. The demo uses a sample mailto address; it does not submit a form or book an appointment.
childrenReactNodeundefinedThe page content immediately before the footer. Its wrapper has an opaque --ac-footer-content background and sits above the sticky panel, so native scrolling uncovers the footer. Without preceding content the footer stays in normal flow. Keep all content in this component’s natural document order.
availabilitystringundefinedAn optional availability line with a small decorative status dot. The text conveys the status independently of color.
linksRevealFooterLink[][]Secondary native links with {label,href}. Every link stays in the document and supports keyboard activation. The demo links return to real project and approach anchors in the preceding content.
note / legalstringundefinedOptional studio introduction and small copyright or attribution line. Long content increases the natural footer height; the component automatically falls back to ordinary scrolling if it no longer fits.
revealbooleantrueEnable native scroll uncover when the panel fits the nearest scrollable ancestor or window with 24px spare. Containers 600px wide or narrower, reduced-motion preferences, and short scrollports use a static footer. Set false for a normal footer at every size.
classNamestring''Additional classes. Theme --ac-footer-surface, --ac-footer-ink, --ac-footer-muted, --ac-footer-line, --ac-footer-accent, and --ac-footer-content. The reveal uses a bottom-sticky panel inside this wrapper. Avoid an additional overflow ancestor between the component and your intended scrollport, and avoid transforms that change normal sticky positioning.
04

Motion & accessibility

Considered by default.

Native scrolling moves the preceding opaque content over a bottom-sticky footer; there is no scroll capture, global fixed layer, animation loop, or document-style mutation. A ResizeObserver rechecks the panel and nearest scrollport after sizing or content changes. The effect is enabled only when the complete footer fits with 24px spare and the component is wider than 600px. Reduced motion and short windows use the same complete composition in normal flow. Focusing any footer link immediately removes the overlap and scrolls that target into view, so keyboard users never have to activate an obscured control. All links are real native anchors. The demo uses original travel art direction, existing Anticraft coastal imagery, and a fictional studio.

Use semantic content and meaningful labels in your composition. Check contrast and keyboard behavior with your own styles and content.

05

Inspiration

The generous invitation and large brand signature are a starting point. Anticraft adds its own original composition, native scroll uncover, nearest-scrollport measurement, and a normal-flow keyboard fallback.

Visit Aceternity — Footer with Big Text

The component source and demo artwork are original to Anticraft UI. The linked site is the design or content reference.