LeistungenÜber unsPortfolioBlogPricingProjekt starten
Apple-Style Website Animation in Next.js: Der vollständige technische Guide 2026
Blog
technical/how-to
21. Mai 202610 Min. LesezeitFame4You Engineering

Apple-Style Website Animation in Next.js: Der vollständige technische Guide 2026

Wie man Apple-ähnliche Scroll-Animationen in Next.js baut: Framer Motion, CSS Scroll-Driven Animations, GSAP ScrollTrigger — vollständiger Code-Guide 2026.

Teilen

Apple-Style Website Animation in Next.js: Der vollständige technische Guide 2026

Apple hat den Standard gesetzt. Linear hat ihn für Produkt-Tools adaptiert. Jetzt bauen wir ihn nach — vollständig, in Next.js, mit Code.

Dieser Guide ist für Entwickler, die wissen, was sie tun, und für Entscheider, die verstehen wollen, warum professionelle Web-Animationen kein Luxus sind.


Was "Apple-Style" technisch bedeutet

Bevor wir Code schreiben, müssen wir verstehen, was Apple tatsächlich macht:

  1. Scroll-linked animations: Elemente bewegen sich proportional zur Scroll-Position, nicht zeit-basiert
  2. Parallax depth: Unterschiedliche Ebenen bewegen sich mit unterschiedlicher Geschwindigkeit
  3. Staggered entrance: Elemente treten zeitversetzt ein — nie alle gleichzeitig
  4. Physics-based easing: Animationen haben "Gewicht" — sie overshoot leicht und federn zurück
  5. Performance-first: 60fps, keine Layout-Thrashing, nur transform und opacity animiert

Das Ziel ist nicht "viele Animationen". Das Ziel ist, dass die Seite atmet.


Setup: Next.js 15/16 + Framer Motion

npx create-next-app@latest my-premium-site --typescript --tailwind --app
cd my-premium-site
npm install framer-motion

Wichtig: In Next.js mit App Router müssen Framer Motion Komponenten in Client Components ('use client') verwendet werden.


Technik 1: Scroll-linked Fade + Slide (Framer Motion)

Der klassische Apple-Effekt: Elemente gleiten von unten in den Viewport, wenn man daran vorbeiscrollt.

// components/ScrollReveal.tsx
'use client'

import { motion } from 'framer-motion'
import { useInView } from 'framer-motion'
import { useRef } from 'react'

interface ScrollRevealProps {
  children: React.ReactNode
  delay?: number
  direction?: 'up' | 'left' | 'right'
}

export function ScrollReveal({ 
  children, 
  delay = 0,
  direction = 'up' 
}: ScrollRevealProps) {
  const ref = useRef(null)
  const isInView = useInView(ref, { once: true, margin: '-100px' })

  const variants = {
    hidden: {
      opacity: 0,
      y: direction === 'up' ? 40 : 0,
      x: direction === 'left' ? -40 : direction === 'right' ? 40 : 0,
    },
    visible: {
      opacity: 1,
      y: 0,
      x: 0,
      transition: {
        duration: 0.7,
        delay,
        ease: [0.25, 0.46, 0.45, 0.94], // Apple's easing curve
      },
    },
  }

  return (
    <motion.div
      ref={ref}
      variants={variants}
      initial="hidden"
      animate={isInView ? 'visible' : 'hidden'}
    >
      {children}
    </motion.div>
  )
}

Verwendung:

<ScrollReveal delay={0.2}>
  <h2>Wir bauen Digital Empires.</h2>
</ScrollReveal>
<ScrollReveal delay={0.4}>
  <p>Für B2B-Marktführer mit Ambitionen.</p>
</ScrollReveal>

Der delay-Parameter ist der Schlüssel für Staggered Entrance: Headline kommt zuerst, dann Untertext, dann CTA.


Technik 2: Parallax Scroll mit useScroll + useTransform

// components/ParallaxSection.tsx
'use client'

import { useRef } from 'react'
import { motion, useScroll, useTransform } from 'framer-motion'

