정렬을 하기위한 요소의 부모 요소에 display: flex를 사용한다.
display : flex
- flex box로 만든다. flex는 기본적으로 왼쪽에서 오른쪽으로 정렬됨.
flex-direction (중심축 지정..?)
- reverse 같은경우 item의 순서또한 바뀐다.
- row : 왼쪽끝에서 오른쪽 (중심축 x축)
- row-reverse: 오른쪽 끝에서 왼쪽 (중심축 x축)
- column : 좌측 상단에서 아래로 (중심축 y축)
- column-reverse : 좌측 하단에서 위로 (중심축 y축)
flex-warp
- nowrap : 기본값으로써 아이탬이 가득 차도 줄구분이 되지 않는다.flexbox 내부에서 아이템이 벗어나지 못하도록 한다
- wrap : 가득 차게되면 자동으로 넘어간다. (reverse 도 있다)
flex-flow
flex-flow : 위의 direction과 wrap를 합친것
- ex) flex-flow : column nowrap; 등으로 사용 가능
justify-content
중심축에서 아이탬을 어떻게 배치할 것인지 (기본값 flex-start;)
flex line에서 정렬
justify의 경우 flex-direction 랑 다르게 reverse의 경우에 item의 순서가 바뀌지 않는다
말 그대로 배치방향만을 조정한다.
- flex-start : 중심축을 기준으로
x축기준 왼쪽 → 오른쪽
y축기준 위 → 아래
- flex-end : 중심축을 기준으로
x축 기준 오른쪽 → 왼쪽
y축기준 아래 → 위
- space-around : item 좌우에 공간을 만든다 (item별 좌우 같은 공간)
- space-evenly : item사이의 간격이 같은 공간을 만든다.
- space-between : 좌우 item은 좌우에 딱 붙고 사이의 item만 간격을 만든다.
align-content
반대축에서 아이탬을 어떻게 배치할 것인지 (기본값 stretch)
flex line에서 정렬 nowarp인 경우 의미가 없다.
(한줄에 그리기 때문에 그 줄에서 정렬을 해도 의미가없다.)
- space-around : item을 상하에 공간을 만든다
- space-evenly : item사이의 간격이 같은 공간을 만든다.
- space-between : 상하 item은 상하에 딱 붙고 사이의 item을 기준으로 간격을 만든다.
align-items
반대축을 기준으로 item을 정렬한다.
space-between 상태에서 align-items : center을 한 상태
- baseline : text가 모두 균등하게 보여질 수 있도록 베이스라인에 맞춰 정렬
padding으로 인해 1의 text위치가 바뀐 상태 baseline으로 정렬
item에 들어가는 속성값
item에 지정되는 속성값
- order : 배치 순서를 지정해준다. (잘 안씀.. 알고만 있자.)
item1 ,2 ,3에 각각 order 가 지정되어 있습니다.
- flex-grow(중요) : container를 가득 채우려고한다. 기본값은 0
flex-grow 의 숫자에 따라 비율을 나누게 된다. 2번이 1,3번보다 더 늘어나있다.
- flex-shrink : container 가 작아질 때의 비율
값이 클수록 container 작아질때 그만큼 더 작아진다
2번이 flex-shrink 가 높은만큼 1,3번보다 더 줄어들었다.
- flex-basis : item들이 어느정도의 공간을 차지할지 세부적으로 조절해준다.
각각 2:5:3의 비율로 차지하고있다.
align-self : justify,align
Flex box가 아닐때의 정렬
margin : auto
- margin : auto를 사용하면 브라우저에서 블럭레벨의 margin을 좌우로 골고루 나누어준다.
- div는 블럭레벨이기 때문에 자동적으로 margin이 들어와있다. 블럭은 한줄에 하나만 들어가야하기 때문에 자동으로 margin이 들어있다. (오른쪽으로)
- 한줄에 하나만 가능 , 수평적 가운대 정렬만 가능하다.
text-align : center
- 수직정렬은 불가능하다.
- 텍스트가 아닌 경우에도 정렬이 가능하다.
- 블럭레벨은 기본적으로 margin이 들어있어 변하지 않는다.
- 즉, 블럭레벨이 아닌 인라인 레벨인 경우에는 가능하다 (<a>, <button>, <img>,<span>등..)
Flex box가 아닐때의 수직정렬방법
먼저 transform에 대해 알아봅시다
transform : translate
- translateX : X축을 기준으로 지정한 값만큼 이동한다. (%, px ,vh 등)
- translateY :위와 동일
- translate : X ,Y를 동시 이용가능
- scale : 크기 조절가능
- rotate : 방향전환 (단위 : deg)
위의 동작들은 한번에 가능하다
transform : translate(100px, 100px) salce(2) rotate(45deg);
1. transform 을 이용한 수직 정렬 방법
- 자식의 크기가 부모의 절반일 경우
transform(50%,50%) 시 가운대 정렬 가능
- 자식의 크기가 부모의 절반이 아닌경우
absolute 적용 후 left와 top를 50%를 준다(position은 부모기준 이동)
부모가 position : relative 인 상태입니다.
position의 top,right, bottom, left는 해당 면을 기준으로 움직입니다.
top, left 이기때문에 좌측 상단을 기준으로 합니다.
top : 50% :윗 면을 기준으로 부모 컨테이너의 50%만큼 이동
left : 50% : 좌측 면을 기준으로 부모 컨테이너의 50만큼 이동
그리고 transform: translate(-50%,-50%)을 사용합니다.
translate는 해당 item의 중앙을 기준으로 합니다.
translate는 해당 item의 중앙을 기준으로 합니다.
See the Pen 수직 수평 정렬 by J-Plum (@J-Plum) on CodePen.
위의 코드는 예제와 반대인 bottom : 50%;, right :50%; 입니다.
line-height
부모의 크기만큼 값을 주면 수직정렬이 된다.
text-align : center와 같이 사용해서 수직 수평 가운대정렬이 가능하다.
※자세한건 폰트 메트릭스 찾아보기