Skip to content
HN On Hacker News ↗

we finally learned to center a div, then browsers added sidebars

▲ 188 points 164 comments by seg6 3w ago HN discussion ↗

Pangram verdict · v3.3

We believe that this text is a mix of AI and human-written content.

51 %

AI likelihood · overall

Mixed
56% human-written 44% AI-generated
SEGMENTS · HUMAN 1 of 6
SEGMENTS · AI 2 of 6
WORD COUNT 334
PEAK AI % 84% · §4
Analyzed
Aug 4
backend: pangram/v3.3
Segments scanned
6 windows
avg 56 words each
Distribution
56 / 44%
human / AI fraction
Verdict
Mixed
Pangram v3.3

Article text · 334 words · 6 segments analyzed

Human AI-generated
§1 Human · 27%

Centering a div used to require this little ritual: .thing { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } These days, it is almost disappointingly easy: body { display: grid; min-height: 100dvh; place-items: center; } I used that for the .site div you’re reading.

§2 Mixed · 64%

It looked centered until I opened it in a browser with the sidebar visible. The .site div was still perfectly centered, just inside the wrong rectangle. I figured the fix would be simple enough: JavaScript knows the width of both the webview and the browser window.

§3 Mixed · 37%

window.innerWidth // the webview window.outerWidth // the whole browser window const browserChrome = window.outerWidth - window.innerWidth; With the sidebar on the left, I could move .site back by half of that difference: const shift = -browserChrome / 2; .site { translate: var(--window-center-shift, 0px); } That worked, right up until I opened DevTools.

§4 AI · 84%

devtools ruins the easy fix Mine is docked on the right, so the width difference now included browser UI on both sides. It gave me the total, but no way to tell how that total was split. What finally gave me the missing coordinate was the pointer.

§5 Mixed · 31%

A trusted pointer event knows where it is on the screen and where it is inside the webview, which is enough to locate the webview inside the window: const viewportLeft = event.screenX - event.clientX * scale; const viewportRight = viewportLeft + innerWidth * scale; const left = viewportLeft - window.screenX; const right = window.screenX + outerWidth - viewportRight; const shift = (right - left) / (2 * scale); Firefox exposes the same viewport position directly.

§6 AI · 75%

Chromium does not, so this site starts with the left-sidebar estimate and corrects it as soon as the pointer enters the page. center, actually I wanted to try the same fix on pages I do not control, so I made center, actually. It tries to find the centered element itself; if it guesses wrong, I can pick one. The demo is the simplest place to see the difference.