Flexbox
flexbox는 items을 금 긋기(열, 행을 긋기) 위한 표면적인 레이아웃 방법이다. 페이지의 콘텐츠 상자 안에 아이템을 배치하는 데 사용된다. 페이지의 콘텐츠 상자 안에 아이템을 배치하는 데 사용된다.
- flexbox는 1차원 레이아웃을 만드는데 사용할 수 있는 CSS 속성의 집합
- flexbox의 주요 아이디어는 conatiner 요소 내부의 빈 공간이 자식 요소에 의해 자동으로 나눔
- flexbox를 사용하면 부모 container 내부에서 수평 및 수직으로 항목을 자동으로 정렬 가능
- flexbox는 수직 정렬 및 동일한 높이의 열 생성과 같은 일반적인 문제를 해결한
- flexbox는 floats를 바꾸는데 완벽하고, 더 적은 코드와 HTML과 CSS를 깔끔하게 작성
float에 대해서 → https://recordoftheday.tistory.com/entry/css-float
flexbox를 사용하면 하나의 컨테이너 안에서 어떤 요소를 크게하고 어떤 요소를 작게할지 요소들 사이에 공간을 얼마나 띄우고 요소들을 각각 어디에 배치할지, 요소들 사이의 공간을 균등하게 만들지 말지 등 다양한 요소를 보기 좋게 배열하면서 레이아웃을 유연하게 조정할 수 있다. 그러므로 컨테이너 안의 상자와 요소가 유연하게 변화한다.
창 크기를 조정해 보면 입력 창 크기가 달라지는 것을 볼 수 있다. 심지어 각 창이 차지하는 공간의 비율도 달라진다. 적어도 항상 같은 비율을 유지하지 않는다. 그래서 공간 배분의 원칙이 적용된다.
→ 요소를 넣고 공간을 추가하고 분할하면서 웹 페이지 공간을 구성하는데 매우 유용한 속성이다.
Flexbox 용어
flex 컨테이너를 만들려면 디스플레이 속성을 flex로 설정하면 된다.
display : flex
그러면 flex container의 직계 아이템 전부가 플렉스 아이템이 된다.
메인 축(main axis): flex item이 배치되는 방향
교차 축(cross axis): 수직에 가까운 또 다른 다른 축, 주 액서스의 방향을 바꿀 수 있다.
메인축과 교차축을 서로 다른 방향으로 맞출 수 있다. 그래서 어느 축을 쓰고 있는지 항상 알아야 한다.
main axis와 cross axis에 대해서 → https://recordoftheday.tistory.com/entry/%E3%85%8A
<display:flex; 입력 전> <display:flex; 입력 후>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Flexbox</title>
<style>
.el--1 {
background-color: blueviolet;
}
.el--2 {
background-color: orangered;
}
.el--3 {
background-color: green;
height: 150px;
}
.el--4 {
background-color: goldenrod;
}
.el--5 {
background-color: palevioletred;
}
.el--6 {
background-color: steelblue;
}
.el--7 {
background-color: yellow;
}
.el--8 {
background-color: crimson;
}
.container {
/* STARTER */
font-family: sans-serif;
background-color: #ddd;
font-size: 30px;
margin: 40px;
/* FLEXBOX */
display: flex;
}
</style>
</head>
<body>
<div class="container">
<div class="el el--1">HTML</div>
<div class="el el--2">and</div>
<div class="el el--3">CSS</div>
<div class="el el--4">are</div>
<div class="el el--5">amazing</div>
<div class="el el--6">languages</div>
<div class="el el--7">to</div>
<div class="el el--8">learn</div>
</div>
</body>
</html>
display: flex;를 입력하니 요소들은 나란히 배치되었다. 이러한 요소들은 flex items라고 부른다.
왜냐하면 저 요소들은 flex container의 하위 요소이기 때문이다.
flex container은 div class = "container"의미한다. <div clas="el el--1">HTML</div> 외 7개는 하위 요소이다. 그 하위 요소는 flex 항목이다.
가로로 각 요소들은 텍스트 콘텐츠에 필요한 공간을 정확하게 차지한다. 그러나 세로는 가로와 다르다. 기본적으로 세로의 경우 모든 플렉스 항목의 높이는 가장 높은 요소의 높이가 된다.
Vertical centering(수직 정렬)
align-items: center
기본적으로 모든 항목을 수직으로 중앙에 배치하려면 align-items: center을 사용하면 된다.
/* FLEXBOX */
display: flex;
align-items: center;
녹색은 세로로 정렬된다. flex container은 가장 높은 요소를 높이로 사용한다. 녹색을 제외한 너머지는 콘텐츠에 필요한 공간을 단순하게 차지하고 있다.
align-items: flex-start;
/* FLEXBOX */
display: flex;
align-items: flex-start;
align-items: flex-end;
/* FLEXBOX */
display: flex;
align-items: flex-end;
align-items: flex-stretch;
/* FLEXBOX */
display: flex;
align-items: flex-stretch;
align-items: flex-stretch;는 기본적으로 정렬된 항목 값이다. stretch를 사용하면 본질적으로 모든 요소가 가장 높은 요소만큼 자동으로 늘어난다. 즉 flex conatiner에 넓게 설정하지 않겠다는 것이다.
/* FLEXBOX */
display: flex;
align-items: center;
justify-content: center;
justify-content를 작성하면 컨테이너의 내부 중앙에 있는 것을 확인할 수 있다.
- flex conatainer에 정렬된 아이템을 쓰면 모든 flex item이 같은 정렬이 된다.
- 순서를 변경하느 건 모바일 스크린에서 큰 레이아웃을 작은 레이아웃으로 수정할 때 도움이 된다.
- 모든 요소의 기본값은 항상 0이다.
'📦 CSS > CSS' 카테고리의 다른 글
[CSS] flexbox 속성 | justify content ③ (0) | 2022.11.26 |
---|---|
[CSS] flexbox의 속성 | main-axis | flex-direction ② (0) | 2022.11.26 |
[CSS] Background (0) | 2022.11.24 |
[CSS] hover 효과를 이용한 button (0) | 2022.11.24 |
[CSS] Transform (0) | 2022.11.17 |