이 글은 CSS의 Flex 속성, 특히 flex의 개념과 flex-items에 지정하는 속성에 대해 주로 다루고 있습니다.
flex-container에 지정하는 속성은 CSS flex(2) 게시글에서 더 자세히 다룰 예정입니다.
조금만 기다려주세욤 🙄
flex를 배우기 전까진 보통 세로로 배치하는 레이아웃을 이용했다.
예를 들어,
ㅁ
ㅁ
ㅁ
이렇게...
그러나 이제 이 요소들을
ㅁ ㅁ ㅁ ㅁ
이렇게 배치하고 싶은 타이밍이 왔다....
inline 요소들은 흉내라도 낼 수 있지 block 요소는..
흉내내다가 코드만 5m 정도로 길어질 수 있다.
하지만 이제는 그런 방법 없이 손쉽게 가로로 배치할 수 있다.
바로바로 flex에 대해 배웠기 때문 ^^
시작합니다. flex 😎
display 속성 중 하나로, 박스 레이아웃을 작성할 때 유용하게 사용된다.
요소의 사이즈를 지정하지 않고도 유연하고 균형잡힌 배치가 가능하다.
display: flex;
를 선언한 후,/* 필요하지 않은 속성은 기술하지 않았습니다. */
<div class="playground">
<div class="frog">Frog</div>
<div class="frog">Frog</div>
<div class="frog">Frog</div>
</div>
이 코드를 실행시켜보면
위와 같이 나타난다.
잉잉.. 가로로 배치하는거 알려달라고 했잖아요 ㅡㅡ
div
는 block요소인데 어떻게 가로로 배치하는데요ㅡㅡ
ㄴ 네 제가 보여드리겠읍니다..
flex 가보자고
.playground { display: flex; }
부모 요소인 .playground
에 단 한줄...
display: flex
만 추가시켜주면..
응애~ 자식들은 flex 세상에 태어나게 된다. 바로 아래처럼
드디어.. 가로로 배치가 가능해진 것이다..!!! 👏👏👏
여기서 질문할까봐.. 혹시나 말하는데
여전히 div.frog
는 block-level 요소입니다..
(개인적으로 이게 가장 신기했삼..)
축하합니다.. 이제 당신은 flex의 반은 알게 되셨습니다. (시작이 반이니까요^^)
.playground
.frog
이다.flex를 한마디로 말하자면
flex-container는 flex의 영향을 받는 전체 공간이 되고,
설정된 속성에 따라 각각의 flex-item들이 어떤 형태로 배치되는 것
이라고 할 수 있다.
그래서 아래에 나올 속성값들도 flex-item에 선언해야 배치를 할 수 있다.
(flex-container에 적용을 해보았자 씨알도 안먹힙니다. ^^)
그래서 이제.. 어떻게 써야하나요?
flex-item의 초기 크기를 지정하는 속성 (원래 지 크기~!)
initial value: auto, inheritance: No
flex-item 요소가 flex-container 요소 속에서
차지한 영역(원래 자기 크기)을 제외한 사용가능한 공간을 비율로 분배하여
원래 자기 크기에 추가한다.
initial value: 0, inheritance: No
이런 코드가 있다.
<div class="playground">
<div class="frog">Frog</div>
<div class="frog">Frog</div>
<div class="frog">Frog</div>
</div>
/* 설명에 불필요한 속성들은 제외함 */
.playground { display: flex; }
.frog { flex-grow: 1; }
이 코드에서, 우리는 flex-basis 값에 따라 요소가 어떻게 변하는가에 대해 살펴볼 것이다.
flex-basis: auto (기본값)일 때와 0일 때,
위 코드를 실행시켜보면 아래와 같은 결과가 나온다.
그런데, 만약 요소 속 콘텐츠의 크기가 커지면 어떻게 될까?
flex-basis: auto 일 때
flex-basis: 0 일 때
차이가 느껴지는가?
왜 이런 결과가 나왔을까?
flex-basis: auto일 때엔
flex-item의 기본 크기=자신의 콘텐츠만큼 가지게 된다.
flex-grow: 1에 따라 세 아이템 모두 같은 여백을 나눠가지지만,
원래의 자기 콘텐츠+나눠진 여백만큼을 자기가 가지므로
서로 다른 크기를 가지게 된 것이다.
flex-basis가 0일 때엔, 애초에 아이템의 기본 크기를 0이라고 지정한 것이므로
원래 자기 콘텐츠=0 이다.
따라서, 0+동등하게 나눠진 여백의 결과값으로
서로 동일한 너비를 가지게 되었다.
이렇게 보니 이해가 가시는지요..
저는 이해를 못해서 몇 번 힘들었습니다 ^^ㅎ
flex-grow와 반대로, flex-item의 너비를 감소시키는 비율을 설정한다.
initial value: 1, inheritance: No
요소에 보장되는 최소 너비를 설정한다.
initial value: auto, inheritance: No
하.. 오랜만의 벨로그다 (일주일만인가)
요새 flex 이넘때문에 과제하느라 시간이.. 너무 후딱가고
적용할 때마다 왜이런거지? 이해하는데 시간이 오래걸려서
블로그를 쓸 새가 없었다..
(주말엔 피곤해서 그냥 쓰러짐.. 죄송 🙄)
오늘은 겨우겨우 과제 완성해서 벨로그 적었지롱 ㅋㅋ
아무튼 다시 이번주부터 힘내서 flex 2탄도 써야지...
화이팅 ㅠㅜㅠㅠㅠ
플렉스에 무너지지말자... 정복하자 이넘도