너비 / 높이가 정의 된 div 콘텐츠의 중앙에 세로로 정렬하는 방법은 무엇입니까?


95

수직 정해진 너비 / 높이에서 콘텐츠를 중앙에 올바른 방법 하겠는가 div.

이 예 에는 높이가 다른 두 콘텐츠가 .content있습니다. 클래스를 사용하여 세로로 가운데에 두는 가장 좋은 방법은 무엇입니까 ? (그리고 모든 브라우저에서 작동하며의 솔루션없이 table-cell)

몇 가지 솔루션을 염두에두고 있지만 다른 아이디어를 알고 싶습니다 . 하나는 position:absolute; top:0; bottom: 0;및 margin auto.


2
질문은 완전히 독립적이어야합니다. 그렇지 않으면 URL이 죽으면 쓸모가 없습니다.
— Sparky


아마도,하지만 시간이 내가 원하는 솔루션 ...이 제공하는 더 많은 옵션을 가지고 있지 않았다
— 리카르도 로드리게스

1
tl; dr 2020 년 : display: flex; align-items: center;. 당신이 경우 하지 가 수평뿐만 아니라 중앙에 원하는 추가 flex-direction: column;.
— Devin Burke

답변:


131

나는 이것을 조금 조사했으며 네 가지 옵션이 있음을 발견했습니다.

버전 1 : 테이블 셀로 표시되는 상위 div

display:table-cell상위 div에서를 사용해도 괜찮다 면 다음 옵션을 사용할 수 있습니다.

.area{
    height: 100px;
    width: 100px;
    background: red;
    margin:10px;
    text-align: center;
    display:table-cell;
    vertical-align:middle;
}​

라이브 데모


버전 2 : 디스플레이 블록 및 콘텐츠 디스플레이 테이블 셀이있는 상위 div

.area{
    height: 100px;
    width: 100px;
    background: red;
    margin:10px;
    text-align: center;
    display:block;
}

.content {
    height: 100px;
    width: 100px;
    display:table-cell;
    vertical-align:middle;    
}​

라이브 데모


버전 3 : 상위 div 부동 및 콘텐츠 div를 디스플레이 테이블 셀로 사용

.area{
    background: red;
    margin:10px;
    text-align: center;
    display:block;
    float: left;
}

.content {
    display:table-cell;
    vertical-align:middle;
    height: 100px;
    width: 100px;
}​

라이브 데모


버전 4 : 절대 콘텐츠 위치가있는 상위 div 위치 상대

이 버전에서 내가 가진 유일한 문제는 모든 특정 구현에 대해 CSS를 만들어야한다는 것입니다. 그 이유는 콘텐츠 div가 텍스트가 채워질 높이를 설정해야하고 여백 상단이 그 높이를 파악해야하기 때문입니다. 이 문제는 데모에서 볼 수 있습니다. 콘텐츠 div의 높이 %를 변경하고 여기에 -.5를 곱하여 모든 시나리오에서 수동으로 작동하도록 할 수 있습니다.

.area{
    position:relative; 
    display:block;
    height:100px;
    width:100px;
    border:1px solid black;
    background:red;
    margin:10px;
}

.content { 
    position:absolute;
    top:50%; 
    height:50%; 
    width:100px;
    margin-top:-25%;
    text-align:center;
}​

라이브 데모



1
버전 2는 제가 찾고있는 것이지만 콘텐츠가 세로로 중앙에 배치되지 않습니다. 무엇이 area포함되어 있는지 또는 어떤 content내용이 중요합니까 ?
— Shimmy Weitzhandler 2015

64

display: flex몇 줄의 코드 만으로도이 작업을 수행 할 수 있습니다 . 다음은 그 예입니다.

.container {
  width: 100px;
  height: 100px;
  display: flex;
  align-items: center;
}

라이브 데모


1
@nihiser 또한 수평으로 중앙에 배치하고 싶거나 설정했을 경우에만flex-direction: column
— martin36

32

이 기사 에서이 해결책을 찾았습니다.

.parent-element {
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
}

.element {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}

요소의 높이가 고정되지 않으면 매력처럼 작동합니다.


1
JFYI, 나는 같은 기사를 발견하고 그 접근법을 사용했습니다. Chrome에서 작동하려면 절대 위치로 변경해야했습니다.
— Jack A.

@JackA. position: relative크롬 62에서 작동합니다 . 얼마나 멀리 돌아가는지 확실하지 않습니다.
— 자레드 스미스

0

div의 내용을 세로로 가운데에 맞추는 간단한 방법은 줄 높이를 높이와 동일하게 설정하는 것입니다.

<div>this is some line of text!</div>
div {
width: 400px
height: 50px;
line-height: 50px;
}

그러나 이것은 한 줄의 텍스트에만 작동합니다!

가장 좋은 방법은 div를 컨테이너로 사용하고 값이 포함 된 범위를 사용하는 것입니다.

.cont {
  width: 100px;
  height: 30px;
  display: table;
}

.val {
  display: table-cell;
  vertical-align: middle;
}

    <div class="cont">
      <span class="val">CZECH REPUBLIC, 24532 PRAGUE, Sesame Street 123</span>
    </div>

-7

마진 : all_four_margin

all_four_margin에 50 %를 제공하면 요소가 중앙에 배치됩니다.

style="margin: 50%"

다음에도 적용 할 수 있습니다.

여백 : 오른쪽 상단 왼쪽 하단

여백 : 오른쪽 상단 및 왼쪽 하단

여백 : 상단 및 하단 오른쪽 및 왼쪽

적절한 %를 제공하여 원하는 곳에서 요소를 얻습니다.


5
당신의 문구가 모든 곳에서 약간 분리되어있는 것 같습니다.
— Benjamin Trent

구문이 잘못되어 답변이 명확하지 않으며에 대한 가능한 값을 나열하도록 제한됩니다 margin.
— nuno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.