v150 · CSS · Layout · demo

Product Focus

An e-commerce card grid where hovering a product zooms it with a spring animation. Unlike transform: scale() the zoomed card pushes its siblings — it occupies the space it needs in the layout flow. Scroll down to compare both behaviors side-by-side.

Chrome 150+ — animatable zoom. In older browsers the transition property has no effect on zoom; hover still works but without the animation.

Hover any card · notice how it pushes its neighbors · compare with the scale version below

zoom: 1.12 on hover (layout-affecting)
Apex Watch
€149
🎧
Arc Headphones
€289
📷
Lens Camera
€599
💻
Ultra Laptop
€1,199
🖱️
Flow Mouse
€79
⌨️
Key Keyboard
€119
zoom: hovered card grows and pushes its siblings — the layout reflows around it. Feels physical.
transform: scale(1.12) on hover (layout-frozen)
Apex Watch
€149
🎧
Arc Headphones
€289
📷
Lens Camera
€599
💻
Ultra Laptop
€1,199
🖱️
Flow Mouse
€79
⌨️
Key Keyboard
€119
transform: scale: card visually grows but its neighbours don't move — the grid layout is frozen. Feels like a layer floating above.
/* zoom IS layout-aware and now animatable */
.product-card {
  zoom: 1;
  transition: zoom 0.25s cubic-bezier(0.34, 1.56, 0.64, 1); /* spring */
}
.product-card:hover {
  zoom: 1.12; /* pushes siblings, reflows layout */
}

/* transform: scale is NOT layout-aware */
.product-card-scale {
  transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.product-card-scale:hover {
  transform: scale(1.12); /* siblings don't move */
}

see also

implementation reference

Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