Summary
LiquidGlass always applies
transform: translate(calc(-50% + x), calc(-50% + y)) …
and defaults to
when not provided.
This effectively anchors the component’s center to the given point and makes it hard to position the element in normal document flow or by top-left coordinates.
Passing globalMousePos={{x:0,y:0}} and mouseOffset={{x:0,y:0}} removes motion, but placement remains “off” due to the enforced center anchoring.
Environment
- liquid-glass-react: 1.1.1
- React: 19.1.1
- Vite: 7.1.2
- Browser: Chrome (latest) [also reproducible elsewhere]
Reproduction
Render LiquidGlass without explicit style.top/left and set mouse props to zeros:
<LiquidGlass
cornerRadius={20}
elasticity={0}
globalMousePos={{ x: 0, y: 0 }}
mouseOffset={{ x: 0, y: 0 }}
>
<h1>Example</h1>
</LiquidGlass>
The element appears “badly placed” (unexpectedly centered/offset) within the layout.
Even with explicit zero motion, computed styles show:
transform: translate(calc(-50% + 0px), calc(-50% + 0px)) scale(1);
top: 50%;
left: 50%;
Expected Behavior
Ability to opt out of the built-in centering so the component can:
- Participate in normal flow, or
- Be positioned by its top-left corner (via parent CSS) without the
-50% translation.
Actual Behavior
Component enforces center anchoring:
- Defaults to
position: relative, top: 50%, left: 50% when not set.
- Always includes
translate(calc(-50% + x), calc(-50% + y)) in its inline transform.
As a result, the component is difficult to place precisely unless you adopt the center-anchoring model (e.g., position: fixed; top: 50%; left: 50%).
Code References
-
Build of transform with translate(-50%, -50%) + elastic offsets:
node_modules/liquid-glass-react/dist/index.js:431
-
Defaulting of position and top/left to 50%:
node_modules/liquid-glass-react/dist/index.js:434-441
Workarounds
- Use
style={{ position: "fixed", top: "50%", left: "50%" }} to anchor center to viewport.
- Or wrap
LiquidGlass in a parent position: relative container and give LiquidGlass position: absolute; top: 50%; left: 50% to center within that container.
- To eliminate motion only, set
elasticity={0} (but centering remains).
Proposed API Improvements
Add a prop to disable internal centering and position management, for example:
Alternatively:
center?: boolean (default true) — control the -50% centering behavior explicitly.
anchorOrigin?: "center" | "top-left" | { x: string; y: string } — more precise control.
Also:
- Document clearly that without these props, the component centers itself and expects an anchor at top/left.
This change would preserve the current default behavior while letting consumers integrate LiquidGlass into varied layouts without fighting the enforced center anchoring.
Summary
LiquidGlassalways appliesand defaults to
when not provided.
This effectively anchors the component’s center to the given point and makes it hard to position the element in normal document flow or by top-left coordinates.
Passing
globalMousePos={{x:0,y:0}}andmouseOffset={{x:0,y:0}}removes motion, but placement remains “off” due to the enforced center anchoring.Environment
Reproduction
Render
LiquidGlasswithout explicitstyle.top/leftand set mouse props to zeros:The element appears “badly placed” (unexpectedly centered/offset) within the layout.
Even with explicit zero motion, computed styles show:
Expected Behavior
Ability to opt out of the built-in centering so the component can:
-50%translation.Actual Behavior
Component enforces center anchoring:
position: relative,top: 50%,left: 50%when not set.translate(calc(-50% + x), calc(-50% + y))in its inline transform.As a result, the component is difficult to place precisely unless you adopt the center-anchoring model (e.g.,
position: fixed; top: 50%; left: 50%).Code References
Build of transform with
translate(-50%, -50%) + elastic offsets:node_modules/liquid-glass-react/dist/index.js:431Defaulting of position and top/left to 50%:
node_modules/liquid-glass-react/dist/index.js:434-441Workarounds
style={{ position: "fixed", top: "50%", left: "50%" }}to anchor center to viewport.LiquidGlassin a parentposition: relativecontainer and giveLiquidGlassposition: absolute; top: 50%; left: 50%to center within that container.elasticity={0}(but centering remains).Proposed API Improvements
Add a prop to disable internal centering and position management, for example:
managePosition?: boolean(defaulttrue)false, do not set defaultposition/top/left, and omit thetranslate(-50%, -50%)part (apply only elastic translation fromglobalMousePos/mouseOffset).Alternatively:
center?: boolean(defaulttrue) — control the-50%centering behavior explicitly.anchorOrigin?: "center" | "top-left" | { x: string; y: string }— more precise control.Also:
This change would preserve the current default behavior while letting consumers integrate
LiquidGlassinto varied layouts without fighting the enforced center anchoring.