章節連結
近期為了熟悉元件 Component 的客製化,便參照「哎呀!不小心刻了一套 React UI 元件庫」一書進行練習。這篇筆記下 Tooltip。
[ Repo ]:https://github.com/andy922200/practice-storybook-react
內容
Tooltip 是一個文字彈出提醒元件,當 hover 到該元件上時,會顯示對應的內容。
為了避免 z-index 的堆疊環境設定問題,在 React 中會使用 createPortal 來簡化,讓這類 position: absolute 的元件可以另外綁定到某個 DOM id 上面。
參數
- placement:相對於傳入的核心內容,Tooltip 的出現位置可以粗略分為 Top, Right, Bottom, Left。這四個方向各自再分為 Top 和 Bottom 或是 Left, Right,所以一共有 12 種組合
- showArrow:產生一個矩形旋轉 45 度後,再將超出的地方隱藏即可。實作時,可以先將多餘的地方顯示出來,等之後再隱藏
- content: 提示文字
- children: 核心內容
- themeColor
Tooltip 的位置相關移動
[ top ]
- X axis
- top-left:0
- top:座標原點往右半個 children,再倒退 50% 的 Tooltip
- top-right:用 translateX (-100%) 當做基礎,再加上 children 的寬度
- Y axis
- 用 translateY (-100%) 當做基礎,再減掉 gap → 形同從核心元素本身上移到上方再多出 gap 的高度
[ bottom ]
- X axis
- bottom-left:0
- bottom:座標原點往右半個 children,再倒退 50% 的 Tooltip
- bottom-right:用 translateX (-100%) 當做基礎,再加上 children 的寬度
- Y axis
- 用 children 的高度當做基礎,再加上 gap
[ right ]
- X axis
- 用 children 的寬度當做基礎,再加上 gap
- Y axis
- right-top:0
- right:用 translateY (-50%) 當做基礎,再加上 children 的 50% 高度
- right-bottom:用 translateY (-100%) 當做基礎,再加上 children 的寬度
[ left ]
- X axis
- 用 translateX (-100%) 當做基礎,再加上 gap
- Y axis
- left-top:0
- left:用 translateY (-50%) 當做基礎,再加上 children 的 50% 高度
- left-bottom:用 translateY (-100%) 當做基礎,再加上 children 的寬度
程式碼
相關文章
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 30 – 佈署發佈
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 29 – Toast
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 28 – Modal
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 27 – Progress Circle
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 26 – Progress Bar
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 25 – Skeleton
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 24 – Spin
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 23 – Pagination
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 22 – Tabs
近期為了熟悉元件 Component 的客製化,便
★全文分享★ [筆記] 哎呀!不小心刻了一套 React UI 元件庫 21 – Drawer
近期為了熟悉元件 Component 的客製化,便