사이드바 때문에 어긋난 div 중앙정렬, 포인터 이벤트로 창 위치까지 계산해 고친 개발자
- 작성자는 CSS place-items:center로 손쉽게 만든 중앙 정렬 div가 브라우저 사이드바(북마크 패널 등)가 열리면 창 정중앙이 아니라 좁아진 웹뷰 정중앙에 맞춰져 화면상 어긋나는 문제를 발견함
- window.innerWidth와 outerWidth 차이로 브라우저 크롬 너비를 구해 div를 이동시키는 방법을 썼지만, DevTools를 열면 좌우 양쪽에 UI가 생겨 어느 쪽이 얼마나 넓은지 구분할 수 없어 실패함
- 포인터 이벤트의 screenX와 clientX 값을 이용해 웹뷰가 화면 안에서 정확히 어디 위치하는지 계산하는 방식으로 문제를 해결함, Firefox는 뷰포트 위치를 API로 직접 제공하지만 Chromium은 제공하지 않아 확장 프로그램이 추정 후 포인터로 보정하는 방식을 씀
- 이 동작을 다른 사이트에도 적용해보려고 opt-in 방식 브라우저 확장 프로그램 'center, actually'를 만들어 GitHub에 공개함, 중앙 정렬된 요소를 자동으로 찾고 잘못 찾으면 사용자가 직접 지정할 수 있음
- 해커뉴스 댓글에서는 사이트가 브라우저 창의 물리적 위치를 알아내 콘텐츠를 재배치하는 방식에 반대하는 의견이 많았고, 실제로 사이드바 토글 시 콘텐츠가 가려지거나 화면 밖으로 밀려나는 버그가 재현됐다는 지적이 나옴
Hacker News 의견들
margin:0 auto는 예전부터 쓰던 주문 같은 거긴 한데 그건 가로만 되잖아, 사람들이 말하는 센터링 문제는 보통 가로세로 다 정중앙 맞추는 거임
사이트가 브라우저 창을 기준으로 div를 중앙 정렬한다는 발상 자체가 이상함, 그냥 뷰포트 기준이 당연한 거 아님? 웹사이트가 내 브라우저 창이 화면에서 어디 있는지 아는 것도 소름임
사이드바 열면 콘텐츠가 오른쪽으로 밀리는 게 싫어서 만든 건데, 화면 정중앙에 콘텐츠가 오게 하고 싶었을 뿐임
scrollbar-gutter 속성 쓰면 이 문제 어느 정도 해결되지 않나 싶음
이 사이트 자체가 마우스 스크롤을 이상하게 만들어놨던데 그건 왜 그런지 모르겠음
나는 JS 차단하고 봐서 북마크 패널 열어도 아무 변화가 없었음, 콘텐츠가 브라우저 UI에 가려질 수 있게 만드는 이유를 모르겠음
스크린샷이라도 있었으면 좋겠음, 파이어폭스에서 북마크 열었더니 처음엔 깜빡이고 반복해서 열고 닫으니까 중앙정렬된 버전이랑 사이드바에 가려진 버전이 동시에 렌더링되는 버그까지 봄
GIF 추가해놨음, 잠깐 움직이는 건 신경 안 쓰는데 반복 토글 후 잘못된 상태로 남는 건 확실히 버그고, 뷰포트 중앙정렬 원하면 이 확장 안 쓰면 됨
사이드바 열었더니 콘텐츠가 사이드바에 가려지거나 화면 오른쪽 밖으로 밀려나거나 둘 중 하나가 랜덤하게 발생함, 둘 다 틀린 동작이고 브라우저가 왜 사이트한테 이런 정보를 주는지 이해가 안 감
둘 다 의도한 버그 맞고, 목표는 그냥 사이트 제작자가 가로 중앙에 두려던 콘텐츠가 브라우저 UI 때문에 뷰포트 바뀌어도 화면상 물리적 위치는 그대로 유지되게 하려던 거였음
웹사이트는 VM처럼 생각해야지 호스트 상태를 이렇게 역엔지니어링하려고 하면 안 됨
이건 사실상 슬라이드오버 사이드바를 직접 만든 거고 재밌는 해킹이긴 한데 이런 건 브라우저가 담당해야 할 영역 아님?
사이드바 열어놓고 쓰는 사람은 콘텐츠가 가려지는 걸 원해서 그러는 건데, 창을 타일링해서 쓰는 사용자는 사이트 제작자 의도한 미학이 깨진다니 이게 뭔 소리인지
'브라우저가 사이드바 추가한 것'이랑 '옛날부터 창 크기 조절 가능했던 것' 사이에 본질적 차이가 뭐가 있는지 모르겠음