---
title: "Element enters from `scale(0)` (lint/scale-zero-entry)"
description: "lint/scale-zero-entry: Nothing in the physical world appears from zero size; `scale(0)` entrances look like a pop and draw the eye too hard."
canonical: https://void-design.vercel.app/rules/lint/scale-zero-entry
lastModified: 2026-09-16
---

# Element enters from `scale(0)`

`lint/scale-zero-entry` · severity **warn** · category Lint · detected by `void lint` and `void audit`

## Why it matters

Nothing in the physical world appears from zero size; `scale(0)` entrances look like a pop and draw the eye too hard. Starting from ~0.95 with opacity reads as the element arriving.

## How to fix it

Start from `scale: 0.95` (0.9 for small popovers) combined with `opacity: 0`, using an ease-out curve.

## Example

```tsx
<m.div initial={{ opacity: 0, scale: 0.95 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.18, ease: [0.16, 1, 0.3, 1] }} />
```

## References

- https://emilkowal.ski/ui/great-animations

## More lint rules

`void lint` reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.

- `dangerously-set-jsonld-unescaped` JSON-LD injected with `JSON.stringify` without escaping `<` — [lint/dangerously-set-jsonld-unescaped](https://void-design.vercel.app/rules/lint/dangerously-set-jsonld-unescaped)
- `transition-all` `transition: all` / `transition-all` — [lint/transition-all](https://void-design.vercel.app/rules/lint/transition-all)
- `animate-layout-prop` Animation of layout properties (width/height/top/left/margin/padding) — [lint/animate-layout-prop](https://void-design.vercel.app/rules/lint/animate-layout-prop)
- `outline-none-no-replacement` Focus outline removed without a visible replacement — [lint/outline-none-no-replacement](https://void-design.vercel.app/rules/lint/outline-none-no-replacement)
- `scroll-timeline-no-fallback` Base rule hides an element; only an `@supports (animation-timeline: …)` block undoes it — [lint/scroll-timeline-no-fallback](https://void-design.vercel.app/rules/lint/scroll-timeline-no-fallback)
- `ease-in-enter` `ease-in` used for an entrance or hover — [lint/ease-in-enter](https://void-design.vercel.app/rules/lint/ease-in-enter)
- `long-ui-duration` UI feedback transition longer than 500ms — [lint/long-ui-duration](https://void-design.vercel.app/rules/lint/long-ui-duration)
- `no-reduced-motion` Animations present but no `prefers-reduced-motion` handling anywhere — [lint/no-reduced-motion](https://void-design.vercel.app/rules/lint/no-reduced-motion)

Detected by `void lint` and `void audit`. Explain it in a terminal: `void rules lint/scale-zero-entry`
