Minimalistic, small, positioning engine. Build for high-performance, minimal footprint and maximum control over positioning behavior.
Minimalistic, small, positioning engine. Build for high-performance, minimal footprint and maximum control over positioning behavior.
Ultra Tiny, Opinionated Positioning Engine
Nanopop is an ultra-tiny positioning engine. Hold up, isn't there PopperJS? Yeah - and PopperJS is great! But there are tons of features that, in most cases, you just might not need. This library is less than a third of PopperJS.
This library was originally part of pickr - now ported to TS with tests and a few updates / bug-fixes.
Heads up! This is the readme for v2 - if you're looking for the first version head over here (v1 is not maintained anymore).
Install via npm:
$ npm install nanopopInstall via yarn:
$ yarn add nanopopInclude directly via jsdelivr:
Using JavaScript Modules:
import {
reposition, // Core, stateless function to reposition an element
createPopper, // Stateful function which keeps track of your configuration
defaults, // A subset of nanopops options used as default values
version // Current version
} from 'https://cdn.jsdelivr.net/npm/nanopop/lib/nanopop.min.mjs'Index is fully tree-shakable! E.g. if you only use
repositionyou'll probably end up with less than 500B code!
reposition(
/* reference: */ document.querySelector('.btn'),
/* popper: */ document.querySelector('.dropdown'),
/* We're using the default options */
);⚠ The popper-element must have set
positiontofixed.
ℹ Because the default-
containerisdocument.documentElementyou might have to increase theheightof thehtmlelement to make room for your popper (e.g.html {height: 100vh;})
…Calling popper.update(...) or reposition(...) both returns a position-pair (For example te for Top-End) or null based on if it was possible to find a position for the popper without clipping it._
Tip: The returned position-pair is perfect for tool-tips to give them a little arrow!
position set to fixed.top and left values - you can use css / js to handle this case.No open issues yet, or sync has not completed.