<div>에서 세로 정렬 가운데


126

#abc divat 50px및 텍스트 의 높이를 유지 하여 div.

body{
  padding: 0;
  margin: 0;
  margin: 0px auto;
}

#main{
  position: relative;
  background-color:blue;
  width:500px;
  height:500px;
}

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  vertical-align:middle;
}
<div id="main">
 <div id="abc">
     asdfasdfafasdfasdf
 </div>
</div>

답변:


183

을 사용할 수 있으며 거기에 line-height: 50px;필요하지 않습니다 vertical-align: middle;.

데모


여러 라인을했습니다 경우 위 그래서 경우에 당신이 사용하여 텍스트 줄 바꿈 수, 실패 span사용보다와 display: table-cell;display: table;와 함께 vertical-align: middle;, 또한 사용하는 것을 잊지 마세요 width: 100%;에 대한#abc

데모

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  display: table;
  width: 100%;
}

#abc span {
  vertical-align:middle;
  display: table-cell;
}

내가 여기 생각할 수있는 또 다른 해결책은 사용하는 transform부동산의 translateY()경우 Y분명히 Y 축 의미합니다. 그것은 ... 꽤 똑바로 앞으로 당신이 요소에 대한 위치 설정하기 만의 absolute이상 위치 50%로부터 top음의와 그것의 축에서 번역-50%

div {
  height: 100px;
  width: 100px;
  background-color: tomato;
  position: relative;
}

p {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

데모

IE8과 같은 이전 브라우저에서는 지원되지 않지만, 각각 -ms, -moz-webkit접두사 를 사용하여 IE9 및 기타 이전 브라우저 버전의 Chrome 및 Firefox를 만들 수 있습니다 .

에 대한 자세한 내용 transform여기 를 참조 하십시오 .


저는이 간단한 라인 높이 솔루션을 제 직업 생활 내내 알아야했고 지금 만 배웠습니다. 감사합니다, 에일리언 씨.
Nathan Beach

94

간단합니다. 부모 div에 다음을 지정합니다.

display: table;

그리고 자식 div (s)에게 다음을 제공합니다.

display: table-cell;
vertical-align: middle;

그게 다야!

.parent{
    display: table;
}
.child{
    display: table-cell;
    vertical-align: middle;
    padding-left: 20px;
}
<div class="parent">
    <div class="child">
        Test
    </div>
    <div class="child">
        Test Test Test <br/> Test Test Test
    </div>
    <div class="child">
        Test Test Test <br/> Test Test Test <br/> Test Test Test
    </div>
<div>


6
이것은 테이블을 해킹으로 사용하기 때문에 나쁩니다. 대부분의 경우에 작동 할 수 있지만 'table'의 너비를 변경하려면 제대로 작동하지 않을 것입니다 (지금이 솔루션에 문제가 있습니다 )
Kevin Simple

나는 display:table;그것을 작동시키기 위해 부모에 추가 할 필요가 없었 습니다.
VincentPerrin.com 2015 년

아마도 이것은 해킹 일 수 있지만 작동합니다. 대부분의 다른 솔루션은 특정 경우에만 작동하며 종종 우리의 경우에는 사용할 수 없습니다.
Jerry

이 솔루션의 장점 : 모든 유형의 콘텐츠에서 작동합니다 (텍스트뿐만 아니라 한 줄만 ...)
Jerry

77

오래된 질문이지만 요즘 CSS3 는 수직 정렬을 정말 간단 하게 만듭니다. !

#abc다음 CSS에 추가하십시오 .

display:flex;
align-items:center;

간단한 데모

원래 질문 데모 업데이트

간단한 예 :

.vertical-align-content {
  background-color:#f18c16;
  height:150px;
  display:flex;
  align-items:center;
  /* Uncomment next line to get horizontal align also */
  /* justify-content:center; */
}
<div class="vertical-align-content">
  Hodor!
</div>


3
나는 또한 제안 할 것이다 : display : grid; align-items : center; 당신이 정렬에 하나 이상의 개체가 때 수직으로 함께 잘 작동
레오나르도 Daga

어떤 브라우저가 지원 CSS3 됩니까?
Kiquenet

@Kiquenet, 전 세계 시장의 92 % caniuse.com/#search=align-items
Daniel Kucal

완벽하다! 간단하고 쉽습니다 .. 그냥 용기에 추가하십시오
Ujjwal Singh

47

Sebastian Ekström이이 솔루션을 찾았습니다. 빠르고, 더럽고, 정말 잘 작동합니다. 부모의 키를 모르더라도 :

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

여기 에서 전체 기사를 읽어보십시오 .


3
변환의 결과로 인해 사물이 절반 픽셀 위치에 배치 될 수 있으므로 사물이 흐려질 수 있습니다.
Kevin Wheeler

1
해당 문제를 타겟팅하는 게시물에 대한 업데이트가 있습니다. 부모 : transform-style: preserve-3d;!
Andry

8

div의 높이만큼 큰 Line height를 사용할 수 있습니다. 하지만 나에게 가장 좋은 해결책은 이것이다->position:relative; top:50%; transform:translate(0,50%);


4

추가는 line-height어떻습니까?

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  vertical-align:middle;
  line-height: 45px;
}

바이올린, 줄 높이

또는 padding#abc.이것은 패딩을 사용한 결과입니다.

최신 정보

CSS를 추가하십시오.

#abc img{
   vertical-align: middle;
}

결과 . 당신이 찾고있는 것을 희망하십시오.


내가 원하는 방식으로 작동하지 않습니다. 높이 또는 선 높이를 변경하면 뭔가 잘못되었습니다. 이미 어쨌든 답변 감사있어
위독

2

이 시도:

.main_div{
    display: table;
    width: 100%;
}
.cells {
    display: table-cell;
    vertical-align: middle;
}

div를 중앙에 배치하는 또 다른 방법 :

<div id="parent">
    <div id="child">Content here</div>
</div>

#parent {position: relative;}

#child {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    width: 50px;
    height: 100px;
    margin: auto;
}

2

 div {
    height:200px;
    text-align: center;
    padding: 2px;
    border: 1px solid #000;
    background-color: green;
}

.text-align-center {
    display: flex;
    align-items: center;
    justify-content: center;
}
<div class="text-align-center"> Align center</div>


제발 설명 해주세요!
Szabolcs Páll 19.06.21

1

translateY CSS 속성을 사용하여 컨테이너의 텍스트를 세로 중앙에 배치합니다.

<style>
.centertext{

    position: relative;
    top: 50%;
    transform: translateY(40%);

}
</style>

그런 다음 포함하는 DIV에 적용하십시오.

  <div class="centertext">
        <font style="color:white; font-size:20px;">   Your Text Here </font>
  </div>

필요에 맞게 translateY 백분율을 조정합니다. 도움이 되었기를 바랍니다


1

이 코드는 고정 높이를 지정하지 않고 수직 중간 및 수평 중앙 정렬 용입니다.

.parent-class-name {
  position: relative;
}

.className {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  margin: 0 auto;
  transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.