우선 vertical-align
테이블 셀 및 인라인 레벨 요소에만 적용 할 수 있습니다.
귀하의 요구를 충족 시키거나 충족시키지 못할 수있는 수직 정렬을 달성하는 몇 가지 방법이 있습니다. 그러나 나는 내가 좋아하는 두 가지 방법 을 보여줄 것이다 .
1. 사용 transform
및top
.valign {
position: relative;
top: 50%;
transform: translateY(-50%);
/* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
요점은 백분율 값 이 포함 블록 의 비율 값과 top
관련이 있다는 것 height
입니다. transform
s 의 백분율 값 은 상자 자체의 크기 (경계 상자)와 관련이 있습니다.
당신이 발생하는 경우 폰트 렌더링 문제 (흐릿한 글꼴을), 수정은 추가하는 것입니다 perspective(1px)
받는 transform
이가되도록 선언 :
transform: perspective(1px) translateY(-50%);
CSS transform
가 IE9 +에서 지원 된다는 점에 주목할 가치가 있습니다.
2. inline-block
(의사) 요소 사용
이 방법에는 선언에 inline-block
의해 가운데에 세로로 정렬되는 두 개의 형제 요소가 있습니다 vertical-align: middle
.
그 중 하나는이 height
의 100%
부모와 다른 하나는 우리의 원하는 요소 누구의 우리가 중앙에 맞 춥니 다 싶어합니다.
.parent {
text-align: left;
position: absolute;
height: 56px;
background-color: pink;
white-space: nowrap;
font-size: 0; /* remove the gap between inline level elements */
}
.dummy-child { height: 100%; }
.valign {
font-size: 16px; /* re-set the font-size */
}
.dummy-child, .valign {
display: inline-block;
vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
<div class="parent">
<div class="dummy-child"></div>
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
마지막으로 사용 가능한 방법 중 하나를 사용 하여 인라인 수준 요소 사이의 간격을 제거해야합니다 .
position: absolute
어디서나 사용하는 이유가 있습니까?