피드로 돌아가기
Under the Hood: Drag, Touch, and CSS Cascade in a Real Diff UI
Dev.toDev.to
Frontend

Computed Style 기반 레이아웃 대응 및 CSS Specificity 최적화

Under the Hood: Drag, Touch, and CSS Cascade in a Real Diff UI

Bonzai2Carn2026년 6월 25일6intermediate

Context

반응형 Diff UI 구현 중 Window Width 기반의 단순 분기 처리가 런타임 리사이징 및 CSS 우선순위 충돌로 인해 오작동하는 문제 발생. 특히 가시성 제어 시스템과 레이아웃 헬퍼 클래스 간의 CSS Specificity 충돌로 인한 UI 렌더링 오류 직면.

Technical Solution

  • getComputedStyle을 통한 런타임 flexDirection 확인으로 Window Width 의존성을 제거한 Layout-aware 드래그 로직 설계
  • Optional Chaining과 Nullish Coalescing을 활용한 Mouse 및 Touch Event 좌표 추출 로직의 단일화
  • flex-basis 속성을 활용하여 Row/Column 모든 방향에서 동일하게 작동하는 flex: 0 0 N% 기반의 동적 크기 조정 구조 도입
  • touchmove 이벤트 리스너를 Element가 아닌 Document 레벨에 등록하여 포인터 이탈 시에도 드래그 연속성을 보장하는 설계
  • { passive: false } 옵션을 명시하여 preventDefault() 호출을 가능케 함으로써 브라우저 기본 스크롤 동작을 제어
  • .view-panel.diff-layout과 같이 Multi-class Selector를 사용하여 Specificity 점수를 높임으로써 가시성 제어 로직과의 충돌 해결

- 레이아웃 분기 시 `window.innerWidth` 대신 `getComputedStyle`을 사용하여 CSS의 최종 결정 상태를 참조할 것 - 가시성(display)을 제어하는 클래스와 레이아웃(direction)을 제어하는 클래스의 Specificity를 분리하여 설계할 것 - Touch Event 구현 시 드래그 핸들 이탈 가능성을 고려하여 Move/End 이벤트는 Document 전역에 바인딩할 것 - 레이아웃 헬퍼 클래스 내에서 `display` 속성을 정의하여 기존 가시성 제어 시스템을 덮어쓰지 않도록 주의할 것

원문 읽기