export function ParallaxSection({ imageUrl }: { imageUrl: string }) {
  const ref = useRef(null)
  const { scrollYProgress } = useScroll({
    target: ref,
    offset: ['start end', 'end start'],
  })

  // Hintergrund bewegt sich langsamer als der Inhalt
  const y = useTransform(scrollYProgress, [0, 1], ['-20%', '20%'])

  return (
    <div ref={ref} className="relative h-[60vh] overflow-hidden">
      <motion.div
        style={{ y }}
        className="absolute inset-0 scale-110"
      >
        <img
          src={imageUrl}
          alt="Parallax background"
          className="h-full w-full object-cover"
        />
      </motion.div>
      <div className="relative z-10 flex h-full items-center justify-center">
        <h2 className="text-5xl font-bold text-white">
          Ihr Marktauftritt. Neu definiert.
        </h2>
      </div>
    </div>
  )
}

useTransform ist das Herzstück: Es mappt den Scroll-Fortschritt (0–1) auf einen Ausgabewert. Das Bild verschiebt sich um 40% der Sektionshöhe — das erzeugt die Tiefenwirkung.


Technik 3: Hexagon Orbit Animation (Fame4You Signatur)

Das spezifischste Element der Fame4You Visual Language: Ein zentrales Hexagon, um das Satelliten-Hexagone orbiten, während Connector-Lines sich aufzeichnen.

// components/HexagonOrbit.tsx
'use client'

import { motion } from 'framer-motion'

const SATELLITES = [
  { angle: 0, label: 'Strategy', delay: 0.3 },
  { angle: 60, label: 'Design', delay: 0.5 },
  { angle: 120, label: 'Development', delay: 0.7 },
  { angle: 180, label: 'SEO', delay: 0.9 },
  { angle: 240, label: 'Motion', delay: 1.1 },
  { angle: 300, label: 'Launch', delay: 1.3 },
]

function polarToCartesian(angle: number, radius: number) {
  const rad = ((angle - 90) * Math.PI) / 180
  return {
    x: Math.cos(rad) * radius,
    y: Math.sin(rad) * radius,
  }
}

export function HexagonOrbit() {
  return (
    <div className="relative flex h-[500px] w-[500px] items-center justify-center">
      {/* Zentrales Hexagon */}
      <motion.div
        initial={{ scale: 0, opacity: 0 }}
        animate={{ scale: 1, opacity: 1 }}
        transition={{ duration: 0.6, ease: [0.34, 1.56, 0.64, 1] }}
        className="absolute z-10 flex h-24 w-24 items-center justify-center"
        style={{ clipPath: 'polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)' }}
      >
        <div className="h-full w-full bg-[#D4AF37]" />
      </motion.div>

      {/* Connector Lines + Satelliten */}
      {SATELLITES.map(({ angle, label, delay }) => {
        const pos = polarToCartesian(angle, 160)
        return (
          <motion.div
            key={label}
            initial={{ opacity: 0, scale: 0 }}
            animate={{ opacity: 1, scale: 1 }}
            transition={{ delay, duration: 0.4, ease: 'backOut' }}
            style={{ position: 'absolute', left: `calc(50% + ${pos.x}px)`, top: `calc(50% + ${pos.y}px)`, transform: 'translate(-50%, -50%)' }}
            className="flex flex-col items-center gap-1"
          >
            <div
              className="flex h-12 w-12 items-center justify-center border border-[#D4AF37]/40 bg-black/80 text-xs text-[#D4AF37]"
              style={{ clipPath: 'polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)' }}
            >
              ⬡
            </div>
            <span className="text-xs text-white/60">{label}</span>
          </motion.div>
        )
      })}
    </div>
  )
}

Technik 4: Mouse-Tracking Spotlight Cards

// components/SpotlightCard.tsx
'use client'

import { useRef, MouseEvent } from 'react'

