Communitygithub.com

stopsopa/skill-popover-api

Bietet eine detaillierte Anleitung und CSS-Styles zur Nutzung der nativen Popover-API, einschließlich Positionierung, Auslösern und framework-unabhängiger Integration.

Was ist skill-popover-api?

Dieses Skill bietet Entwicklern eine umfassende Anleitung zur effektiven Nutzung der nativen Popover-API des Browsers, ergänzt durch ein zentrales CSS-Stylesheet (`popover.css`). Es beschreibt detailliert, wie Popover mit `popovertarget` und `popovertargetaction` durch Klick auf einen Anker geöffnet und geschlossen werden, sowie die manuelle Steuerung über `popover="manual"`. Besonders hervorzuheben ist die Unterstützung für Hover-Trigger mittels `interestfor` (eine moderne Alternative zu `popovertarget`), die es erlaubt, Popover einfach durch Darüberfahren mit der Maus anzuzeigen. Ein Kernmerkmal ist das modulare Positionierungssystem über CSS-Klassen wie `top`, `bottom`, `left`, `right` und deren Kombinationen, das über das Attribut `data-popover` aktiviert wird. Der Skill ist vollständig framework-agnostisch und funktioniert mit Vanilla HTML, React, Angular, Svelte und anderen Bibliotheken, solange die grundlegende HTML-Struktur und das CSS geladen sind. Zusätzlich wird auf eine interaktive Demoseite verwiesen, die die visuelle Auswahl der Positionierungsklassen ermöglicht. Die Dokumentation legt Wert auf klare Trennung zwischen der Nutzung der bereitgestellten Styles und der rein nativen API, um Konflikte zu vermeiden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add stopsopa/skill-popover-api

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Wenn sie im Vergleich zu unserer lokalen Kopie aktualisiert wird, muss unsere lokale Kopie entsprechend angepasst werden.

Wenn zum ersten Mal um die Nutzung der Popover-API gebeten wird, beginne damit, die Datei assets/popover.css irgendwo ins Projekt zu kopieren.

Es ist sinnvoll, mit dem Benutzer abzustimmen, wohin genau die Datei kopiert und wie sie geladen werden soll, falls dies nicht klar ist.

Im Grunde ist es aber eine einfache flache CSS-Datei. Wenn das Framework also Orte zum Laden vorsieht, folge einfach den üblichen Standards. Versuche lediglich, ein doppeltes Laden aus ergonomischen Gründen zu vermeiden.

Wann das Popover bei Klick auf den Anker angezeigt werden soll

Bei Verwendung unseres core-css zur Positionierung des Popovers ist die grundlegende Struktur:

<button popovertarget="mypopover2">Popover umschalten</button>
<div id="mypopover2" popover data-popover>
  Popover-Inhalt
  <button popovertarget="mypopover2" popovertargetaction="hide">Schließen</button>
</div>

Im obigen Beispiel haben wir einen Button, der als Anker dient. Ein Klick auf den Button zeigt das Popover an (das Element mit dem [popover]-Attribut), und ein erneuter Klick verbirgt es.

Ein Klick innerhalb des Popovers verbirgt es jedoch NICHT, mit Ausnahme des Schließen-Buttons – dieser schließt es.

Ein Klick außerhalb des Popovers verbirgt das Popover.

Wenn du der Struktur dieses Beispiels folgst, wird nichts anderes als die Standardfunktionalität der Popover-API genutzt. Du kannst gerne beliebige Anpassungen für den Anwendungsfall des Benutzers vornehmen.

HINWEIS: Die Definition eines „Schließen“-Buttons ist hier optional; alles funktioniert auch ohne ihn zu 100%.

Die HTML-Formation entspricht also dem Standard-Layout.

Der Haupt-Enabler hier ist das Attribut 'data-popover'. Es aktiviert die Styles aus assets/popover.css, die hauptsächlich für die Positionierung des Popovers relativ zum Anker zuständig sind.

Du kannst das Attribut [data-popover] auch weglassen, dann verlierst du unsere benutzerdefinierten Styles und das Popover verhält sich wie ein normales natives Element. Wenn das Attribut [data-popover] fehlt, verwendest du die reine, rohe Popover-API, und dieses Skill hat vermutlich nichts zu bieten. Tue dann einfach, was mit der Standard-Popover-API-Implementierung nötig ist.

