Snapping automatically aligns elements to grid lines, guides, canvas edges, and other elements when moving or resizing. It ensures pixel-perfect positioning and consistent spacing.
When snapping is enabled, a magnet icon appears highlighted in the toolbar. When disabled, the icon is gray.
Elements can snap to multiple targets:
| Target | Description | Visual Indicator |
|---|---|---|
| Grid lines | Major and minor grid intersections | Grid line highlights |
| Guides | User-created alignment guides | Guide line highlights cyan |
| Canvas edges | Top, bottom, left, right canvas boundaries | Edge line highlights |
| Canvas center | Horizontal and vertical center of canvas | Crosshair appears |
| Element edges | Bounding box edges of other elements | Smart guide appears (magenta) |
| Element centers | Horizontal and vertical centers of other elements | Smart guide with center marker |
Configure which snap targets are active in Edit → Preferences → Snapping:
Snap tolerance defines how close an element must be to a snap target before snapping occurs. Measured in pixels at 100% zoom.
Adjustable in preferences:
Higher tolerance values make snapping "stickier" but can interfere with fine positioning. Lower values require more precision but give greater control.
Pixel snapping rounds element positions to whole pixels, preventing antialiasing blur caused by subpixel positioning. This is critical for sharp UI elements and icons.
When to use pixel snapping:
When to disable pixel snapping:
Smart guides appear automatically when dragging elements and show alignment with nearby objects. They provide visual feedback for relative positioning.
Smart guide indicators:
Snapping behavior varies by operation:
| Operation | Snap Behavior |
|---|---|
| Move (drag) | Snaps element edges and center to all targets |
| Resize (corner drag) | Snaps edges to grid, guides, and canvas edges |
| Rotate | No snapping (rotation is continuous) |
| Scale (with modifier) | Maintains snap to origin point |
When moving multiple selected elements, snapping uses the bounding box of the entire selection:
Elements won't snap:
Snapping is too aggressive: