CSS Flexbox 생성기
Flexbox는 1차원 레이아웃의 표준입니다: 카드 줄, 내비게이션 바, 가운데 정렬 히어로, 폼 등. 컨테이너-아이템 모델은 강력하지만 열몇 개의 속성이 직관적이지 않은 방식으로 서로 영향을 주고받습니다. 이 생성기는 컨테이너 설정의 어려움을 덜어 줍니다. flex-direction, justify-content, align-items, flex-wrap, gap을 고르면 스타일시트에 바로 붙여 넣을 수 있는 깔끔한 CSS 규칙이 나옵니다.
CSS 만드는 방법
-
1
방향 선택
row, column 또는 반대 방향 변형을 고릅니다. 아이템이 흐르는 축인 flex-direction을 정합니다.
-
2
justify-content 설정
주축에서 아이템을 어떻게 배분할지 고릅니다: 시작, 가운데, space-between, space-around, 끝.
-
3
align-items 설정
교차축에서 아이템을 어떻게 정렬할지 고릅니다: stretch, 시작, 가운데, 끝.
-
4
gap과 wrap 설정
아이템 사이의 간격을 픽셀로 넣고, 아이템이 다음 줄로 넘어갈지 정합니다.
-
5
CSS 복사
생성기가 모든 속성을 담은 컨테이너 규칙을 출력하므로 스타일시트에 붙여 넣기만 하면 됩니다.
컨테이너 속성
| 속성 | 값 | 효과 |
|---|---|---|
flex-direction |
row / column / row-reverse / column-reverse | 주축 |
flex-wrap |
nowrap / wrap / wrap-reverse | 아이템 줄바꿈 여부 |
justify-content |
flex-start / center / flex-end / space-between / space-around / space-evenly | 주축 분배 |
align-items |
flex-start / center / flex-end / baseline / stretch | 각 줄의 교차축 정렬 |
align-content |
같은 값 + space-between / space-around | 줄바꿈 시 줄들의 교차축 분배 |
gap (row-gap, column-gap) |
길이 | 아이템 간 간격 |
아이템 속성
| 속성 | 값 | 효과 |
|---|---|---|
flex-grow |
0 이상(단위 없음) | 남은 공간을 흡수할 비율 |
flex-shrink |
0 이상(단위 없음) | 오버플로우 시 줄어들 비율 |
flex-basis |
길이 또는 auto | grow/shrink 이전의 시작 크기 |
flex |
단축형(1 1 auto 등) |
위 세 가지를 한 번에 |
align-self |
auto / flex-start / center / flex-end / baseline / stretch | 단일 아이템에 대해 align-items 재정의 |
order |
정수 | DOM 변경 없이 시각적 재배치 |
flex: 1 트릭
flex: 1은 flex: 1 1 0%의 단축형입니다. 아이템이:
- 남은 공간을 채우도록 늘어나고(grow: 1)
- 필요하면 줄어들며(shrink: 1)
- 0 크기에서 시작합니다(basis: 0%)
동일한 너비의 컬럼이라면 모든 아이템에 flex: 1을 주면 완벽하게 균등 분할됩니다. 콘텐츠보다 작아지면 안 되는 사이드바라면 flex: 0 0 240px(grow/shrink 없음, basis 240px)를 사용하세요.
자주 쓰는 패턴
가운데 정렬 히어로
.hero {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
좌측 로고, 우측 링크의 내비게이션 바
.nav {
display: flex;
align-items: center;
gap: 2rem;
}
.nav-links {
margin-left: auto; /* 오른쪽으로 밀기 */
display: flex;
gap: 1rem;
}
반응형 카드 줄
.card-row {
display: flex;
flex-wrap: wrap;
gap: 1.5rem;
}
.card {
flex: 1 1 260px; /* grow/shrink, 줄바꿈 전 최소 260px */
}
입력이 가변이고 버튼이 고정인 폼 필드
.field {
display: flex;
gap: 0.5rem;
}
.field input {
flex: 1;
}
.field button {
flex: 0 0 auto;
}
Flexbox vs. Grid
- Flexbox: 1차원(행 또는 열). 아이템 크기가 콘텐츠 기반이거나 단일 라인을 따라 공간을 분배할 때 가장 좋습니다.
- Grid: 2차원(명시적인 행과 열 트랙). 행과 열 구조가 동시에 있는 레이아웃에 가장 좋습니다.
내비게이션 바나 카드 스택은 Flexbox, 여러 행이 정렬된 제품 카드 그리드는 CSS Grid. 실제 페이지의 대부분은 두 가지를 함께 씁니다, Grid 페이지 레이아웃 안에 Flexbox 컴포넌트.
자주 만나는 함정
- 아이템이 컨테이너를 채우지 않음: 기본
align-items: stretch는 아이템에 고정 height가 없을 때만 적용됩니다. 명시적 height가 있으면 그 크기를 유지합니다. gap이 안 먹힘: 브라우저 지원을 확인하세요. Flex gap은 늦게 들어왔고 Safari 14.1 미만에서는 미지원이었습니다. 2024년 이후로는 보편적입니다.- 컬럼 flex의 자식이 줄어듦: flex 컬럼의 기본값
align-items: stretch가 자식을 컨테이너 너비로 늘립니다. 자식이 width를 지정하면 이를 깨고 나옵니다. order는 시각적일 뿐: 스크린 리더와 키보드 내비게이션은 DOM 순서를 따릅니다. 콘텐츠 의미를 바꾸기 위해order를 쓰지 마세요. 시각적 다듬기에만 사용합니다.
자주 묻는 질문
2차원 페이지 레이아웃(행과 열을 함께)은 Grid, 1차원 분배(내비 바, 버튼 줄, 스택)는 Flexbox. Grid 셀 안의 내부 레이아웃은 Flexbox. 대부분 복잡한 UI는 둘 다 씁니다.
flex-shrink 기본값이 1이지만 min-width 기본값이 auto로 콘텐츠 너비와 같기 때문입니다. 아이템에 min-width: 0(또는 min-inline-size: 0)을 설정해 본질 크기 아래로도 줄어들 수 있게 하세요.
컨테이너에 display: flex; justify-content: center; align-items: center;. 대부분의 “가운데 정렬” 케이스를 두 줄로 해결합니다.
모든 모던 브라우저에서 동작합니다. Safari는 늦었고(14.1, 2021년 4월), 오늘날 모든 주요 브라우저가 지원합니다. 가능하면 margin 기반 간격을 gap으로 교체하세요, 훨씬 단순합니다.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
랜덤 영어 글자 생성기
A-Z 영어 글자를 무작위로 생성합니다. 개수와 대문자, 소문자, 혼합 대소문자를 선택해 게임, 과제, 수업 활동에 활용하세요.
랜덤 색상 팔레트 생성기
2~15개의 색상으로 랜덤 팔레트를 만들고, 비비드, 파스텔, muted, dark 스타일을 선택한 뒤 HEX 코드나 CSS 변수를 복사하세요.