CSS
레이아웃
flex
flex
를 드디어 배웠다.
일할 때 보던 jusity-content
랑 align-items
를 이제야 조금 이해할 것 같다.
부모요소와 자식요소에 맞춰 넣어야 하는 CSS 가 달랐다는 것도 오늘 처음 알았다.
솔직히 궁금하면 찾아볼 법도 했는데 이제야 찾아봄ㅎㅎ
그래도 이제야 배운 flex
유용하게 써먹어야지!
클래스 이름 선언 방법
클래스 이름과 구현을 1:1로 일치시켜 아주 작은 단위로 CSS를 작성하는 기법
CSS로 화면을 구분할 때는 수직분할과 수평분할을 차례대로 적용하여 콘텐츠의 흐름을 따라 작업 진행
수직분할은 화면을 수직으로 분할하는 것으로, 콘텐츠는 가로로 배치. 그 후 분할된 요소를 수평으로 구분하여, 내부 콘텐츠가 세로로 배치되도록
기본 스타일링을 제거하는 CSS 코드 예시
* {
box-sizing: border-box
}
body {
margin: 0;
padding: 0;
}
flexible (유연한)의 뜻
flexbox 로 레이아웃 구성된 박스를 유연하게 늘리거나 줄여 레이아웃 잡는 법
부모 박스 요소에 적용해 자식 박스의 방향과 크기 결정
<!--html-->
<main>
<div>box1</div>
<div>box2</div>
<div>box3</div>
</main>
/*css*/
main {
display: flex;
background-color: gray;
}
div {
border-radius: 10px;
}
부모 요소에 작성하여 자식 요소들이 정렬할 축을 정하는 속성으로 기본적으로 가로 정렬
속성값 : row
, row-reverse
, column
, column-reverse
main {
display: flex;
**flex-direction: row;**
}
하위 요소들의 크기가 상위 요소의 크기를 넘으면 자동 줄 바꿈 할 것인지 정하는 속성
설정하지 않으면 줄바꿈 하지 않음
속성값 : nowrap(기본값)
, warp
, wrap-reverse
main {
display: flex;
**flex-wrap: nowrap;**
} /*줄바꿈 하지 않으면 아래 예시 이미지처럼 상위 요소를 넘어갈 수 있음*/
자식 요소들을 축의 수평 방향으로 어떻게 정렬할 것인지 정하는 속성
가로 정렬이면 가로 방향으로 어떻게 정렬할지, 세로 정렬이면 세로 방향으로 어떻게 정렬할지
속성값 : flex-start
, flex-end
, center
, space-between
, space-around
main {
display: flex;
**justify-content: space-between;**
} /*줄바꿈 하지 않으면 아래 예시 이미지처럼 상위 요소를 넘어갈 수 있음*/
자식 요소들을 축의 수직 방향으로 어떻게 정렬할 것인지 정하는 속성
가로 정렬이면 세로 방향으로 어떻게 정렬할지, 세로 정렬이면 가로 방향으로 어떻게 정렬할지
속성값 : flex-start
, flex-end
, center
, stretch
, baseline
main {
display: flex;
**justify-content: space-between;**
} /*줄바꿈 하지 않으면 아래 예시 이미지처럼 상위 요소를 넘어갈 수 있음*/
align-items는 한줄을 기준으로 정렬하지만, align-content는 두줄부터 사용하는데 의미 있음
그래서 align-content는 두줄의 flex-wrap:wrap 인 상태에서 사용해야 함
만약 no-wrap 이면 라인이 넘어가지 않아 계속 한줄인 상태이기 때문에
align-content 사용해도 적용x
align-items는 수직축의 라인을 기준으로 아이템들이 정렬
align-content는 수직축의 라인을 기준으로 (두 줄 이상 일 때만) 라인 자체가 정렬
참고링크-00
참고링크-01
참고링크-02
자식 요소에게 적용해야 하는 속성인 flex
는 요소가 차지하는 공간
flex 속성에는 세가지 값을 지정해 줄 수 있음
자식 요소에 flex 속성을 따로 설정해주지 않으면 기본값이 적용
왼쪽에서 부터 오른쪽으로 콘텐츠 크기만큼 배치
flex
: grow(팽창 지수), shrink(수축 지수), basis(기본크기)
비율로 레이아웃 지정할 경우
flex-grow
또는 flex: grow
1 auto 와 같이 grow 속성에 변화 주는 방식 권장
/* 기본값 */
flex: 0 1 auto;
/*각 값을 따로 지정해줄 수 있음*/
flex-grow: 0;
flex-ghrink: 1;
flex-basis: auto;
grow
shrink
basis
flex-basis: auto; 와 flex-basis:0; 의 차이는?
실제 1:1:1 너비를 가지는건 어떤걸까?
flex-basis : auto; 는 콘텐츠를 제외한 공간의 비율을 1:1:1 로 맞추고
flex-basis : 0; 는 박스의 비율을 1:1:1로 맞춘 느낌
flex-basis auto, 0 참고링크