Align DOM Node Flexibly
Clone or download
Latest commit 3538e0d Sep 2, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples add ignoreShake to skip re-align Jun 21, 2018
tests clean test case May 31, 2018
.editorconfig 1.0.0 Jan 12, 2015
.gitignore bump May 26, 2017
.travis.yml Merge branch 'viewport-adjust' into master May 16, 2017 bump Jun 4, 2018 Added Jan 9, 2017 Update Sep 2, 2018
index.js fix ci May 27, 2017
package.json Bump 1.8.0 Jun 25, 2018


align source html element with target html element flexibly.

NPM version build status Test coverage gemnasium deps npm download





  • support IE9+ chrome firefox
  • support align points and offset
  • support auto adjust according to visible area

Online Demo


import domAlign from 'dom-align';

// use domAlign
// sourceNode's initial style should be position:absolute;left:-9999px;top:-9999px;

const alignConfig = {
  points: ['tl', 'tr'],        // align top left point of sourceNode with top right point of targetNode
  offset: [10, 20],            // the offset sourceNode by 10px in x and 20px in y,
  targetOffset: ['30%','40%'], // the offset targetNode by 30% of targetNode width in x and 40% of targetNode height in y,
  overflow: { adjustX: true, adjustY: true }, // auto adjust position when sourceNode is overflowed

domAlign(sourceNode, targetNode, alignConfig);


void domAlign(source: HTMLElement, target: HTMLElement, alignConfig: Object):Function

alignConfig object details

name type description
points String[2] move point of source node to align with point of target node, such as ['tr','cc'], align top right point of source node with center point of target node. point can be 't'(top), 'b'(bottom), 'c'(center), 'l'(left), 'r'(right)
offset Number[2] offset source node by offset[0] in x and offset[1] in y. If offset contains percentage string value, it is relative to sourceNode region.
targetOffset Number[2] offset target node by offset[0] in x and offset[1] in y. If targetOffset contains percentage string value, it is relative to targetNode region.
overflow Object: `{ adjustX: true, adjustY: true }` if adjustX field is true, then will adjust source node in x direction if source node is invisible. if adjustY field is true, then will adjust source node in y direction if source node is invisible.
useCssRight Boolean whether use css right instead of left to position
useCssBottom Boolean whether use css bottom instead of top to position
useCssTransform Boolean whether use css transform instead of left/top/right/bottom to position if browser supports. Defaults to false.


npm install
npm start



Test Case

npm test
npm run chrome-test


npm run coverage

open coverage/ dir


dom-align is released under the MIT license.