Back

Reibungslose Karussells mit reinem CSS erstellen

Reibungslose Karussells mit reinem CSS erstellen

Jahrelang bedeutete das Erstellen von Karussells, auf JavaScript-Bibliotheken wie Swiper oder Glide zurückzugreifen. Jede fügte Kilobytes zu Ihrem Bundle hinzu, führte Abhängigkeiten ein und erforderte eine sorgfältige Verwaltung von Event-Listenern und State. Doch modernes CSS hat sich still und leise weiterentwickelt, um Karussells nativ zu handhaben – ganz ohne JavaScript.

Dieser Artikel untersucht, wie man performante, barrierefreie CSS-Karussells mit scroll-snap, experimentellen Pseudo-Elementen und anderen reinen CSS-Techniken erstellt, die heute funktionieren und noch Jahre lang relevant bleiben werden.

Wichtigste Erkenntnisse

  • Scroll-snap-Eigenschaften verwandeln jeden scrollbaren Container in ein reibungsloses Karussell-Erlebnis
  • Experimentelle Pseudo-Elemente in Chrome 135+ ermöglichen native Navigationssteuerelemente ohne JavaScript
  • Reine CSS-Karussells verbessern die Performance, indem sie JavaScript-Parsing und Event-Listener eliminieren
  • Fallback-Strategien gewährleisten Kompatibilität und bereiten gleichzeitig auf zukünftige Browser-Features vor

Die Grundlage: Scroll Snap CSS

Der Grundpfeiler jedes reinen CSS-Karussells ist die scroll-snap-Eigenschaft. Sie verwandelt einen scrollbaren Container mit nur wenigen Zeilen in ein paginiertes Erlebnis:

.carousel {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
}

.carousel-item {
  flex: 0 0 100%;
  scroll-snap-align: center;
}

Dies erstellt ein horizontales Karussell, bei dem jedes Element einrastet. Das Schlüsselwort mandatory stellt sicher, dass Benutzer immer auf einer vollständigen Folie landen, während scroll-behavior: smooth fließende Übergänge zwischen den Elementen hinzufügt.

Scroll Snap CSS funktioniert in allen modernen Browsern und ist damit die zuverlässigste Grundlage für JavaScript-freie Karussells. Für responsive Designs kombinieren Sie es mit CSS Grid oder passen Sie die flex-basis an, um mehrere Elemente pro Ansicht anzuzeigen:

.carousel-item {
  flex: 0 0 calc(33.333% - 1rem);
  margin: 0 0.5rem;
}

Moderne Navigation: Experimentelle Pseudo-Elemente

Chrome 135+ führt experimentelle Pseudo-Elemente ein, die automatisch Karussell-Steuerelemente generieren. Diese Features erfordern die Aktivierung experimenteller Webplattform-Features in den Chrome-Flags.

Das Pseudo-Element ::scroll-button erstellt Zurück-/Weiter-Schaltflächen ohne zusätzliches Markup:

.carousel::scroll-button(inline-start),
.carousel::scroll-button(inline-end) {
  background: rgba(0, 0, 0, 0.5);
  color: white;
  padding: 1rem;
  border: none;
}

.carousel::scroll-button(inline-start)::before {
  content: "←";
}

.carousel::scroll-button(inline-end)::before {
  content: "→";
}

Ähnlich generiert ::scroll-marker Paginierungspunkte für jeden scrollbaren Abschnitt:

.carousel {
  scroll-marker-group: after;
}

.carousel-item::scroll-marker {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #ccc;
}

.carousel-item::scroll-marker:target-current {
  background: #333;
}

Beachten Sie, dass diese Pseudo-Elemente experimentell sind und sich ihre Syntax ändern kann. Die Pseudo-Klasse :target-current hebt den aktiven Marker hervor, während Benutzer scrollen. Diese Features reduzieren JavaScript-Anforderungen und bieten gleichzeitig native Barrierefreiheits-Unterstützung.

Fallback-Strategie für den Produktiveinsatz

Da scroll-button und scroll-marker nur begrenzte Browser-Unterstützung haben, verwenden Sie Feature Detection mit @supports:

/* Fallback-Navigation */
.carousel-nav {
  display: flex;
  gap: 0.5rem;
}

/* Fallback ausblenden, wenn native Steuerelemente unterstützt werden */
@supports (scroll-button-inline: both) {
  .carousel-nav {
    display: none;
  }
}

