Heim > Web-Frontend > CSS-Tutorial > Hackige Möglichkeit, die Tooltip-Pfeile von Shadcn anzupassen

Hackige Möglichkeit, die Tooltip-Pfeile von Shadcn anzupassen

Linda Hamilton
Freigeben: 2024-12-31 19:33:09
Original
177 Leute haben es durchsucht

Einführung

Shadcn ist eine Go-to-Bibliothek zum Kopieren und Einfügen von UI-Komponenten in React-Projekten. Eine häufig verwendete Komponente ist der Tooltip, der auf @radix-ui/react-tooltip aufbaut.

Der Standard-Tooltip sieht so aus:

Hacky Way to Customize Shadcn’s Tooltip Arrows

Hinzufügen von Tooltip-Pfeilen

Während die bereitgestellte Komponente sofort gut funktioniert, hatte ich den Wunsch, weitere Anpassungen vorzunehmen – wie zum Beispiel das Hinzufügen eines Pfeils zum Tooltip. Als Inspiration habe ich mich an die Tooltip-Komponente von tremor.so gewandt, die ebenfalls auf @radix-ui/react-tooltip basiert.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Glücklicherweise ist das Hinzufügen eines Pfeils unkompliziert, da @radix-ui/react-tooltip eine Pfeilkomponente enthält. Sie müssen es lediglich in die Inhaltskomponente einfügen.

import * as TooltipPrimitives from '@radix-ui/react-tooltip'

export default () => (
  <TooltipPrimitives.Provider>
    <TooltipPrimitives.Root>
      <TooltipPrimitives.Trigger />
      <TooltipPrimitives.Portal>
        <TooltipPrimitives.Content>
          <TooltipPrimitives.Arrow /> // Add the Arrow component here
        </TooltipPrimitives.Content>
      </TooltipPrimitives.Portal>
    </TooltipPrimitives.Root>
  </TooltipPrimitives.Provider>
)
Nach dem Login kopieren
Nach dem Login kopieren

Was aber, wenn Sie einen Rahmen um den gesamten Tooltip, einschließlich des Pfeils, hinzufügen möchten?

Hinzufügen eines Tooltip-Rahmens

Um dies zu erreichen, müssen Sie die Pfeilkomponente formatieren. Lassen Sie uns einige Ansätze erkunden:

Naiver Ansatz

Das direkte Hinzufügen eines Rahmens zum Pfeil mithilfe von Tailwind-Klassen scheint ein guter Ausgangspunkt zu sein:

<TooltipPrimitives.Arrow
  className='border border-[var(--tooltip-border-color)] fill-[var(--tooltip-color)]'
  width={12}
  height={7}
  aria-hidden='true'
/>
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Ansatz funktioniert jedoch nicht wie erwartet. Die Eigenschaft „Rahmen“ bezieht sich auf die rechteckige Grenze des Elements, nicht auf die Pfeilform selbst.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Verwenden der Eigenschaft „Stroke“.

Da der Pfeil ein SVG-Element ist, können Sie die Eigenschaft „Strich“ verwenden, um einen Rahmen zu definieren:

<TooltipPrimitives.Arrow
  className='border-none fill-[var(--tooltip-color)]'
  stroke='var(--tooltip-border-color)'
  stroke-width='2'
  width={12}
  height={7}
  aria-hidden='true'
/>
Nach dem Login kopieren

Das funktioniert besser, aber der obere Rand des Pfeils ist immer noch sichtbar. Um dies zu beheben, schauen wir uns eine andere Methode an.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Erkunden Sie die Schlagschatten-Option

Eine andere Methode ist die Verwendung eines Schlagschattens, um den Rand zu simulieren:

<TooltipPrimitives.Arrow
  className='-my-px border-none fill-[var(--tooltip-color)] drop-shadow-[0_1px_0_red]'
  width={12}
  height={7}
  aria-hidden='true'
/>
Nach dem Login kopieren

Dadurch wird ein optisch nahtloser Tooltip mit einem Pfeil und einem Rahmen erstellt, aber je nach Anwendungsfall ist dies möglicherweise nicht immer die präziseste Lösung.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Es ist erwähnenswert, dass diese Lösung von der Tooltip-Komponente von Origin UI inspiriert ist, die verschiedene anpassbare Tooltip-Varianten bietet, die Entwicklungszeit sparen können.