Der Punkt ist aber, dass das Attribut [data-popover] als explizite Trennung dient: Einerseits die Handhabung der Popover-API mit den von diesem Skill bereitgestellten Styles, andererseits die manuelle Handhabung. Wenn [data-popover] nicht angegeben ist, greift unser CSS nicht in deine manuelle Popover-API-Implementierung ein.

Du kannst also grundsätzlich [data-popover] verwenden, um bei unseren Styles zu bleiben, oder es weglassen, wenn du die rohe native Popover-API bevorzugst.

Die in diesem Dokument gezeigten Beispiele können durch jedes beliebige JavaScript und andere HTML-APIs gesteuert werden, die normalerweise mit der nativen Popover-API verwendet werden können.

<button popovertarget="mypopover3">Popover umschalten</button>
<div id="mypopover3" popover="manual" data-popover>
  unser Popover-Inhalt
  <button popovertarget="mypopover3" popovertargetaction="hide">Schließen</button>
</div>

Hier schließt du das Popover nur über den Schließen-Button.

Die wesentliche Änderung ist popover="manual" – im manuellen Modus kann das Popover nur per JS oder durch Klick auf ein Element mit popovertargetaction="hide" geschlossen werden.

In allen Beispielen sollte die id für eine bestimmte Gruppe von Divs, die ein einzelnes Popover implementieren, immer eindeutig sein. Außerdem sollte popovertarget immer auf diese bestimmte id verweisen, damit diese DOM-Elemente zusammen funktionieren.

HINWEIS: Es ist jedoch in der Standard-Popover-API möglich, mehrere Anker auf dasselbe Popover zeigen zu lassen. Falls nötig, ist das natürlich erlaubt.

<button popovertarget="mypopover4">Popover umschalten</button>
<div id="mypopover4" popover data-popover>
  Popover-Inhalt
  <button popovertarget="mypopover4" popovertargetaction="hide">Schließen</button>
</div>
<div class="container one">
  <button class="toolbar-button" interestfor="popover-b"><b>B</b></button>
  <button class="toolbar-button" interestfor="popover-i"><i>I</i></button>
  <button class="toolbar-button" interestfor="popover-u"><u>U</u></button>
</div>

<div class="container two">
  <button class="toolbar-button" interestfor="popover-b"><b>B</b></button>
  <button class="toolbar-button" interestfor="popover-i"><i>I</i></button>
  <button class="toolbar-button" interestfor="popover-u"><u>U</u></button>
</div>

<span popover="" id="popover-b" data-popover class="bottom">Fett</span>
<span popover="" id="popover-i" data-popover>Kursiv</span>
<span popover="" id="popover-u" data-popover>Unterstrichen</span>

Oben gibt es zwei Containergruppen -> class="container". (mit den separaten Klassen 'one' und 'two')

Jeder Container hat 3 Buttons.

Jeder Button hat ein 'interestfor'-Attribut, das auf die id in den 3 Popovern verweist.

Beachte, dass wir 2 Container mit jeweils 3 Buttons haben, aber nur 3 Popover. Dies zeigt tatsächlich, dass die Beziehung erlaubt ist: Mehrere überfahrene Elemente können dasselbe Popover auslösen – das ist in Ordnung und erlaubt.

Und am wichtigsten: Das Attribut 'interestfor' anstelle von 'popovertarget' ändert, wie das Popover angezeigt wird.

Die Verwendung von 'interestfor' zeigt das Popover bereits beim Darüberfahren mit der Maus an. Im Gegensatz dazu zeigt 'popovertarget' das Popover erst bei einem Klick an.

Um zu entscheiden, wo genau das Popover relativ zum Anker erscheinen soll, verwenden wir unsere core-css-Datei.

Wie bereits erwähnt, erfordert unsere core-css-Datei, dass wir dem [popover]-Element das Attribut [data-popover] hinzufügen.

Ab diesem Punkt wird die Position des Popovers relativ zum Anker durch das Hinzufügen einer CSS-Klasse zu dem Element mit dem [data-popover]-Attribut gesteuert.

