How to Fix Roblox GUI Scaling — Complete Roblox Guide
Last updated: 2026-06-20 · 654 words · 3 min read
GUI scaling is the single most reported issue on Roblox DevForum. A panel that fits perfectly on your 1440p monitor turns into a tiny postage stamp on a phone — or worse, overflows the screen on an iPad. The fix is mechanical: understand UDim2, prefer Scale over Offset, anchor from the center, and verify on every device emulator before you ship. This guide walks through every rule with copy-paste Luau, plus the three traps that catch most beginners.
Why GUIs break on different screens
A position of UDim2.new(0, 100, 0, 50) means "100 pixels from the left, 50 pixels from the top" — regardless of screen size. On a 4K monitor that is barely off the corner; on a phone that is a third of the way across the screen. UDim2 stores two numbers per axis: a Scale (percentage of parent) and an Offset (raw pixels). Most beginners build with Offset because it feels predictable in Studio's emulator, then ship a UI that breaks the moment a real player loads it. The mental model that fixes everything: think in percentages first, pixels only for borders. If a button is supposed to take half the screen width, write {0.5, 0} — not {0, 720}.
The safe default rule
Use Scale (the first number in each pair) for layout — Position, Size, anchors. Use Offset (the second number) only for fixed-pixel concerns like a 1-pixel border, a 4-pixel padding, or an icon that must stay 32×32 regardless of device. The rule of thumb: if you cannot answer "why this exact pixel count" in one sentence, the answer is Scale.
local frame = Instance.new("Frame")
-- 50% of parent width, 50% of parent height, no offset
frame.Size = UDim2.new(0.5, 0, 0.5, 0)
-- Centered on the screen
frame.Position = UDim2.new(0.5, 0, 0.5, 0)
frame.AnchorPoint = Vector2.new(0.5, 0.5)
frame.Parent = screenGuiAnchorPoint keeps things centered
Set AnchorPoint to (0.5, 0.5) and Position to (0.5, 0, 0.5, 0) to center any element without manual math. AnchorPoint moves the origin of the element to the named point — (0, 0) is top-left, (1, 1) is bottom-right, (0.5, 0.5) is the center. Without an AnchorPoint set, Position is measured from the element's top-left corner, which means "center the panel" requires you to subtract half its size manually. AnchorPoint removes that subtraction. This single change is the most common fix for "my menu drifts toward the bottom-right on bigger screens."
UISizeConstraint for min/max bounds
Scale alone has no floor. On a tiny screen your 50%-wide button might shrink to 120 px, which is too small to tap. Add a UISizeConstraint with a MinSize to enforce a hard floor (and MaxSize to prevent comically wide buttons on ultrawide monitors). Pair it with Scale-based Size — Scale describes intent, the constraint enforces playability.
Three common scaling traps
Trap 1: building everything in Offset because Studio's default canvas is 1024×768. Trap 2: forgetting that ScreenGui has an IgnoreGuiInset property — if you do not set it to true, the top-left of the screen has 36 px of phantom space reserved for the Roblox top bar. Trap 3: using TextScaled = true on every label. TextScaled fits the largest text the box can hold, which means 12-character labels render at a different size than 4-character labels. Use TextSize with a UITextSizeConstraint instead, or set TextScaled = true plus TextSize as a max.
Step-by-step summary
- 1
Replace hard offsets with scale
Audit every Size/Position pair and move layout values into the Scale component. Offsets stay only for borders, padding, and fixed-pixel icons.
- 2
Anchor from the center
Set AnchorPoint (0.5, 0.5) on every centered panel and button so they stay put when the parent resizes.
- 3
Constrain aspect ratios on icons
Add UIAspectRatioConstraint to any ImageLabel or square button so circles stay circular on every device.
- 4
Floor your touch targets
Add UISizeConstraint with MinSize 44×44 px on every button — this is the WCAG/Apple/Google touch-target floor.
- 5
Test on all devices
Use the device preview in Roblox GUI Maker or Studio's emulator (View → Device → iPhone 14, iPad Pro, 1080p).
FAQ
Should I ever use Offset instead of Scale?
Yes — for borders, separators, padding, and icons whose size must not stretch. Offset is the right choice when the visual element measures in pixels in the real world (a 1-pixel divider, a 32-pixel icon).
Why does TextScaled make my UI look inconsistent?
TextScaled fits the largest text that fits the TextLabel. A label with "OK" renders larger than a label with "Confirm Purchase" — same box, different sizes. Use TextSize with a UITextSizeConstraint when consistent typography matters.
Do I need to test on every Roblox device?
Three is enough: a phone profile (iPhone 14 or similar), a tablet profile (iPad), and a desktop 1080p. Most scaling bugs surface in one of those three.