export function SpotlightCard({ title, description }: { title: string; description: string }) {
  const cardRef = useRef<HTMLDivElement>(null)

  const handleMouseMove = (e: MouseEvent<HTMLDivElement>) => {
    const card = cardRef.current
    if (!card) return
    const rect = card.getBoundingClientRect()
    const x = e.clientX - rect.left
    const y = e.clientY - rect.top
    card.style.setProperty('--mouse-x', `${x}px`)
    card.style.setProperty('--mouse-y', `${y}px`)
  }

  return (
    <div
      ref={cardRef}
      onMouseMove={handleMouseMove}
      className="spotlight-card relative overflow-hidden rounded-lg border border-white/10 bg-black p-6"
      style={{
        background: `radial-gradient(600px circle at var(--mouse-x, 50%) var(--mouse-y, 50%), rgba(212, 175, 55, 0.08), transparent 40%)`,
      }}
    >
      <h3 className="text-xl font-semibold text-white">{title}</h3>
      <p className="mt-2 text-white/60">{description}</p>
    </div>
  )
}

Der radiale Gradient folgt der Maus und erzeugt einen Spotlight-Effekt — direkt aus dem Linear.app Playbook.


Technik 5: CSS Scroll-Driven Animations (kein JavaScript)

Browser-nativ, 2026 fully supported:

/* globals.css */
@keyframes fade-in-up {
  from {
    opacity: 0;
    transform: translateY(40px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.scroll-reveal {
  animation: fade-in-up linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 40%;
}
// Verwendung — kein Client Component nötig!
<h2 className="scroll-reveal">
  Keine JavaScript-Abhängigkeit. Reines CSS. 60fps garantiert.
</h2>

Das ist die performanteste Option. Kein Hydration-Overhead, kein JavaScript-Bundle-Gewicht.


Performance Best Practices

Animationen, die nicht animiert werden sollten:

  • width, height, margin, padding — triggert Layout-Recalculation
  • background-color direkt (besser: opacity auf einem Pseudo-Element)
  • box-shadow (teuer — besser: filter: drop-shadow oder opacity Trick)

Animationen, die immer safe sind:

  • transform: translateX/Y/Z
  • transform: scale/rotate
  • opacity

Diese nutzen die GPU-Compositing-Layer und blockieren nie den Main Thread.


Accessibility: prefers-reduced-motion

Pflicht. Nicht optional.

// hooks/useReducedMotion.ts
import { useReducedMotion } from 'framer-motion'

// Framer Motion hat das built-in:
// Setze reduceMotion: 'user' in motion.config
// Oder manuell:
const prefersReduced = useReducedMotion()
const variants = prefersReduced ? staticVariants : animatedVariants

Oder via CSS:

@media (prefers-reduced-motion: reduce) {
  .scroll-reveal {
    animation: none;
    opacity: 1;
    transform: none;
  }
}

Das fertige Bild: Was möglich ist

Kombiniert man diese Techniken, entsteht eine Seite, die:

  • Beim ersten Scroll ein Video-Hero mit Text-Emergence zeigt
  • Beim weiteren Scrollen Hexagone in einem Orbit-System aufbaut
  • Features mit Mouse-Tracking Spotlight-Karten präsentiert
  • Statistiken mit animierten Zählern unterstützt
  • Auf jedem Gerät — von iPhone SE bis 4K-Monitor — flüssig läuft

Das ist kein Showcase-Projekt. Das sind produktionsreife Techniken, die Fame4You in jedem Kundenprojekt einsetzt. Mehr erfahren.


Fazit

Apple-Style Animationen sind keine Magie. Sie sind eine Kombination aus durchdachtem Timing, modernen Browser-APIs und dem Verständnis, dass jede Bewegung einen Zweck haben muss.

Next.js + Framer Motion ist der State-of-the-Art Stack für 2026. CSS Scroll-Driven Animations ergänzen ihn mit nativer Performance.

Wer das verstanden hat, baut keine Websites mehr. Er baut Erlebnisse.


Weiterführend: Cinematic Website Design für Mittelständler · AI Hero Videos: Kie.ai vs. Sora vs. Runway · Fame4You Services


Bereit für dein Digital Empire?

Nur 3 Projekte pro Quartal — sichere deinen Slot.

Kontakt aufnehmen