Skip to content

箭頭

首先先引入 <FloatArrow> 元件,並放置在浮動元素內部,然後加上 class:

html
<Popover>
  <Float>
    ...
    <PopoverPanel>
      <FloatArrow class="absolute bg-white w-5 h-5 rotate-45 border border-gray-200" />
      Popover & arrow, content...
    </PopoverPanel>
  </Float>
</Popover>

<script setup>
import { Float, FloatArrow } from '@headlessui-float/vue'
</script>

然後在 <Float> 中啟用 :arrow="5" 功能,讓箭頭保持距離浮動元素容器 5px 的間距,和增加 :offset="15" 讓箭頭離參考元素遠點:

html
<Float :arrow="5" :offset="15">

但這時候會發現箭頭疊在浮動元素的上面,並不是我們要的效果,所以要把下面的內容包裝起來,並設定 position 為 relative,就會移到箭頭的上面。當然還要設定背景顏色,否則還是會看到下方的箭頭:

html
<PopoverPanel class="w-[240px] h-[70px] bg-white border border-gray-200 rounded-md shadow-lg focus:outline-none">
  <FloatArrow class="..." />

  <div class="relative h-full bg-white p-3 text-rose-500 rounded-md">
    Popover & arrow, content...
  </div>
</PopoverPanel>

箭頭完整範例:

vue
<template>
  <Popover>
    <Float
      placement="bottom-start"
      :offset="15"
      :arrow="5"
    >
      <PopoverButton class="px-5 py-2 bg-rose-50 hover:bg-rose-100 text-rose-500 rounded">
        Button
      </PopoverButton>

      <PopoverPanel class="w-[240px] h-[70px] bg-white border border-gray-200 rounded-md shadow-lg focus:outline-none">
        <FloatArrow class="absolute bg-white w-5 h-5 rotate-45 border border-gray-200" />

        <div class="relative h-full bg-white p-3 text-rose-500 rounded-md">
          Popover & arrow, content...
        </div>
      </PopoverPanel>
    </Float>
  </Popover>
</template>

<script setup>
import { Popover, PopoverButton, PopoverPanel } from '@headlessui/vue'
import { Float, FloatArrow } from '@headlessui-float/vue'
</script>

Released under the MIT License.