사실 웹개발을 어느정도 해본사람이라면 mdn만 봐도 css flex 속성을 이해하는데 충분하다.
그런데 mdn의 단어들은 입문자들에겐 조금 어려운것 같다.
나도 몇달전엔 이해하지 못했던 mdn의 글들이 이제서야 이해가 된다.
flex속성은 flex-grow, flex-shrink, flex-basis 세 속성의 축약형
flex-grow, flex-shrink, flex-basis에 대한 설명은 조금 더 내리면 볼 수 있다.
flex : 1 3 100px
//* flex-grow : 1, 형제 요소들과 비교했을때 얼만큼의 비율을 차지 *//
//* flex-shrink : 3, 크기가 너무 커서 넘치게 될 때 얼만큼의 비율로 줄어들지 *//
//* flex-basis : 100px, 초기 크기*//
flex 속성은 무조건 형제 엘리먼트들의 flex 속성과 비교한 상대값이다.
코드를 보면서 이해해보자.
grow : 컨테이너에서 얼만큼의 비율을 차지할 것 인지?
.num1 {
flex-grow: 1;
}
.num2 {
flex-grow: 2;
}
.num3 {
flex-grow: 1;
}
flex-grow
의 값에 따라, 1 : 2 : 1 의 비율을 차지함을 알 수 있다.
shrink : 만약 컨테이너보다 커서 넘치게 되면 몇 배 줄일껀지
우선 넘친다는게 뭔뜻인가 싶을테니, flex-shrink를 적용하기 전 상황부터 보여드림.
//* 외부 컨테이너 400px*//
.containor .flex-wrapper {
margin: 10px;
border: 1px black solid;
width: 400px;
}
//* 내부 요소 각각 600px *//
.containor .flex-wrapper .icon {
margin: 5px;
width: 600px;
border: 1px goldenrod solid;
padding: 5px;
}
(세로로 쌓이는 이유는 display:flex를 적용하지 않았기 때문)
보시다시피 400px의 컨테이너 안에서 600px 내부 요소들이 넘치고 있다.
이제 flex-shrink
를 적용해보자.
.num1 {
flex-shrink: 1;
}
.num2 {
flex-shrink: 2;
}
.num3 {
flex-shrink: 1;
}
flex-shrink의 값에 따라, 1 : 2 : 1 의 비율로 축소, 즉 1 : 0.5 : 1의 비율을 차지함을 알 수 있다.
basis : 초기크기
.containor .flex-wrapper {
margin: 10px;
border: 1px black solid;
display: flex;
width: 400px;
}
.num1 {
/* flex-grow: 1; */
flex-basis: 100px;
}
.num2 {
/* flex-grow: 2; */
flex-basis: 100px;
}
.num3 {
/* flex-grow: 1; */
flex-basis: 100px;
}
초기값에 따라 100px씩 나눠가진다.
(전체 컨테이너 400px인데 남은 공간이 100px이 아닌 이유는 각 요소의 margin
, padding
때문)
flex 축약형
.num1 {
/*
flex-grow : 1;
flex-shrink : 2;
flex-basis : 30px;
과 같다.
*/
flex: 1 2 30px;
}
.num2 {
flex: 1 2 300px;
}
.num3 {
flex: 1 1 300px;
}
각 내부요소의 크기 초기값의 합 30px + 300px + 300px > 외부컨테이너 크기 400px 이기 때문에 flex-shrink
가 적용되어
0.5 : 0.5 : 1 의 비율로 크기를 차지한다.
참고문서 :
https://developer.mozilla.org/ko/docs/Web/CSS/flex-grow
https://developer.mozilla.org/ko/docs/Web/CSS/flex-shrink
https://developer.mozilla.org/ko/docs/Web/CSS/flex-basis
코드 : https://github.com/ryu9663/css-practice/tree/main/flex-practice
'개발 > CSS' 카테고리의 다른 글
align-self, align-items, align-content (0) | 2022.02.13 |
---|---|
gap 속성과 margin 속성의 차이 (0) | 2022.01.30 |
position : absolute (0) | 2021.11.06 |
position : relative와 absolute (0) | 2021.10.17 |
특정 이미지 바깥 배경 흐리게 만들기 (0) | 2021.09.15 |