React + MotionEingabefelder

Toggle im iOS-Stil

Ein kompakter Schalter wie in den iPhone-Einstellungen, grün im aktiven Zustand, mit natürlicher Feder.

Einstellungen

Code

import { useState } from "react";
import { motion } from "framer-motion";

const spring = { type: "spring" as const, stiffness: 300, damping: 30 };

interface IosToggleProps {
  color?: string;
  checked?: boolean;
  defaultChecked?: boolean;
  onCheckedChange?: (checked: boolean) => void;
  label?: string;
}

export default function IosToggle({
  color = "#34c759",
  checked,
  defaultChecked = true,
  onCheckedChange,
  label = "Aktivieren",
}: IosToggleProps) {
  const [internal, setInternal] = useState(defaultChecked);
  const on = checked ?? internal;

  const toggle = () => {
    if (checked === undefined) setInternal(!on);
    onCheckedChange?.(!on);
  };

  return (
    <button
      type="button"
      role="switch"
      aria-checked={on}
      aria-label={label}
      onClick={toggle}
      className={`flex h-8 w-14 items-center rounded-full p-1 transition-colors ${
        on ? "" : "bg-black/5 dark:bg-white/10"
      }`}
      style={on ? { backgroundColor: color } : undefined}
    >
      <motion.span
        className="h-6 w-6 rounded-full bg-white shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
        animate={{ x: on ? 24 : 0 }}
        transition={spring}
      />
    </button>
  );
}

Prompt für KI

Füg ihn in ChatGPT, Claude oder Cursor ein und der Baustein wird mit diesen Einstellungen an dein Projekt angepasst, auch ohne React.

Mehr aus Eingabefelder

Wofür du ihn nutzen kannst

Die meisten haben so einen Schalter tausendfach auf dem Handy umgelegt und wissen ohne Lesen, was er tut. Er passt zu Einstellungsseiten und Präferenzen: „Angemeldet bleiben“ beim Login, „Newsletter“ im Kundenkonto oder „Automatisch verlängern“ in einer Abo-App. Ein iOS-Toggle in React, den Screenreader als echten Schalter erkennen.

Grün heißt für iPhone-Nutzer „an“. Nimm trotzdem deine Markenfarbe, wenn Grün auf deiner Seite schon etwas anderes bedeutet, etwa Lagerbestand. Gib ihm immer ein klares Label, denn der Schalter allein sagt nicht, was er steuert.