Flexbox를 사용하기 위해서는 우선 컨테이너에 대한 설정이 필요합니다. Flex 컨테이너는 내부의 요소들을 포함하고 있으며, 그들을 유연하게 배치하기 위한 기준을 제공합니다. Flex 컨테이너를 설정하기 위해 다음과 같은 CSS 속성을 사용할 수 있습니다
[ display ]
Flex 컨테이너를 생성하기 위해 display 속성을 사용합니다. Flex 컨테이너를 생성하기 위해서는 display 속성에 flex 값을 지정해야 합니다. 예를 들어:
.container {
display: flex;
}
위 코드는 .container 클래스를 가진 요소를 Flex 컨테이너로 설정합니다.
[ flex-direction ]
flex-direction 속성은 Flex 컨테이너 안에서 아이템들이 배치되는 방향을 설정합니다. 기본값은 row로, 요소들이 왼쪽에서 오른쪽으로 배치됩니다. 다른 가능한 값으로는 column (위에서 아래로 배치), row-reverse (오른쪽에서 왼쪽으로 배치), column-reverse (아래서 위로 배치) 등이 있습니다. 예를 들어:
.container {
flex-direction: row;
}
위 코드는 .container 클래스를 가진 Flex 컨테이너에서 요소들을 왼쪽에서 오른쪽으로 배치합니다.
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="styles.css"> </head> <body> <div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <button onclick="changeDirection('row')">row</button> <button onclick="changeDirection('row-reverse')">row-reverse</button> <button onclick="changeDirection('column')">column</button> <button onclick="changeDirection('column-reverse')">column-reverse</button> </body> </html>
.container { display: flex; border: 1px solid #ddd; padding: 10px; } .item { background-color: #f1f1f1; border: 1px solid #999; padding: 10px; margin: 5px; }
function changeDirection(direction) { var container = document.querySelector('.container'); container.style.flexDirection = direction; }
[ justify-content ]
justify-content 속성은 Flex 컨테이너 안에서 아이템들의 수평 정렬 방식을 설정합니다. 이 속성은 Flex 컨테이너의 주 축 (flex-direction에 의해 결정됨)을 따라 아이템들을 정렬합니다. 예를 들어:
.container {
justify-content: flex-start;
}
코드는 .container 클래스를 가진 Flex 컨테이너에서 요소들을 왼쪽으로 정렬합니다.
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="styles.css"> </head> <body> <div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <div class="controls"> <button onclick="changeJustifyContent('flex-start')">flex-start</button> <button onclick="changeJustifyContent('flex-end')">flex-end</button> <button onclick="changeJustifyContent('center')">center</button> <button onclick="changeJustifyContent('space-between')">space-between</button> <button onclick="changeJustifyContent('space-around')">space-around</button> <button onclick="changeJustifyContent('space-evenly')">space-evenly</button> </div> </body> </html>
.container { display: flex; border: 1px solid #ddd; padding: 10px; } .item { background-color: #f1f1f1; border: 1px solid #999; padding: 10px; margin: 5px; } .controls { margin-top: 10px; }
function changeJustifyContent(justify) { var container = document.querySelector('.container'); container.style.justifyContent = justify; }
[ align-items ]
align-items 속성은 Flex 컨테이너 안에서 아이템들의 수직 정렬 방식을 설정합니다. 이 속성은 Flex 컨테이너의 교차 축 (flex-direction에 의해 결정됨)을 따라 아이템들을 정렬합니다. 예를 들어:
.container {
align-items: center;
}
위 코드는 .container 클래스를 가진 Flex 컨테이너에서 요소들을 수직으로 가운데 정렬합니다.
<div class="container"> <div class="item"> <span class="text">Item 1</span> </div> <div class="item"> <span class="text">Item 2 with longer text</span> </div> <div class="item"> <span class="text">Item 3</span> </div> </div> <div class="controls"> <button onclick="changeAlignItems('flex-start')">flex-start</button> <button onclick="changeAlignItems('flex-end')">flex-end</button> <button onclick="changeAlignItems('center')">center</button> <button onclick="changeAlignItems('baseline')">baseline</button> <button onclick="changeAlignItems('stretch')">stretch</button> </div>
.container { display: flex; border: 1px solid #ddd; padding: 10px; height: 150px; } .item { background-color: #f1f1f1; border: 1px solid #999; padding: 10px; margin: 5px; flex: 1; display: flex; align-items: center; justify-content: center; } .text { font-size: 14px; font-weight: bold; } .controls { margin-top: 10px; }
function changeAlignItems(align) { var container = document.querySelector('.container'); container.style.alignItems = align; }
[ gap, flex-wrap ]
gap: 아이템들 사이의 간격을 설정하는 속성입니다. 아이템 사이에 일정한 공간을 주기 위해 사용합니다.
flex-wrap: 아이템들이 한 줄에 배치되지 않고 여러 줄에 걸쳐서 배치되도록 설정하는 속성입니다. 기본값은 nowrap이며, wrap으로 설정하면 여러 줄에 걸쳐서 아이템이 배치됩니다.
<div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> <div class="item">Item 4</div> <div class="item">Item 5</div> <div class="item">Item 6</div> <div class="item">Item 7</div> <div class="item">Item 8</div> <div class="item">Item 9</div> </div> <div class="controls"> <div class="button-group"> <h2>Justify Content</h2> <button onclick="changeJustifyContent('flex-start')">flex-start</button> <button onclick="changeJustifyContent('flex-end')">flex-end</button> <button onclick="changeJustifyContent('center')">center</button> <button onclick="changeJustifyContent('space-between')">space-between</button> <button onclick="changeJustifyContent('space-around')">space-around</button> <button onclick="changeJustifyContent('space-evenly')">space-evenly</button> </div> </div> <div class="controls"> <div class="button-group"> <h2>Align Items</h2> <button onclick="changeAlignItems('flex-start')">flex-start</button> <button onclick="changeAlignItems('flex-end')">flex-end</button> <button onclick="changeAlignItems('center')">center</button> <button onclick="changeAlignItems('baseline')">baseline</button> <button onclick="changeAlignItems('stretch')">stretch</button> </div> </div> <div class="controls"> <button onclick="toggleFlexWrap()">Toggle Wrap</button> </div>
.container { display: flex; flex-wrap: nowrap; /* 기본값은 nowrap */ justify-content: flex-start; /* 기본값은 flex-start */ align-items: stretch; /* 기본값은 stretch */ border: 1px solid #ddd; padding: 10px; gap: 10px; /* 아이템 사이의 간격 */ } .item { background-color: #f1f1f1; border: 1px solid #999; padding: 10px; flex: 1; } .controls { margin-top: 10px; }
function changeJustifyContent(justify) { var container = document.querySelector('.container'); container.style.justifyContent = justify; } function changeAlignItems(align) { var container = document.querySelector('.container'); container.style.alignItems = align; } function toggleFlexWrap() { var container = document.querySelector('.container'); container.style.flexWrap = container.style.flexWrap === 'wrap' ? 'nowrap' : 'wrap'; }
[ align-content ]
아래 코드에서 align-items와 align-content 모두 flex-start로 설정되어 있습니다. 그러나 실제로는 차이점이 있습니다.
align-items: align-items: flex-start;는 Flex 아이템들을 교차축 방향으로 상단에 정렬합니다. 여기서는 Flex 컨테이너의 교차축 상단에 위치합니다.
align-content: align-content: flex-start;는 여러 줄로 나뉘어진 Flex 아이템들을 교차축 방향으로 상단에 정렬합니다. 여기서는 Flex 컨테이너의 교차축 상단에 위치합니다.
위의 예제에서는 단일 줄에 모든 Flex 아이템이 배치되므로 align-items와 align-content의 차이를 명확하게 확인할 수 없습니다. 그러나 여러 줄로 나뉘어진 Flex 아이템들을 가지고 있다면, align-content의 영향을 더 명확하게 확인할 수 있습니다.
따라서, align-items는 단일 줄 내의 Flex 아이템 정렬에 사용되고, align-content는 여러 줄로 나뉘어진 Flex 아이템들의 묶음 정렬에 사용됩니다.
<div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> <div class="item">Item 4</div> <div class="item">Item 5</div> </div> <div class="controls"> <button onclick="changeAlignContent('flex-start')">flex-start</button> <button onclick="changeAlignContent('flex-end')">flex-end</button> <button onclick="changeAlignContent('center')">center</button> <button onclick="changeAlignContent('space-between')">space-between</button> <button onclick="changeAlignContent('space-around')">space-around</button> <button onclick="changeAlignContent('stretch')">stretch</button> </div>
.container { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; align-content: flex-start; border: 1px solid #ddd; height: 300px; gap: 10px; } .item { background-color: #f1f1f1; border: 1px solid #999; padding: 10px; } .controls { margin-top: 10px; }
function changeAlignContent(align) { var container = document.querySelector('.container'); container.style.alignContent = align; }
=> 어렵다.
이렇게 Flex 컨테이너 설정을 통해 요소들을 유연하게 배치할 수 있습니다. 다음으로는 Flex 아이템에 대한 설정에 대해 알아보겠습니다.
"배너 클릭시 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'WEB' 카테고리의 다른 글
[css]Flexbox 마스터하기: 4. Flexbox를 활용한 반응형 사진 갤러리 예제 (0) | 2023.06.25 |
---|---|
[css]Flexbox 마스터하기: 3.Flex 컨테이너 설정 (0) | 2023.06.25 |
[css]Flexbox 마스터하기: 1.소개 (0) | 2023.06.24 |
[html5] input type date 와 input type time (1) | 2023.06.17 |
ngrok으로 로컬 개발 환경(localhost) https 로 개발테스트 하기 (1) | 2023.06.14 |