Tippy.js 一个轻量级的,纯JS库工具提示(tooltip)库
Tippy.js 一个轻量级的,纯JS库工具提示(tooltip)库Fixes
- use getCurrentTarget() in interactivity hide listener
- move var assignment into hide() method
- (followCursor): wrong position if mouse was not moved initially
- (delegate): missing comparison check
Assets
2
Fixes
- (inlinePositioning): increased 1px buffer to 2px (#763 (comment)) and fallback to standard technique instead of
boundingRect
Assets
2
Features
createSingleton
can haveoverrides
prop andtippyInstances
updatedhideWithInteractivity
method- Allow
contextElement
property ongetReferenceClientRect
Fixes
- Correct
"click focus"
trigger behavior onClickOutside
lifecycle is called in pluginsallowHTML
updates if content does not update via.setProps()
- Types fixes
Assets
2
Features
onClickOutside
propdist/border.css
stylesheet
Assets
2
Fixes
- Fix nested tippy position updates when the nested ones are re-rendered first (e.g. in React)
- Ensure instance is hidden before unmounting if calling
.unmount()
without a.hide()
call before it - Handle
zIndex
on popper node internally - Set transition duration to 0 before mount
- (animateFill): check if value is truthy for render fn error
- (hideAll): add isDestroyed guard
Assets
2
Fixes
- Circular call loop if calling
.destroy()
inonHidden()
(#724) createSingleton()
when using function content (#723)- Mispositioned arrow by 1px (
@popperjs/core
upgrade) - Mispositioned arrow if tippy is inside a
text-align: center
container - Set
animation: false
for headless UMD build - Only set
popper.style.visibility
if the default render function is specified
Assets
2
Fixes
- hide tippy on focusout from child element (#694)
- improve hiding upon scroll with interactivity
- followCursor: scroll listeners for vertical/horizontal
Assets
2
Fixes
- Make mouseenter click behaviour consistent for interactive/non-interactive tippies (#669)
- Fix
onShown
hook
Assets
2
Fixes
- core: modify
trigger: 'mouseenter click'
behavior (#659) - createSingleton: add bail-out check
- followCursor: preserve original popperInstance.reference
- sticky: popperInstance reference should be checked
- errors/warnings: fix dev/prod divergence and change formatting to prevent odd text wrapping
Assets
2
Fixes
- core: preserve previous
popperInstance.reference
on setProps - core:
showOnCreate
prop should respectdelay
- types: export Boundary as a type (#637)
Assets
2
Fixes
- core: Fix
onWindowBlur
condition - core: Fix
iife
versions' addons not having plugins passed by default - followCursor: Allow
.show()
/.hide()
to work - types: Handle
null
indelay
/duration
arrays
Assets
2
Fixes
- core: Reduce impact of
.tippy-iOS
class side effects - core: Improve support for nested tippies (CSS fixes + account for nested
interactiveBorder
s) - core:
hideAll()
works on<iframe>
s - props:
distance
should accept strings - css: Switch to consistent
px
units - warnings: Tweak invalid prop warning
- warnings: Tweak
arrowType
warning - warnings: Fix
target
warning link
Assets
2
Fixes
- core: Only set transition duration to 0 upon show if not currently mounted (for
createSingleton
early cancelation) - core: Plugin hooks for
onShow
andonHide
invoked before props' - core: Change distance technique to use padding on popper instead of top/left on tooltip
- css: Improve consistency of vars and units
- addons: Add support for plugins
- delegate: Account for
data-tippy-trigger
attribute - createSingleton: Fix missing argument in
onAfterUpdate
to preserveInvocation() - perf: Optimize
data-tippy-*
attribute reducer - warnings: Add link to accessibility docs for interactive warning and improve clarity
Assets
2
Fixes
- core: Add support for iframes: atomiks/tippy.js-react#121
- core: Use
.currentTarget
over.target
- core: Clear pending timeouts on destroy
- followCursor: Use rAF instead of setTimeout to avoid rare jitter on content update
- followCursor: reset popperInstance reference onHidden
- warnings: Ensure links end with trailing slash
- types: Add missing type for
createTippyWithPlugins
Assets
2
View migration guide from v4 to v5
Goals
- Improve developer experience with warnings without bloating production bundle size
- Massively reduce core size and make the library more tree shakeable
- Allow new feature additions to be added separately without increasing bundle size (addons & plugins system)
- Improve naming consistency and usage
Highlights
🌳
Core size has decreased
The library is now tree shakeable, allowing you to import and use only the parts you need.
-
⬇️ 30%+ smaller download size -
⬇️ 50%+ smaller parse size -
⬇️ 60%+ smaller core CSS + smaller external animation files
👷
Better developer experience
There is now a DEV-only messaging system to help you when things go wrong.
🔥
Animation improvements
There is a new /animations
folder (like /themes
) and creating custom animations is a smoother experience. Additionally, there is new documentation about fully dynamic transitions of a tippy element's dimensions, and work is being done to create an official API for it.
🤩 Plenty of new features
- New
touch: ["hold", delay]
prop (for long press behavior) - New
arrow: string | SVGElement
values to use your own shape - New
createSingleton
addon, supersedesgroup()
for smooth transitions - New
sticky
behavior to checkreference
orpopper
rects (or both) - New
inlinePositioning
prop supports better inline element positioning (further behavior options to come)
🔌
Plugins API
Allows you to extend functionality of tippy instances and create your own props.
♿ Improved accessibility out of the box
Interactive tippys are now accessible by default, and DEV warnings will let you know if there is an accessibility problem.
🐞
Subtle behavioral bugs fixed and improvements made
animateFill: true
is no longer default, so the shape cut off issue is not present with large content unless you intentionally use it- hideOnClick uses
mousedown
instead ofclick
- Calling
.disable()
will hide an instance if it's currently visible - Updating content while hovering over an interactive element will not break the mouseleave to hide it
- For instances with a
delay
, if the tippy began to transitioning out and the instance was triggered again before unmounting, it will ignore thedelay
- Window blur listener will only blur references whose tippy is not visible upon blur
- If using multiple tippys on a single element, screenreaders will now announce all of them
- In touch and keyboard contexts,
delay
is always 0
Installation
Package Managers:
# npm
npm i tippy.js@5
# Yarn
yarn add tippy.js@5
CDN:
<script src="https://unpkg.com/popper.js@1"></script>
<script src="https://unpkg.com/tippy.js@5"></script>
Assets
2
Fixes
- Optimize
sticky
option by preventing repaints on every animation frame - Place injected
style
node before the firststyle
orlink
tag instead of first child - Reduce CSS size slightly
- Fix leak with document click listener not being removed if tippy was hidden before it was shown when using
delay
- Fix #532: Add
referenceNode
property for followCursor (NOTE: awaiting popper.js@1.16.0 release)
Assets
2
Fixes
- Fix
followCursor
having incorrect offset when using a variation placement (-start
or-end
) (#513)
Assets
2
Fixes
- Mounting behavior (IE11 scrollbar flicker) (#509)
followCursor
fixes (respects boundary & fix regression where initial was not placed correctly on touch devices on first show)- Ensure
destroy()
's unmounting of the tippy can never be impeded - Fix the longstanding interactive scrolling issue
- Fix path selector having
pointer-events: auto
(#504)
Assets
2
Fixes
Assets
2
Features
- Added
triggerTarget
option to apply the trigger listeners to a different node from the positioning reference - Added
onTrigger
option to allow calls to.set()
to change the reference position and instance props based on the event before the tooltip is shown without interrupting the lifecycle (unlikewait
) - Added ability to pass a ReferenceElement to HideAllOptions.exclude for references with multiple tippys
Fixes
- Make
tippy.group()
andupdateDuration
updateable - Fix when
popperOptions.onCreate
andpopperOptions.onUpdate
are called so they match the actual invocations by Popper.js - Fix
followCursor
not respectingpopperOptions.modifiers.preventOverflow.padding
- Fix multiple tippys from only displaying one if using touch and
hideOnClick: true
- Fix the tooltip moving with the cursor if over the popper element when using
followCursor: '{horizontal, vertical}'
andinteractive: true
- [TypeScript] Fix instance.reference type to account for VirtualReference
Assets
2
Features
- Add
x-placement
attribute to tooltip node, allowing you to style without needing to use the.tippy-popper
selector
Example
Before:
.tippy-popper[x-placement^='top'] .tippy-tooltip.my-theme .tippy-arrow {
border-top-color: pink;
}
After:
.tippy-tooltip.my-theme[x-placement^='top'] .tippy-arrow {
border-top-color: pink;
}
Fixes
- Apply correct mutations when calling
.set()
with apopperInstance
dependency update
Assets
2
This release mainly fixes some minor CSS issues
Fixes
- Make
rem
units align with whole pixels using 16px base default - Size round arrow closer to default sharp arrow so it reaches the edges of the popper + reduce arrow margins overall
- Fix infinite loop when
popperOptions
isundefined
instead of an object - Fix small gaps when using the round arrow in Edge/IE11
- Fix longstanding issue (since v0) of Popper's
preventOverflow
not taking into account thedistance
prop
Assets
2
Fixes
Assets
2
Assets
2
Install
npm i tippy.js@latest
Overall minzipped size has been reduced by about 400 bytes
Features / Improvements
-
✅ followCursor: 'initial'
works on touch devices too
-
✅ Padding between popper and container/viewport edges has been reduced to 3px from 5px by default
-
✅ scale
animation has its transform origin sticking to the reference element
-
✅ tippy.hideAll()
method is now actually useful!
It no longer checks hideOnClick
unexpectedly. In other words:
tippy.hideAll()
Does exactly what it says. All tippys will be hidden no matter what (using their own specified durations).
There's even options now too, for example, make all of them hide instantly (useful for scrolling):
tippy.hideAll({ duration: 0 })
Or exclude a particular instance from hiding:
tippy.hideAll({ exclude: tippyInstance })
-
✅ tippy.group()
method - finally, a built-in solution to #81!
How to use it:
const instances = tippy('button', { delay: 1000 })
tippy.group(instances)
// Optional:
tippy.group(instances, {
duration: number | [number, number], // instead of 0 between each show,
delay: number | [number, number], // if you didn't specify a delay in the instances
})
As simple as that, the tooltips will now instantly show when hovering between items in the group instead of waiting for the delay sluggishly.
-
✅ updateDuration
option is now0
instead of200
by default
Flips don't have the weird transition if using flipOnUpdate: true
(note that it's off by default now). Specifying a number now uses true smooth flips, where the popper element smoothly transitions from one placement to another. The effect is quite satisfying.
-
✅ role
option - instead oftooltip
, certain popovers may need to bemenu
ordialog
for accessibility reasons.
tippy('button', {
role: 'menu'
})
Breaking changes
-
🔴 You no longer need to import CSS when using modules. It gets injected to the very top of the<head>
, like the UMD version.
// v3
import tippy from 'tippy.js'
import 'tippy.js/dist/tippy.css'
// v4
import tippy from 'tippy.js'
Also, files renamed to index
instead of tippy
.
In case you don't want this, you still can import it separately:
import tippy from 'tippy.js/esm'
import 'tippy.js/index.css'
Additionally, everything exists in the root directory instead of under dist/
. For example, themes:
import 'tippy.js/themes/light.css'
Why: cleaner import experience for consumers
-
🔴 popper.js
is external in all formats, so no moretippy.standalone
. This means CDN includes must reference it separately.
<script src="https://unpkg.com/popper.js@1/dist/umd/popper.min.js"></script>
<script src="https://unpkg.com/tippy.js@4"></script>
<script>
tippy('button')
</script>
Why: to prevent popper.js
from becoming outdated and lagging behind popper releases, works like a dependency should
-
🔴 Removetippy.one()
. Instead, an instance will be returned in two cases: if the reference is either an element or a virtual element
// v3
const collection = tippy('.btn')
const collection = tippy(document.querySelector('.btn'))
const instance = tippy.one('.btn')
const instance = tippy.one(document.querySelectorAll('.btn'))
// v4
// Instance
const instance = tippy(document.querySelector('.btn'))
const instance = tippy(virtualElement)
// Instance[]
const instances = tippy('#btn')
const instances = tippy('.btn')
const instances = tippy(document.querySelectorAll('.btn'))
Why: collections are not useful and don't need to exist. But we want to avoid an opaque return value if using a certain type. Therefore even if only a single element is given an instance when using a CSS selector, it always returns an array.
-
🔴 Removetippy.useCapture()
andtippy.disableAnimations()
Why: .useCapture()
is now default in v3 anyway. .disableAnimations()
was for testing environments however the new delay
value causes async behavior when hiding. In testing environments, use the following call to make everything synchronous:
tippy.setDefaults({ duration: 0, delay: 0 })
-
🔴 RemovearrowTransform
option
Why: Since introducing a bordered theme (light-border), using transforms distorts the shape of the arrow border. Arrow transforms should be specified in CSS using a theme.
-
🔴 RemoveautoFocus
andshouldPopperHideOnBlur
options. Remove all focus handling and leave it up to the developer.
Why: The recommended accessible popover is to append it directly after the reference element which requires no focus handling. This will ensure focusable elements inside the tippy can be tabbed to afterwards. Sometimes this can be problematic though, with regards to z-index /stacking issues and the popover needs to be appended to the body. In this case it's up to the developer to create modal-like behavior with a close button and focus trapping, they can programmatically call .focus() where need be.
-
🔴 The AJAX image example (smooth transition): you must explicitly define transition styles on the tooltip now.
e.g. in the onShow()
lifecycle:
onShow(instance) {
const { tooltip } = instance.popperChildren
tooltip.style.transitionDuration = '0.2s'
tooltip.style.transitionProperty = 'visibility, opacity, height'
}
-
⚠️ Renameperformance
toignoreAttributes
Why: ignoreAttributes
describes what it's doing, performance
described the side effect of doing it
-
⚠️ Renametippy.hideAllPoppers()
totippy.hideAll()
Why: Shorter and more concise and conveys the same meaning
-
⚠️ In event delegation mode,content
andappendTo
as functions receive the target element rather than the delegate reference
Why: It's actually useful this way
-
⚠️ RenamelivePlacement
toflipOnUpdate
, with much better behavior. It's nowfalse
by default. The tippy will still update its position on scroll, but flipping while scrolling/resizing, etc is disabled by default.
Why: Better UX (subjective) to keep the placement static after showing and prevent flips while scrolling
-
⚠️ If yourcontent
is an element, and you change elements inside it, you must callinstance.popperInstance.scheduleUpdate()
.
Why: MutationObserver
is not as robust as a ResizeObserver
and has been removed. If you want complete accuracy consider using a polyfill for ResizeObserver
.
-
⚠️ Opinioned CSS like font-smoothing has been removed. Tippy elements should inherit the global styles as much as possible.
Why: Let the developer have more control and not introduce unexpected styling
Fixes
-
Fix for tippys with delays when leaving the popper, it sometimes would not close
-
Correctly parse
null
in attributes
Assets
2
Install
npm i tippy.js@next
Overall minzipped size has been reduced by about 400 bytes
Breaking changes
-
🔴 You no longer need to import CSS when using modules. It gets injected to the very top of the<head>
, like the UMD version.
// v3
import tippy from 'tippy.js'
import 'tippy.js/dist/tippy.css'
// v4
import tippy from 'tippy.js'
Also, files renamed to index
instead of tippy
.
In case you don't want this, you still can import it separately:
import tippy from 'tippy.js/esm'
import 'tippy.js/index.css'
Additionally, everything exists in the root directory instead of under dist/
. For example, themes:
import 'tippy.js/themes/light.css'
Why: cleaner import experience for consumers
-
🔴 popper.js
is external in all formats, so no moretippy.standalone
. This means CDN includes must reference it separately.
<script src="https://unpkg.com/popper.js@1/dist/umd/popper.min.js"></script>
<script src="https://unpkg.com/tippy.js@4"></script>
<script>
tippy('button')
</script>
Why: to prevent popper.js
from becoming outdated and lagging behind popper releases, works like a dependency should
-
🔴 Removetippy.one()
. Instead, an instance will be returned in two cases: if the reference is either an element or a virtual element
// v3
const collection = tippy('.btn')
const collection = tippy(document.querySelector('.btn'))
const instance = tippy.one('.btn')
const instance = tippy.one(document.querySelectorAll('.btn'))
// v4
// Instance
const instance = tippy(document.querySelector('.btn'))
const instance = tippy(virtualElement)
// Instance[]
const instances = tippy('#btn')
const instances = tippy('.btn')
const instances = tippy(document.querySelectorAll('.btn'))
Why: collections are not useful and don't need to exist. But we want to avoid an opaque return value if using a certain type. Therefore even if only a single element is given an instance when using a CSS selector, it always returns an array.
-
🔴 Removetippy.useCapture()
andtippy.disableAnimations()
Why: .useCapture()
is now default in v3 anyway. .disableAnimations()
was for testing environments however the new delay
value causes async behavior when hiding. In testing environments, use the following call to make everything synchronous:
tippy.setDefaults({ duration: 0, delay: 0 })
-
🔴 RemovearrowTransform
option
Why: Since introducing a bordered theme (light-border), using transforms distorts the shape of the arrow border. Arrow transforms should be specified in CSS using a theme.
-
🔴 RemoveautoFocus
andshouldPopperHideOnBlur
options. Remove all focus handling and leave it up to the developer.
Why: The recommended accessible popover is to append it directly after the reference element which requires no focus handling. This will ensure focusable elements inside the tippy can be tabbed to afterwards. Sometimes this can be problematic though, with regards to z-index /stacking issues and the popover needs to be appended to the body. In this case it's up to the developer to create modal-like behavior with a close button and focus trapping, they can programmatically call .focus() where need be.
-
⚠️ Renameperformance
toignoreAttributes
Why: ignoreAttributes
describes what it's doing, performance
described the side effect of doing it
-
⚠️ Renametippy.hideAllPoppers()
totippy.hideAll()
Why: Shorter and more concise and conveys the same meaning
-
⚠️ In event delegation mode,content
andappendTo
as functions receive the target element rather than the delegate reference
Why: It's actually useful this way
-
⚠️ RenamelivePlacement
toflipScroll
, with much better behavior. It's nowfalse
by default. The tippy will still update its position on scroll, but flipping while scrolling is disabled.
Why: Better UX (subjective) to keep the placement static after showing and prevent flips while scrolling
-
⚠️ If yourcontent
is an element, and you change elements inside it, you must callinstance.popperInstance.scheduleUpdate()
.
Why: MutationObserver
is not as robust as a ResizeObserver
and has been removed. If you want complete accuracy consider using a polyfill for ResizeObserver
.
-
⚠️ Opinioned CSS like font-smoothing has been removed. Tippy elements should inherit the global styles as much as possible.
Why: Let the developer have more control and not introduce unexpected styling
Features / Improvements
-
✅ followCursor: 'initial'
works on touch devices too
-
✅ updateDuration
option is now0
instead of200
by default
Flips don't have the weird transition if using flipScroll: true
(note that it's off by default now). Specifying a number now uses true smooth flips, where the popper element smoothly transitions from one placement to another. The effect is quite satisfying.
-
✅ Padding between popper and container/viewport edges has been reduced to 2px from 5px by default
-
✅ scale
animation has its transform origin sticking to the reference element
-
✅ tippy.hideAll()
method is now actually useful!
It no longer checks hideOnClick
unexpectedly. In other words:
tippy.hideAll()
Does exactly what it says. All tippys will be hidden no matter what (using their own specified durations).
There's even options now too, for example, make all of them hide instantly (useful for scrolling):
tippy.hideAll({ duration: 0 })
Or exclude a particular instance from hiding:
tippy.hideAll({ exclude: tippyInstance })
-
✅ tippy.group()
method - finally, a built-in solution to #81!
How to use it:
const instances = tippy('button', { delay: 1000 })
tippy.group(instances)
// Optional:
tippy.group(instances, {
duration: number | [number, number], // instead of 0 between each show,
delay: number | [number, number], // if you didn't specify a delay in the instances
})
As simple as that, the tooltips will now instantly show when hovering between items in the group instead of waiting for the delay sluggishly.
-
✅ role
option - instead oftooltip
, certain popovers may need to bemenu
ordialog
for accessibility reasons.
tippy('button', {
role: 'menu'
})
Assets
2
Features
Fixes
popper.js^1.14.6
includes position rounding fixes- Fix slight text blurriness on Safari when
animateFill: true
google
theme adheres tosize
option- Arrow centering fixes for
light-border.css
due to Popper.js issue
Assets
2
Deprecations
- Deprecate
tippy.useCapture()
and make capture phase for the global click listener default. This prevents the need to wrap calls to.show()
insetTimeout
if manually triggering the tooltip after a click event somewhere
Fixes
- Add
characterData
to the popper mutation observer so changes to textual content within a tippy is detected and its position updated accordingly. Mainly noticeable in React updates. - Use
state.isMounted
overstate.isVisible
to determine ifhide(0)
should be called when destroying a tippy. This was not a leak but caused glitches when using the React component after changing routes and unmounting the Tippy component.
Assets
2
v3.0.0-alpha.1
atomiks released this
- Include IE11 transitionend fix
- Subtler animations for
scale
andperspective
- Popper.js 1.14.4
- Include
esm
directory andmodule
field in package.json
v3.0.0-alpha.0
atomiks released this
Tippy.js 3: alpha 0
The first alpha release of Tippy.js v3.
npm i tippy.js@next
What's changed?
You no longer use a title
attribute on elements, and the html
option has been removed. Both functionalities have been streamlined into a single prop: content
.
Method 1: Auto
<button data-tippy="Tooltip">Text</button>
<button data-tippy="<strong>HTML</strong>">Text</button>
Elements with a data-tippy
attribute are automatically given a tooltip. You no longer need to touch JavaScript. (Note on performance: It takes <0.5ms to do this check on a page if there are no tooltips).
Method 2: content
You can give elements a data-tippy-content
attribute and use the function:
<button data-tippy-content="Tooltip">Text</button>
<script>tippy('button')</script>
Or specify the content as an option.
<button>Text</button>
<script>tippy('button', { content: 'Tooltip' })</script>
It can contain HTML, and you can use an HTMLElement
as the value.
tippy()
call
The object that is returned:
selector
is now namedtargets
tooltips
is now namedinstances
Instances
- New
popperChildren
property: access the children of the popper element easily without needing to do query selections or manual DOM walking. options
has been renamed toprops
. Options are the props you supply optionally totippy()
, but it doesn't make sense for the tooltip configuration object to be calledoptions
. Instead, it's nowprops
, inspired by React.state
object properties are all prefixed withis
because they are boolean values.listeners
made private
Methods
The most useful new method is set()
. It allows you to update the props of a tooltip after it has been created.
const tip = tippy.one('.btn', {
content: 'Hello!',
arrow: true,
delay: 500
})
// Later on...
tip.set({
content: 'Bye!',
arrow: false,
delay: 0
})
Static
tippy.setDefaults(props)
- pass an object in to change the default configurationtippy.browser
removed
Options/Props
a11y: true
- (accessibility shorthand): ensure the reference element can receive focusallowTitleHTML: true
is nowallowHTML
hideOnClick
changes"persistent"
to"toggle"
and it has the opposite behavior. This means thathideOnClick: false
will preventclick
-triggered tooltips from ever hiding unless you specify"toggle"
. Not 100% sure on this, however.touch: true
- display the tooltip on touch devices?createPopperInstanceOnInit: false
is nowlazy: true
. More concise name.showOnInit: false
- show the tooltip immediately?maxWidth
removed. Should be handled by a theme in CSS because of narrow mobile devices.multiple: false
- can the reference have multiple tippys? Currently each new instance overrides the previous_tippy
property. It most likely needs to be turned into an array on the second init, but I fear this causes unpredictable behavior. (The previous option which allowed multiple click triggered tooltips to be open is now gone. I don't see much demand for it, but it might return as a different name).duration/delay
: you can now leave a value undefined in the array and the default value is used. e.g.duration: [, 100]
(use default for show) orduration: [100]
(use default for hide). It's more concise than an object:duration: { hide: 100 }
but the syntax is kind of messy. Might change this.
Accessibility/focus handling
Focus handling and accessibility has been improved. Tabbing/keyboard nav around interactive tooltips now works better.
Handling fallback for unsupported browsers
I believe this should be handled by the user, not the library.
The best way is to inline the tooltip content next to the reference element on old mobile & desktop browsers for interactive HTML popovers. For simple tooltips on desktop, manually set the title
property on the element.
Unsupported = <0.5% worldwide usage or nonstandard browsers.
TODO before final release
- Fix #193
- More configurable animations. Currently can be handled with
theme
but requires lots of boilerplate selectors. Would be nice to make it declarative as an option. - #174: Cooler animations someday?
- Finish writing tests. There's over 200, but I probably need to move back to a browser from Jest because there are too many things that need to be tested in a real browser using a layout engine.
- Package: sourcemaps, ES module (maybe, since there's not much to treeshake)
- fix: #249
- fix: remove problematic iOS code that autoclicks which sometimes causes doubles clicks
- Upgrade Popper.js dependency:
1.14.1
=>1.14.2
which has some nice fixes for positioning and bundle size😄 - Add new static method:
tippy.one()
for creating one single tooltip, it will return the tooltip instance directly - css: remove
pointer-events
on round arrow SVG if not interactive
- Upgrade Popper.js dependency:
1.13.0
=>1.14.1
- Adds
tippy.version
property to the module, and injects a banner at the top of unminified files - Better handling of focus/tabbing & interactivity
- fix #207
- fix #185: set
.tippy-popper
line-height to1.4
to prevent descender letters like "g" and "y" from being cut off depending on the font/browser/OS. Will not affect themes with custom line-heights because of lower specificity.
refresh deps
Watchers:77 |
Star:8298 |
Fork:468 |
创建时间: 2017-04-01 14:51:35 |
最后Commits: 1月前 |
许可协议:MIT |
分类:提示控件Tips / JavaScript开发 |
收录时间:2017-04-06 08:20:40 |
4aa8884
Compare
Fixes