Für breitere Kompatibilität kombinieren Sie scroll-snap mit Anker-Links für die Navigation:

<nav class="carousel-nav">
  <a href="#slide1">1</a>
  <a href="#slide2">2</a>
  <a href="#slide3">3</a>
</nav>

<div class="carousel">
  <div id="slide1" class="carousel-item">...</div>
  <div id="slide2" class="carousel-item">...</div>
  <div id="slide3" class="carousel-item">...</div>
</div>

CSS-Autoplay-Karussell ohne JavaScript

Das Erstellen eines CSS-Autoplay-Karussells erfordert nur Keyframe-Animationen:

@keyframes slide {
  0%, 20% { transform: translateX(0); }
  25%, 45% { transform: translateX(-100%); }
  50%, 70% { transform: translateX(-200%); }
  75%, 95% { transform: translateX(-300%); }
  100% { transform: translateX(0); }
}

.autoplay-carousel {
  display: flex;
  animation: slide 12s infinite;
}

.autoplay-carousel:hover {
  animation-play-state: paused;
}

Diese Technik funktioniert zuverlässig, tauscht aber Benutzerkontrolle gegen Einfachheit. Das Pausieren beim Hovern verbessert die Benutzerfreundlichkeit, und die Kombination mit prefers-reduced-motion respektiert Barrierefreiheits-Präferenzen:

@media (prefers-reduced-motion: reduce) {
  .autoplay-carousel {
    animation: none;
  }
}

Barrierefreiheit und Performance

Reine CSS-Karussells glänzen bei der Performance – kein JavaScript-Parsing, keine Event-Listener, kein Layout-Thrashing. Das native Scrolling des Browsers verarbeitet Touch-, Tastatur- und Maus-Eingaben automatisch.

Für Barrierefreiheit stellen Sie sicher:

  • Scroll-snap bietet sanftes Scrollen, aber vollständige Tastaturnavigation und barrierefreie Steuerelemente erfordern die neuen Features ::scroll-button und ::scroll-marker.
  • Fokus-Indikatoren bleiben sichtbar
  • Inhalte bleiben zugänglich, wenn CSS fehlschlägt
  • Touch-Targets erfüllen die Mindestgröße von 44×44px

Fügen Sie ARIA-Labels hinzu, um die Screenreader-Erfahrung zu verbessern:

<div class="carousel" role="region" aria-label="Produktgalerie">
  <div class="carousel-item" aria-label="Folie 1 von 3">...</div>
</div>

Fazit

Modernes CSS hat die Notwendigkeit von JavaScript-Karussell-Bibliotheken in den meisten Fällen eliminiert. Scroll-snap bietet heute die Grundlage, während aufkommende Features wie scroll-button und scroll-marker eine Zukunft vorwegnehmen, in der komplexe UI-Komponenten null JavaScript benötigen. Diese Techniken reduzieren Bundle-Größen, verbessern die Performance und vereinfachen die Wartung – Vorteile, die sich im Laufe der Zeit potenzieren.

Beginnen Sie mit scroll-snap für Produktiv-Websites. Experimentieren Sie mit den neuen Pseudo-Elementen in Chrome. Am wichtigsten ist: Hinterfragen Sie, ob Sie diese 50KB-Karussell-Bibliothek benötigen, wenn 20 Zeilen CSS das gleiche Ergebnis erzielen.

Häufig gestellte Fragen (FAQs)

Ja, scroll-snap-Eigenschaften haben ausgezeichnete Browser-Unterstützung in allen modernen Browsern. Die experimentellen Pseudo-Elemente sollten nur mit geeigneten Fallbacks verwendet werden, da sie derzeit nur in Chrome 135+ mit aktivierten Flags funktionieren.

Scroll-snap unterstützt automatisch Touch-Gesten durch natives Browser-Scrolling. Benutzer können natürlich zwischen Folien wischen, und die obligatorischen Snap-Punkte stellen sicher, dass sie immer auf vollständigen Folien landen, ohne zusätzlichen Code.

CSS-Karussells funktionieren perfekt weiter, wenn JavaScript deaktiviert ist, da sie vollständig auf nativen CSS-Eigenschaften basieren. Benutzer können weiterhin mit Touch, Maus oder Tastatur navigieren, was sie widerstandsfähiger macht als JavaScript-basierte Lösungen.

Truly understand users experience

See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data. . Check our GitHub repo and join the thousands of developers in our community..

OpenReplay