useDimensions
useDimensions
is a custom hook that measures dimensions of the referenced
element based on its box-model.
Import
import { useDimensions } from '@hover/blueprint'
Return value
This hook returns an object with the properties marginBox
, paddingBox
,
borderBox
, contentBox
, border
, padding
, and margin
.
Each of these properties contains a nested object which provides values respective to that property:
Value: | Contents: |
---|---|
marginBox | top, right, bottom, left, width, height, x, y, center (x, y) |
borderBox | top, right, bottom, left, width, height, x, y, center (x, y) |
paddingBox | top, right, bottom, left, width, height, x, y, center (x, y) |
contentBox | top, right, bottom, left, width, height, x, y, center (x, y) |
border | top, right, bottom, left |
padding | top, right, bottom, left |
margin | top, right, bottom, left |
Usage
function example() { const elementRef = useRef() const dimensions = useDimensions(elementRef) return ( <Box ref={elementRef} color='white' width='fit-content' bg='blue.700' p={4}> <Heading> <code>borderBox</code> dimensions </Heading> <List> <ListItem> The Width: {dimensions && dimensions.borderBox.width} </ListItem> <ListItem> The x coordinate: {dimensions && dimensions.borderBox.x} </ListItem> </List> </Box> )}
With observe
Parameter
With the second parameter set to true
, the hook will attach the resize
and
scroll
events to the window object. This will recalculate the reference
element's dimensions on scroll or resize of the page.
function example() { const elementRef = useRef() const dimensions = useDimensions(elementRef, true) return ( <> <Textarea ref={elementRef} value="Resize this field's height, then either scroll or resize the page." /> <Box>Changing height: {dimensions && dimensions.borderBox.height}</Box> </> )}
Parameters
Parameter | Type | Description |
---|---|---|
ref | RefObject<HTMLElement> | Reference to the element you want to measure |
observe (optional) | boolean | If set to true, the resize and scroll events will be attached to the window and update the dimensions on each event |