支持 Laravel.io 的持续发展 →

使用 TailwindCss 和 AlpineJs 的悬停提示

18 Aug, 2021 4 min read

在本教程中,我们将使用TailwindCss和AlpineJs创建了一个Tooltip,并将其逻辑封装到Laravel组件中。教程结束时,我们将拥有如下所示的Tooltip。

Preview

在开始学习之前,请确保您已经安装了一个Laravel项目,并且包含了AlpineJs和TailwindCss。我建议在Laravel项目中安装Breeze,因为这将自动安装这两个依赖项。

我们的目标是创建一个帮助图标,当用户将鼠标悬停在该图标上时,将显示帮助文本作为提示。

因此,我们首先需要一个帮助图标。TailwindCss建议使用HeroIcons,所以我们选择了一个图标,一个带圆圈的问号,其SVG如下。

<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>

我们将将其封装在一个span标签中,如下所示

<span class="ml-2 h-5 w-5 cursor-pointer">
  <!-- SVG Goes Here -->
</span>

在这里,我们使用了以下TailwindCss类:

<ul> <li>ml-2: 左外边距为0.5rem</li> <li>h-5, w-5: 高度 & 宽度为1.25rem</li> <li>cursor-pointer: 鼠标悬停时改变光标样式为指针</li> </ul>

您可以按照需求修改这些类。

现在,让我们还包括一个div,该div将显示在span内部的Tooltip。

<span class="ml-2 h-5 w-5 cursor-pointer">
  <!-- SVG Goes Here -->
  <div>
     This is the Tooltip.
  </div>
</span>

我们需要在最初隐藏这个div,并且只在用户将鼠标移到SVG上时显示它。我们将使用AlpineJs来实现这一点。

首先,我们将定义AlpineJs数据,它将包含一个属性,我们最初将其设置为false。

x-data="{ tooltip: false }"

然后我们将使用x-on指令来在mouseover时将此属性设置为true,以及在mouseleave时将其设置为false。

x-on:mouseover="tooltip = true" x-on:mouseleave="tooltip = false"

最后我们将使用这个属性,通过使用 x-show 指令来显示和隐藏 div。

x-show="tooltip" 

我们现在写的代码如下所示

<span 
    x-data="{ tooltip: false }" 
    x-on:mouseover="tooltip = true" 
    x-on:mouseleave="tooltip = false"
    class="ml-2 h-5 w-5 cursor-pointer">
  <!-- SVG Goes Here -->
  <div x-show="tooltip">
     This is the Tooltip.
  </div>
</span>

我们的提示符现在应该可以正常工作了。然而,我们可以通过将以下 TailwindCss 类应用到 div 上进一步提高它。

  <div x-show="tooltip" 
      class="text-sm text-white absolute bg-blue-400 rounded-lg p-2
 transform -translate-y-8 translate-x-8">
     This is the Tooltip.
  </div>

我们已应用的以下 TailwindCss 类:

<ul> <li>text-sm: 将提示文本缩小</li> <li>text-white: 将文本颜色应用于提示,使其变为白色</li> <li>absolute: 给它一个绝对位置,使其不会干扰周围的元素</li> <li>bg-blue-400: 蓝色阴影的背景颜色</li> <li>rounded-lg: 应用圆角 برجسته</li> <li>p-2: 边距 0.5rem</li> <li>transform: 以应用以下转换类的方式实现转换</li> <li>-translate-y-8 translate-x-8: 使文本在x轴和y轴上移动</li> <li>/ul>

在这个阶段,你应该得到与教程开头图片中所示相同的输出。我们还可以在一个 Blade 文件中包含多个提示。

但是,让我们将所有逻辑移动到一个组件中。我们将在 resources/views/components/tooltip.blade.php 创建文件并将所有代码移动到这个文件中。

<span 
    x-data="{ tooltip: false }" 
    x-on:mouseover="tooltip = true" 
    x-on:mouseleave="tooltip = false"
    class="ml-2 h-5 w-5 cursor-pointer">
  <!-- SVG Goes Here -->
  <div x-show="tooltip"
    class="text-sm text-white absolute bg-blue-400 rounded-lg 
    p-2 transform -translate-y-8 translate-x-8"
  >
     {{$slot}}
  </div>
</span>

请注意,我们已经用 $slot 替换了提示文本。现在,我们可以在 Blade 文件中调用这个组件并传递类似于下面的提示文本

<x-tooltip>This is the Tooltip Text</x-tooltip>

上述代码展示了如何在 Blade 文件中使用提示符是多么简单。如果我们想更改提示符的行为,我们只需在组件文件中进行更改。

希望你喜欢这篇文章。

最后更新时间 2 年前。

joedixon, poegim 喜欢这篇文章

2
喜欢这篇文章? 让作者知道并给他们一个赞!

你可能还会喜欢以下文章

March 11th 2024

如何使用 Larastan 将 Laravel 应用从 0 到 9

在 Laravel 应用实际执行之前发现错误是可能的,这要归功于 Larastan...

阅读文章
July 19th 2024

无需 trait 标准化 API 响应

我注意到大多数用于 API 响应的库都是使用 traits 实现的,并且...

阅读文章
2024年7月17日

在Laravel项目中收集反馈并通过Discord通知

如何在Laravel项目中创建一个反馈模块,并在收到消息时收到Discord通知...

阅读文章

我们想感谢这些 令人惊叹的公司 对我们的支持

您的标志在这里?

Laravel.io

Laravel的问题解决、知识共享和社区建设门户网站。

© 2024 Laravel.io - 所有权利保留。