대시보드 파트너 카드 우측 공백을 그리드 설정 한 줄로 해결
목차
auto-fill을 auto-fit으로 바꾼 하루
대시보드 파트너 카드 영역이 카드 2~3장만 떴을 때 우측에 휑한 공백이 남는다는 제보를 받음. 원인 찾는 데 30분, 고치는 데 한 줄. 늘 그렇듯이.
증상부터 정리
- 파트너 수 많을 때(8장+): 멀쩡하게 잘 깔림
- 파트너 수 적을 때(2~3장): 카드는 좌측에 쪼그라들고 우측이 통째로 빔
- 화면 줄여도 카드 폭은 안 늘어나고 빈 트랙만 남는 느낌
처음엔 flex 정렬 문제인 줄 알고 justify-content 만지작거렸는데 grid 컨테이너였음. 한참 헤맴.
진짜 원인: auto-fill의 동작
Grid에서 repeat(auto-fill, minmax(280px, 1fr)) 을 쓰면 컨테이너 폭이 허용하는 만큼 빈 트랙까지 미리 다 만들어둠. 카드가 부족해도 그 자리는 비워둔 채로 남음. 자리를 잡아두는 게 의도된 동작이라, 페이지네이션처럼 "곧 채워질 슬롯"이 있는 케이스라면 맞는데, 우리 대시보드는 카드가 늘어났다 줄었다 하는 영역이라 안 맞았음.
auto-fit 으로 바꾸면 빈 트랙을 폭 0으로 접어버려서 살아있는 카드들이 남은 공간을 1fr씩 나눠 가짐. 결과적으로 카드 2장만 있어도 가로로 쭉 늘어나면서 영역이 꽉 참.
// before
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
// after
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
차이를 표로 정리하면:
| 항목 | auto-fill | auto-fit |
|---|---|---|
| 빈 트랙 | 유지 | 폭 0으로 접힘 |
| 카드 적을 때 | 좌측 정렬, 우측 공백 | 가로로 균등 분배 |
| 카드 많을 때 | 동일 | 동일 |
| 슬롯 보존 의도 | 있음 | 없음 |
건드린 파일이 셋이나 된 이유
소스맵 따라가니 빌드된 통합 css가 한 곳, 대시보드 전용 scss가 한 곳, 글로벌 카드 그리드 mixin이 한 곳에 있었음. mixin만 고치면 다른 페이지도 같이 바뀌니까 위험. 그래서 mixin은 auto-fit | auto-fill 인자로 받게 살짝 일반화하고, 대시보드만 auto-fit 으로 호출하도록 했음. 통합 css는 빌드 산출물이라 손댈 필요 없었는데, 캐시 때문에 한 번 강제로 다시 떨어뜨려야 반영됨.
회고
- 한 줄짜리 fix지만 grid 명세 다시 읽고
auto-fitvsauto-fillMDN 표 한 번 더 봤음. 매번 헷갈림 - 카드 0장일 때는
auto-fit도 의미 없음. empty state 분기는 별도로 둬야 함 - mixin에 인자로 빼둔 덕에 다음에 비슷한 영역 만나면 한 줄로 끝남
다음
댓글 0
첫 댓글 달아줘.