1 |
|
2 | title: "DOM"
|
3 | layout: detail
|
4 | section: components
|
5 | excerpt: "Provides commonly-used utilities for inspecting, traversing, and manipulating the DOM."
|
6 | path: /catalog/dom/
|
7 | -->
|
8 |
|
9 | # DOM
|
10 |
|
11 | MDC DOM provides commonly-used utilities for inspecting, traversing, and manipulating the DOM.
|
12 |
|
13 | Most of the time, you shouldn't need to depend on `mdc-dom` directly. It is useful however if you'd like to write custom components that follow MDC Web's pattern and elegantly integrate with the MDC Web ecosystem.
|
14 |
|
15 | ## Installation
|
16 |
|
17 | ```
|
18 | npm install @material/dom
|
19 | ```
|
20 |
|
21 | ## Basic Usage
|
22 |
|
23 | ```js
|
24 | import * as ponyfill from '@material/dom/ponyfill';
|
25 | ```
|
26 |
|
27 | > See [Importing the JS component](../../docs/importing-js.md) for more information on how to import JavaScript.
|
28 |
|
29 | ## Ponyfill Functions
|
30 |
|
31 | The `ponyfill` module provides the following functions:
|
32 |
|
33 | Function Signature | Description
|
34 | --- | ---
|
35 | `closest(element: Element, selector: string) => ?Element` | Returns the ancestor of the given element matching the given selector (which may be the element itself if it matches), or `null` if no matching ancestor is found.
|
36 | `matches(element: Element, selector: string) => boolean` | Returns true if the given element matches the given CSS selector.
|
37 | `estimateScrollWidth(element: Element) => number` | Returns the true optical width of the element if visible or an estimation if hidden by a parent element with `display: none;`.
|
38 |
|
39 | ## Event Functions
|
40 |
|
41 | External frameworks and libraries can use the following event utility methods.
|
42 |
|
43 | Method Signature | Description
|
44 | --- | ---
|
45 | `util.applyPassive(globalObj = window) => object` | Determine whether the current browser supports passive event listeners
|
46 |
|
47 | ## Focus Trap
|
48 |
|
49 | The `FocusTrap` utility traps focus within a given element. It is intended for usage from MDC-internal
|
50 | components like dialog and modal drawer.
|
51 |
|
52 | Method Signature | Description
|
53 | --- | ---
|
54 | `trapFocus() => void` | Traps focus in the root element. Also focuses on `initialFocusEl` if set; otherwise, sets initial focus to the first focusable child element.
|
55 | `releaseFocus() => void` | Releases focus from the root element. Also restores focus to the previously focused element.
|
56 |
|
57 | ## Announce
|
58 |
|
59 | The `announce` utility file contains a single helper method for announcing a message via an `aria-live` region. It is intended for usage from MDC-internal components.
|
60 |
|
61 | Method Signature | Description
|
62 | --- | ---
|
63 | `announce(message: string, options?: AnnouncerMessageOptions) => void` | Announces the message via an `aria-live` region with the given options. `AnnouncerMessageOptions.priority` defaults to polite and `AnnouncerMessageOptions.ownerDocument` defaults to the global document.
|
64 |
|
65 |
|
66 | ## Keyboard
|
67 |
|
68 | The `keyboard` utility provides helper methods for normalizing `KeyboardEvent` keys across browsers. It is intended for usage from MDC-internal components.
|
69 |
|
70 | Method Signature | Description
|
71 | --- | ---
|
72 | `normalizeKey(evt: KeyboardEvent) => string` | Returns a normalized string derived from `KeyboardEvent`'s `keyCode` property to be standard across browsers.
|
73 | `isNavigationEvent(evt: KeyboardEvent) => boolean` | Returns `true` if the event is a navigation event (Page Up, Page Down, Home, End, Left, Up, Right, Down).
|
74 |
|
75 | ## Mixins
|
76 |
|
77 | The module provides a single SASS mixin which helps improves a DOM element's UX for high-contrast mode users.
|
78 |
|
79 | Mixin | Description
|
80 | --- | ---
|
81 | `transparent-border` | Emits necessary layout styles to set a transparent border around an element without interfering with the rest of its component layout. The border is only visible in high-contrast mode. The target element should be a child of a relatively positioned top-level element (i.e. a ::before pseudo-element).
|