use-visual-viewport
Track the visual viewport and on-screen keyboard.
| Package | @vizejs/composable/use-visual-viewport |
| Own the source | vize lib pull composable:use-visual-viewport |
| Runtime exports | useVisualViewport |
| Gzip budget | 2048 B |
Usage
import { useVisualViewport } from "@vizejs/composable/use-visual-viewport";
Runtime contract
| Utility | Category | Stability | SSR | Hydration | Cleanup | Targets | Host globals | Uses |
|---|---|---|---|---|---|---|---|---|
useVisualViewport |
dom | experimental | deterministic-fallback | stable | reactive-scope | web, desktop | window |
tryOnScopeDispose |
API
useVisualViewport
Track the visual viewport and on-screen keyboard. On mobile browsers the visual viewport shrinks (or scrolls) when a virtual keyboard opens while the layout viewport stays put; keyboardHeight is the occluded bottom area (innerHeight - height - offsetTop), or the VirtualKeyboard API rectangle when overlaysContent is enabled. Pin toolbars above the keyboard with bottom: calc(var(--kb, 0px)) bound to it. Server rendering reports zeros (scale 1) and attaches nothing; inside a component the host attaches after mount, so hydration renders the same zeros first. Listeners (resize, scroll, geometrychange) are passive and removed with the owning reactive scope.
function useVisualViewport(options: UseVisualViewportOptions = {}): VisualViewportControls
const { keyboardHeight, keyboardOpen } = useVisualViewport();
const toolbarStyle = computed(() => ({ bottom: `${keyboardHeight.value}px` }));
Types
VisualViewportHost
Structural VisualViewport observed by useVisualViewport.
| Member | Type | Description |
|---|---|---|
width |
number |
Visible width in CSS pixels. |
height |
number |
Visible height in CSS pixels (shrinks when an on-screen keyboard overlays the page). |
offsetTop |
number |
Offset of the visual viewport from the layout viewport's top edge. |
offsetLeft |
number |
Offset of the visual viewport from the layout viewport's left edge. |
scale |
number |
Pinch-zoom scale factor. |
VirtualKeyboardHost
Structural VirtualKeyboard API (navigator.virtualKeyboard).
| Member | Type | Description |
|---|---|---|
overlaysContent |
boolean |
Whether the keyboard overlays content instead of resizing the viewport. |
boundingRect |
{ readonly height: number } |
Keyboard rectangle in CSS pixels. |
VisualViewportWindowHost
Window-like capability read by useVisualViewport.
| Member | Type | Description |
|---|---|---|
innerHeight |
number |
Layout viewport height. |
visualViewport? |
VisualViewportHost | null |
Visual viewport, when the engine supports it. |
navigator? |
object |
Navigator that may expose the VirtualKeyboard API as virtualKeyboard. |
UseVisualViewportOptions
Options for useVisualViewport.
| Member | Type | Description |
|---|---|---|
keyboardThreshold? |
number |
Minimum occluded height (CSS px) reported as an open keyboard, filtering browser toolbars that collapse while scrolling. |
overlaysContent? |
boolean |
Opt in to navigator.virtualKeyboard.overlaysContent = true (Chromium) so the keyboard height comes from the VirtualKeyboard API and the layout viewport no longer resizes. The previous value is restored on cleanup. |
host? |
MaybeRefOrGetter<VisualViewportWindowHost | null | undefined> |
Reactive window capability for alternate runtimes and tests. |
VisualViewportControls
Reactive viewport geometry returned by useVisualViewport.
| Member | Type | Description |
|---|---|---|
width |
Readonly<Ref<number>> |
Visual viewport width (0 on the server). |
height |
Readonly<Ref<number>> |
Visual viewport height (0 on the server). |
offsetTop |
Readonly<Ref<number>> |
Visual viewport top offset within the layout viewport. |
offsetLeft |
Readonly<Ref<number>> |
Visual viewport left offset within the layout viewport. |
scale |
Readonly<Ref<number>> |
Pinch-zoom scale (1 on the server). |
keyboardHeight |
Readonly<Ref<number>> |
Height of the bottom area hidden by an on-screen keyboard, in CSS px. |
keyboardOpen |
ComputedRef<boolean> |
Whether keyboardHeight exceeds keyboardThreshold. |
isSupported |
Readonly<Ref<boolean>> |
Whether a VisualViewport (or VirtualKeyboard) capability is attached. |