css-box-model
📦
Get accurate and well named CSS Box Model information about a Element
.
Any time you are using Element.getBoundingClientRect()
you might want to consider using css-box-model
instead to get more detailed box model information.
Usage
// @flow; const el: HTMLElement = document;const box: BoxModel = ; // profit
Installation
## yarn yarn add css-box-model # npm npm install css-box-model --save
CSS Box Model
TheBox type | Composition |
---|---|
Margin box | margin + border + padding + content |
Border box | border + padding + content |
Padding box | padding + content |
Content box | content |
This our returned BoxModel
:
; // Supporting types // This is an extension of DOMRect and ClientRect; ; ;
API
getBox
(el: HTMLElement) => BoxModel
Use getBox
to return the box model for an element
withScroll
(original: BoxModel, scroll?: Position = getWindowScroll()) => BoxModel
This is useful if you want to know the box model for an element relative to a page
const el: HTMLElement = document;const box: BoxModel = ;const withScroll: BoxModel = ;
You are welcome to pass in your own scroll
. By default we we use the window scroll:
const getWindowScroll = : x: windowpageXOffset y: windowpageYOffset;
calculateBox
(borderBox: AnyRectType, styles: CSSStyleDeclaration) => BoxModel
This will do the box model calculations without needing to read from the DOM. This is useful if you have already got a ClientRect
/ DOMRect
and a CSSStyleDeclaration
as then we can skip computing these values.
const el: HTMLElement = document;const borderBox: ClientRect = el;const styles: CSSStyleDeclaration = window; const box: BoxModel = ;
AnyRectType
allows for simple interoperability with any rect type
type AnyRectType = ClientRect | DOMRect | Rect | Spacing;
createBox
({ borderBox, margin, border, padding }: CreateBoxArgs) => BoxModel
Allows you to create a BoxModel
by passing in a Rect
like shape (AnyRectType
) and optionally your own margin
, border
and or padding
.
type CreateBoxArgs = | borderBox: AnyRectType margin?: Spacing border?: Spacing padding?: Spacing|;
const borderBox: Spacing = top: 10 right: 100 left: 20 bottom: 80;const padding: Spacing = top: 10 right: 20 left: 20 bottom: 10; const box: BoxModel = ;
Utility API
Functions to help you interact with the objects we provide
getRect
(spacing: AnyRectType) => Rect
Given any Rect
like shape, return a Rect
. Accepts any object that has top
, right
, bottom
and right
(eg ClientRect
, DOMRect
);
const spacing: Spacing = top: 0 right: 100 bottom: 50 left: 50; const rect: Rect = ; console; /*{ top: 0, right: 100, bottom: 50, left: 50, width: 100, height: 50, x: 0, y: 0, center: { x: 50, y: 50 },}*/
expand
Used to expand a Spacing
Spacing;
const original: Spacing = top: 10 left: 11 right: 21 bottom: 22; const expandBy: Spacing = top: 1 left: 2 right: 3 bottom: 4; const expanded: Spacing = ; console; /*{ // pulled back top: 8, left: 8 // pushed forward bottom: 22, right: 22,}*/
shrink
Used to shrink a Spacing
Spacing;
const original: Spacing = top: 10 left: 10 right: 20 bottom: 20; const shrinkBy: Spacing = top: 2 left: 2 right: 2 bottom: 2; const smaller: Spacing = ; console; /*{ // pushed forward top: 12, left: 12 // pulled back bottom: 18, right: 18,}*/