.main-content { flex: 1; /* 풍선: 남는 공간 차지 */ margin-right: 40px;
} .sidebar { flex: 0 0 280px; /* 벽돌: 280px 고정 */ }
/* 📱 모바일 화면 (768px 이하) */ @media (max-width: 768px) { .wrap { flex-direction: column; /* 세로로 쌓기 */ } .main-content { margin-right: 0; margin-bottom: 40px; } .sidebar { flex: auto; /* 고정 크기 해제! 매우 중요 */width: 100%; }
}
05
흔한 실수와 해결 방법
증상
원인
해결 방법
정렬 속성을 넣었는데 전혀 안 움직임
정렬할 '자식' 태그에 코드를 넣음
부모 태그에 display: flex; 선언
글씨가 길어지면 사이드바가 찌그러짐
자식 아이템의 크기 고정이 안 됨
flex: 0 0 280px; 적용
스마트폰에서 레이아웃이 엉망이 됨
사이드바 고정 크기 리셋 누락
@media 안에 flex: auto; width: 100%; 추가
위 표에서 못 찾은 증상이라면
F12 → Elements에서 부모 요소를 클릭해 Styles 패널에 display: flex;가 실제로 적용돼 있는지부터 확인하세요. 취소선이 보인다면 다른 CSS에 우선순위로 밀린 것입니다.
스스로 설명해보기 — flex 속성을 자식이 아니라 부모에게 줘야 하는 이유를 설명할 수 있나요?
06
오늘의 실습
1좌측 본문(.main)과 우측 사이드바(.sidebar) 2단 레이아웃을 위 코드로 직접 만들어봅니다.
2F12 → 반응형 모드를 켜고 화면 너비를 줄였다 늘였다 하면서 세로 배치로 바뀌는 시점을 관찰합니다.
AI에게 이렇게 지시해 보세요: "본문(.main)과 사이드바(.sidebar)가 있는 2단 레이아웃을 코딩할 거야. PC에서는 본문이 남는 공간을 다 차지하고 사이드바는 280px 고정, 768px 이하 모바일에서는 세로로 쌓이고 사이드바 크기가 100% 꽉 차도록 리셋하는 코드를 포함해줘."
오늘의 용어
display: flex
부모에게 선언하면 자식들을 한 방향으로 정렬해주는 레이아웃 방식
justify-content
가로 정렬을 담당 (row 기준, column이면 세로로 뒤바뀜)
align-items
세로 정렬을 담당 (row 기준, column이면 가로로 뒤바뀜)
flex-direction
배치 방향(row/column). column이면 정렬 축이 뒤바뀜
flex: 1
남는 공간을 물처럼 채우는 고무풍선 방식
flex: 0 0 280px
늘어나지도 줄어들지도 않는 벽돌 방식(크기 고정)
핵심 3줄 요약
1Flexbox 리모컨은 정렬할 요소들을 감싸는 부모 태그에게 주어야 작동합니다.
2위 예제처럼 margin-right로 간격을 줄 수도 있지만, 모바일에서 직접 리셋해야 하는 것과 달리 gap은 이런 리셋이 필요 없어 더 권장됩니다.