Wie wäre es, wenn du es noch mehr stylen würdest, etwa mit meinem eigenen benutzerdefinierten SVG?

Benutzerdefinierter SVG-Pfeil

Ich besuche oft die Website von Vercel und die Dropdown-Navigationsleiste ist mir ins Auge gefallen, insbesondere der Pfeil.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Ich war neugierig, wie es entworfen wurde, öffnete die Entwicklungstools, untersuchte die Elemente und fand den SVG-Pfeil. Ich habe es dann kopiert und zur genaueren Betrachtung in Figma eingefügt.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Ich dachte, es könnte eine interessante Designwahl für einen Tooltip-Pfeil sein.

Positionierung

Hacky Way to Customize Shadcn’s Tooltip Arrows

Die Positionierung des SVG-Pfeils hängt von der Platzierung des Tooltips ab – oben, unten, links oder rechts. Die Content-Komponente stellt ein datenseitiges Attribut bereit, mit dem Sie die Positionierung dynamisch anpassen können:

import * as TooltipPrimitives from '@radix-ui/react-tooltip'

export default () => (
  <TooltipPrimitives.Provider>
    <TooltipPrimitives.Root>
      <TooltipPrimitives.Trigger />
      <TooltipPrimitives.Portal>
        <TooltipPrimitives.Content>
          <TooltipPrimitives.Arrow /> // Add the Arrow component here
        </TooltipPrimitives.Content>
      </TooltipPrimitives.Portal>
    </TooltipPrimitives.Root>
  </TooltipPrimitives.Provider>
)
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes könnten wir die integrierte Tooltip-Pfeilkomponente durch unser benutzerdefiniertes Design ersetzen. Es sollte perfekt funktionieren, oder?

Hacky Way to Customize Shadcn’s Tooltip Arrows

Na ja, noch nicht ganz. Schauen Sie sich das an: Der Pfeil steckt in der Mitte des Tooltips, anstatt in der Nähe des Auslösers positioniert zu sein.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Dieses unerwünschte Verhalten tritt auf, weil wir für jede Seite nur eine statische Position definiert haben. Stattdessen müssen wir eine dynamische Position einnehmen, um dieses Problem zu lösen.

Dynamische Position

Beginnen wir erneut mit der integrierten Arrow-Komponente. Wenn Sie die Arrow-Komponente in den Entwicklungstools untersuchen, während Sie die Änderung der Tooltip-Position simulieren, werden Sie feststellen, dass das SVG-Element in einen Span mit einer linken CSS-Eigenschaft eingeschlossen ist.

Hacky Way to Customize Shadcn’s Tooltip Arrows

Dieser Wert ändert sich dynamisch basierend auf der Position des Tooltips. Wir können diesen linken CSS-Wert erfassen und auf unsere benutzerdefinierte Pfeilkomponente anwenden.

Um diesen linken Wert zu verfolgen, müssen wir ihn mit einem MutationObserver beobachten.

<TooltipPrimitives.Arrow
  className='border border-[var(--tooltip-border-color)] fill-[var(--tooltip-color)]'
  width={12}
  height={7}
  aria-hidden='true'
/>
Nach dem Login kopieren
Nach dem Login kopieren

Endergebnis

Es funktioniert jetzt wie erwartet ??

Hacky Way to Customize Shadcn’s Tooltip Arrows

P.S. Möglicherweise möchten Sie die obere Position anpassen, wenn Sie den Tooltip lieber auf der linken oder rechten Seite anzeigen möchten.

Abschluss

Obwohl dieser Ansatz funktioniert, bin ich sicher, dass es UI-Bibliotheken gibt, die eine einfachere und flexiblere Tooltip-Gestaltung ermöglichen. Es ist jedoch eine Bereicherung, eine Problemumgehung dafür gefunden zu haben. Wenn Sie daran interessiert sind, andere Optionen zu erkunden, sollten Sie sich diese Diskussion ansehen.

Das obige ist der detaillierte Inhalt vonHackige Möglichkeit, die Tooltip-Pfeile von Shadcn anzupassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage