본문 바로가기
웹 개발/주요 태그, 속성들

css vertical-align 속성

by chan00 2021. 12. 23.

오늘은 css상에서 수직 정렬을 할 수 있는 vertical-align 속성에 대해서 알아보는 시간을 갖겠습니다.

바로 전 포스팅인 css table에서도 vertical-align 속성값을 썼었는데요.

(https://begindevelop.tistory.com/37)

 

        <div class="table-cell top">
          <p>안녕하세요.4</p>
        </div>
        <div class="table-cell middle">
          <p>안녕하세요.5</p>
        </div>
        <div class="table-cell bottom">
          <p>안녕하세요.6</p>
        </div>

 

      .top {
        vertical-align: top;
      }
      .middle {
        vertical-align: middle;
      }
      .bottom {
        vertical-align: bottom;
      }

 

vertical align이 쓰인 코드입니다.

결과를 보시면 4, 5, 6이 각각 수직상에서 위, 중간, 아래로 정렬되어 있는 모습을 볼 수 있습니다.

이와 같이 vertical-align은 여러 세부 속성값들이 있는데요, 어떤 것들이 있는지 알아보고 예제 코드로

한 번 써 보겠습니다.

- 속성값

기본값(baseline)

length : 길이값만큼 올리고 내리며, 음수값도 사용 가능합니다.(px값 사용시 baseline 기준으로 이동)

% : 해당 요소가 line-height 기준으로 이동하며 음수값 사용 가능합니다.

 

속성값 설명
baseline 부모 요소 기준 하단 라인에 맞춥니다.
sub 부모 아래 첨자 기준으로 정렬합니다.
super 부모 위 첨자 기준으로 정렬합니다.
text-top 요소의 맨 위를 부모 font의 맨 위에 맞춥니다.
text-bottom 요소의 맨 아래를 부모 font의 맨 아래에 맞춥니다.
top 요소 맨 위를 줄의 가장 큰 요소 맨 위 위치에 맞춥니다.
middle 부모의 중앙에 위치합니다.
bottom 요소 맨 아래를 줄에서 가장 낮은 요소에 맞춥니다.

 

그럼 예제 코드로 한 번 보겠습니다.

(코드가 좀 길어 html과 css 부분으로 나누겠습니다.)

<html 코드>

 

  <body>
    <div class="par">
      부모텍스트
      <div class="base child">
        자식텍스트 baseline
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="sub child">
        자식텍스트 sub
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="super child">
        자식텍스트 super
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="texttop child">
        자식텍스트 text-top
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="textbtm child">
        자식텍스트 text-bottom
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="top child">
        자식텍스트 top
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="middle child">
        자식텍스트 middle
      </div>
    </div>
    <div class="par">
      부모텍스트
      <div class="bottom child">
        자식텍스트 bottom
      </div>
    </div>
  </body>

 

<css 코드>

 

    <style type="text/css">
      div {
        display: inline-block;
        border: 1px solid black;
      }
      div.par {
        width: 500px;
        height: 200px;
        font-size: 30px;
      }
      div.child {
        font-size: 20px;
      }
      div.base {
        vertical-align: baseline;
      }
      div.sub {
        vertical-align: sub;
      }
      div.super {
        vertical-align: super;
      }
      div.texttop {
        vertical-align: text-top;
      }
      div.textbtm {
        vertical-align: text-bottom;
      }
      div.top {
        vertical-align: top;
      }
      div.middle {
        vertical-align: middle;
      }
      div.bottom {
        vertical-align: bottom;
      }
    </style>

 

이렇게 결과창이 나오게 됩니다.

하나씩 볼까요?

 

- baseline(기본값) : 부모 요소의 하단 라인에 맞춥니다.

 

- sub : 부모 아래 첨자 기준으로 정렬합니다.

 

- super : 부모 위 첨자를 기준으로 정렬합니다.

 

- text-top : 요소 맨 위를 부모 font의 맨 위에 맞춥니다.

 

- text-bottom : 요소 맨 아래를 부모 font의 맨 아래에 맞춥니다.

 

그런데 여기서 봐야 할 점이 top, middle, bottom이 우리 생각대로라면 부모의 영역을 기준으로 해서

top은 위쪽, middle은 중간, bottom은 맨 아래에 가 있어야 합니다.

그런데 생각했던 것과 다르게 움직이지 않은 모습을 볼 수 있습니다.

그 이유는 자식이 활동할 수 있는 영역이 한정적이기 때문입니다.

(펜으로 그린거라 퀄리티는 양해 부탁드립니다.)

저렇게 영역이 한정되어 있기 때문에 top, middle, bottom을 해도 저 영역 안에서만 움직일 수 있게

되는 것입니다.

그럼 우리가 원하는 대로 되려면, 저 영역을 확장시켜 줘야겠죠?

 

<html 코드>

 

    <div class="par tmb">
      부모텍스트
      <div class="top child">
      </div>
    </div>
    <div class="par tmb">
      부모텍스트
      <div class="middle child">
      </div>
    </div>
    <div class="par tmb">
      부모텍스트
      <div class="bottom child">
      </div>
    </div>

 

<css 코드>

 

      div.tmb {
        line-height: 200px;
      }
      div.tmb > div {
        width: 50px;
        height: 50px;
      }

 

line-height 속성으로 세로값 전체를 줘서 영역을 확장시켜 줬고, 자식 div의 크기값을 50px씩 고정시켜

줬습니다.

(자식 div의 텍스트를 없앤 것은 가로50px, 세로50px에 텍스트가 다 들어가지 않아 위치값들이 다 깨지기

때문에 아예 텍스트를 지웠습니다.)

top

middle

bottom

(부모텍스트가 가운데로 내려온 것은 부모 영역에 line-height값을 세로 전체로 줬기 때문입니다.)

이렇게 오늘은 예제와 함께 vertical-align 요소에 대해 알아보는 시간을 가졌습니다.

line-height와 함께 수직 정렬을 해야 할 상황일 때 유용하게 사용하시길 바랍니다.

'웹 개발 > 주요 태그, 속성들' 카테고리의 다른 글

css text-align 속성  (0) 2021.12.23
css z-index 속성  (0) 2021.12.23
display table 속성  (0) 2021.12.22
css block, inline, inline-block 속성  (0) 2021.12.22
css box-sizing 속성  (0) 2021.12.22

댓글