Hier sind die verfügbaren Klassen:

  • Klasse top: Über dem Anker positioniert, horizontal zentriert. (Dies ist der Standardstil, der auch verwendet wird, wenn dem 'data-popover'-Element keine Klasse hinzugefügt wird)

  • Klasse bottom: Unter dem Anker positioniert, horizontal zentriert. (Dies ist der Standardstil, der auch verwendet wird, wenn dem 'data-popover'-Element keine Klasse hinzugefügt wird)

  • Klasse left: Links vom Anker positioniert, vertikal zentriert. (Dies ist der Standardstil, der auch verwendet wird, wenn dem 'data-popover'-Element keine Klasse hinzugefügt wird)

  • Klasse right: Rechts vom Anker positioniert, vertikal zentriert. (Dies ist der Standardstil, der auch verwendet wird, wenn dem 'data-popover'-Element keine Klasse hinzugefügt wird)

  • Klasse top-left: Über dem Anker positioniert, seine linke Kante bündig mit der linken Kante des Ankers.

  • Klasse top-right: Über dem Anker positioniert, seine rechte Kante bündig mit der rechten Kante des Ankers.

  • Klasse bottom-left: Unter dem Anker positioniert, seine linke Kante bündig mit der linken Kante des Ankers.

  • Klasse bottom-right: Unter dem Anker positioniert, seine rechte Kante bündig mit der rechten Kante des Ankers.

  • Klasse center: Direkt über dem Anker positioniert, sowohl horizontal als auch vertikal zentriert.

  • Klasse topleft: Die untere rechte Ecke des Popovers berührt die obere linke Ecke des Ankers.

  • Klasse topright: Die untere linke Ecke des Popovers berührt die obere rechte Ecke des Ankers.

  • Klasse bottomleft: Die obere rechte Ecke des Popovers berührt die untere linke Ecke des Ankers.

  • Klasse bottomright: Die obere linke Ecke des Popovers berührt die untere rechte Ecke des Ankers.

  • Klasse left-top: Links vom Anker positioniert, seine obere Kante bündig mit der oberen Kante des Ankers.

  • Klasse left-bottom: Links vom Anker positioniert, seine untere Kante bündig mit der unteren Kante des Ankers.

  • Klasse right-top: Rechts vom Anker positioniert, seine obere Kante bündig mit der oberen Kante des Ankers.

  • Klasse right-bottom: Rechts vom Anker positioniert, seine untere Kante bündig mit der unteren Kante des Ankers.

Es ist vorzuziehen, die Information, welche Positionierungsklasse verwendet werden soll, vom Benutzer zu erfragen. Wenn der Benutzer jedoch eine bestimmte Positionierung nur beschreibt, versuche, basierend auf der Beschreibung automatisch die beste Klasse zu finden.

Falls der Benutzer oder die KI unsicher ist, welche Klasse verwendet werden soll, schlage dem Benutzer den Link zur Haupt-GitHub-Demoseite vor, auf der das Verhalten der Klassen interaktiv dargestellt wird:

https://stopsopa.github.io/skill-popover-api/demo/index.html

Der Benutzer kann dort beobachten, welche Klasse das beste Positionierungsverhalten für das betreffende Popover bietet.

Von dieser Demoseite aus kann der Benutzer auch mit nur einem Klick auf das Ribbon-Widget zur Haupt-GitHub-Seite für weitere Details gelangen.

Die HTML-Formation unter Verwendung des 'data-popover'-Attributs zur Aktivierung unserer core-css-Styles ist universell.

Sie kann in Vanilla HTML, React, Angular, Svelte und anderen verwendet werden.

Sie funktioniert, solange das grundlegende zugrunde liegende HTML den oben gezeigten Beispielen entspricht und assets/popover.css im Browserkontext geladen ist.

Gelegentlich muss sie jedoch mit einigen Standard-React-Wrapper-Komponenten oder anderen frameworkspezifischen Strukturen umschlossen werden.

Tue einfach, was für den jeweiligen Framework-Kontext richtig ist, basierend auf den obigen Beispielen.

Verwandte Skills