div에서 텍스트를 세로로 정렬하려면 어떻게합니까?


1184

텍스트를 div와 정렬하는 가장 효과적인 방법을 찾으려고합니다. 나는 몇 가지 시도를했지만 아무것도 작동하지 않는 것 같습니다.

.testimonialText {
  position: absolute;
  left: 15px;
  top: 15px;
  width: 150px;
  height: 309px;
  vertical-align: middle;
  text-align: center;
  font-family: Georgia, "Times New Roman", Times, serif;
  font-style: italic;
  padding: 1em 0 1em 0;
}
<div class="testimonialText">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
  in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>





답변:


782

CSS의 수직 센터링
http://www.jakpsatweb.cz/css/css-vertical-center-solution.html

기사 요약 :

CSS 2 브라우저의 경우 display:table/ display:table-cell를 사용 하여 컨텐츠를 중앙에 배치 할 수 있습니다 .

JSFiddle 에서도 샘플을 사용할 수 있습니다 .

div { border:1px solid green;}
<div style="display: table; height: 400px; overflow: hidden;">
  <div style="display: table-cell; vertical-align: middle;">
    <div>
      everything is vertically centered in modern IE8+ and others.
    </div>
  </div>
</div>

#최신 브라우저에서 스타일을 숨기는 방법 을 사용하여 이전 브라우저 (Internet Explorer 6/7)의 해킹을 스타일로 병합 할 수 있습니다 .

div { border:1px solid green;}
<div style="display: table; height: 400px; #position: relative; overflow: hidden;">
  <div style=
    "#position: absolute; #top: 50%;display: table-cell; vertical-align: middle;">
    <div style=" #position: relative; #top: -50%">
      everything is vertically centered
    </div>
  </div>
</div>


3
첫 번째 링크가 더 낫습니다. 두 번째 링크는 높이가 알려진 한 줄의 텍스트 또는 이미지를 사용하기 때문에 복잡해 보이지만 생각합니다. 2 행 또는 3 행의 텍스트가 있거나 텍스트의 높이를 모르는 경우 텍스트가 달라집니다. 선 높이와 어떻게 작동합니까? 요약하자면. 첫 번째 버전을 테스트했으며 IE, Firefox 및 CHROME에서 작동합니다.
Raul

953
이해가 안되는데 왜 우리가이 물건을 파괴해야합니까? 21 세기입니다! 왜 그들은 텍스트 중심에서 CSS에 수직으로 정렬하기위한 하나의 옵션을 포함하지 않는지 : 콘텐츠 중심 : 양쪽 또는 수직 또는 수평으로. 수년 동안 사용 된 기술이 너무 멍청하다는 것은 믿을 수없는 일입니다.
Alexander.Iljushkin

34
@ Flextra : 이것이 사람들이 여전히 그리드 레이아웃을 위해 테이블을 사용하는 이유입니다. 순수한 CSS를 사용하면 세로 정렬 (또는 높이 및 동적 데이터가있는 항목)이 어려울 수 있습니다. 이와 같은 이상한 해킹 ( "레이아웃에서 컨텐츠 분리"개념을 상실) 아이디어를 기꺼이 수행하거나 멀티 패스 렌더링 히트를 사용하여 비 정적 테이블을 사용해야합니다. 나는 tableCSS 팬보이의 마음을 상하게한다는 사실에도 불구하고 최종 사용자로부터 한 번도 불만을 제기 한 적이 없다 . em의 대부분은 간단한 블로그 및 정적 사이트 만 디자인합니다. 우리 중 일부는 비즈니스 소프트웨어를 구축하고 밀도가 높은 데이터 표시가 필요하며 사용자는 기능에 더 관심을 갖습니다.
아무것도 필요 없음

6
네. 내가 "사이트"를 만들면 내가 틀린 HTML을 사용하고 순수한 CSS를 선호한다고 잘못 생각하지 말아라. 그러나 나는 단지 'F'라고 말하고 몇 시간 동안 안감으로 씨름을했던 적이 없다. table. 이제는 상황이 나아졌지 만 비즈니스 웹 앱을 만드는 일부 사용자는 구형 브라우저를 지원해야하며 (IE6은 여전히 ​​일부 클라이언트에서 사용 중입니다!) 블로그를 만드는 사람들은 클라우드에 살면서 전 세계의 모든 사람들이 빠른 연결, 새 컴퓨터 및 포인트 등의 사례 CSS 3와 X 브라우저의 최신 버전 : 일부 락스 플러그인 레이아웃에 대한 단일 행 테이블을 사용 (또는 어쨌든했다)
nothingisnecessary

61
초보자가 사용하는 일종의 구식 해킹으로 테이블이 찌그러지는 것은 꽤 우스운 일이며, 여기서 우리는 DIV의 "display : table-cell"을 훨씬 더 해커 해결 방법으로 사용하고 있습니다.
Desty

743

line-height속성 을 추가 해야하며 해당 속성은의 높이와 일치해야합니다 div. 귀하의 경우 :

.center {
  height: 309px;
  line-height: 309px; /* same as height! */
}
<div class="center">
  A single line.
</div>

실제로 height속성을 완전히 제거 할 수 있습니다.

이것은 한 줄의 텍스트 에서만 작동 하므로주의하십시오.


368
div에 한 줄의 텍스트가있는 경우에만 유효하다고 생각합니다.
WEFX

49
텍스트가 한 줄 이상 실행되면 텍스트에 줄 간격이 생길 것입니다.
David

1
@BobChatting, 그렇습니다. 여러 줄의 텍스트를 허용하는 솔루션에 대한 내 대답을 참조하십시오.
Adam Tomat

2
모든 어린이에게 줄 높이가 전파됨
KVM

4
퍼센트로 작업하지 않음 : 높이 : 100 %; 줄 높이 : 100 %
albanx

475

여기 훌륭한 자료가 있습니다

에서 http://howtocenterincss.com/ :

CSS의 중심은 엉덩이에 고통입니다. 다양한 요인에 따라 그것을 수행하는 방법이있는 것 같습니다. 이를 통합하여 각 상황에 필요한 코드를 제공합니다.

Flexbox 사용

이 게시물을 최신 기술로 최신 상태로 유지하면서 Flexbox를 사용하여 무언가를 중앙에 배치하는 훨씬 쉬운 방법이 있습니다. Flexbox는 Internet Explorer 9 이하 에서 지원되지 않습니다 .

다음은 훌륭한 자료입니다.

브라우저 프리픽스가있는 JSFiddle

li {
  display: flex;
  justify-content: center;
  align-content: center;
  flex-direction: column;
  /* Column | row */
}
<ul>
  <li>
    <p>Some Text</p>
  </li>
  <li>
    <p>A bit more text that goes on two lines</p>
  </li>
  <li>
    <p>Even more text that demonstrates how lines can span multiple lines</p>
  </li>
</ul>

다른 해결책

이것은 zerosixthree 에서 왔으며 6 줄의 CSS로 무엇이든 중앙에 놓을 수 있습니다.

이 방법은 Internet Explorer 8 이하 에서 지원되지 않습니다 .

jsfiddle

p {
  text-align: center;
  position: relative;
  top: 50%;
  -ms-transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  transform: translateY(-50%);
}
<ul>
  <li>
    <p>Some Text</p>
  </li>
  <li>
    <p>A bit more text that goes on two lines</p>
  </li>
  <li>
    <p>Even more text that demonstrates how lines can span multiple lines</p>
  </li>
</ul>

이전 답변

표시된 답변의 링크가 약간 구식 인 경우 유용한 단순하고 브라우저 간 접근 방식입니다.

JavaScript 또는 CSS 행 높이에 의존하지 않고 정렬되지 않은 목록과 div에서 텍스트를 세로 및 가로로 가운데 맞추는 방법 . 얼마나 많은 텍스트를 가지고 있더라도 특정 목록이나 div에 특수 클래스를 적용 할 필요가 없습니다 (코드는 동일합니다). Internet Explorer 9, Internet Explorer 8, Internet Explorer 7, Internet Explorer 6, Firefox, Chrome, Opera 및 Safari를 포함한 모든 주요 브라우저에서 작동합니다 . 최신 브라우저에는없는 CSS 제한으로 인해 두 가지 특수 스타일 시트 (Internet Explorer 7 용과 Internet Explorer 6 용)가 있습니다.

Andy Howard-순서가없는 목록 또는 div에서 텍스트를 가로 및 세로로 가운데 맞추는 방법

필자가 작업 한 마지막 프로젝트에서 Internet Explorer 7/6에 대해 크게 신경 쓰지 않았으므로 약간 벗겨진 버전을 사용했습니다 (예 : Internet Explorer 7 및 6에서 작동하게 만든 항목 제거). 다른 사람에게 유용 할 수 있습니다 ...

JSFiddle

.outerContainer {
  display: table;
  width: 100px;
  /* Width of parent */
  height: 100px;
  /* Height of parent */
  overflow: hidden;
}

.outerContainer .innerContainer {
  display: table-cell;
  vertical-align: middle;
  width: 100%;
  margin: 0 auto;
  text-align: center;
}

li {
  background: #ddd;
  width: 100px;
  height: 100px;
}
<ul>
  <li>
    <div class="outerContainer">
      <div class="innerContainer">
        <div class="element">
          <p>
            <!-- Content -->
            Content
          </p>
        </div>
      </div>
    </div>
  </li>

  <li>
    <div class="outerContainer">
      <div class="innerContainer">
        <div class="element">
          <p>
            <!-- Content -->
            Content
          </p>
        </div>
      </div>
    </div>
  </li>
</ul>


2
문제 없어요. 나는 여전히 사용하는 것을 선호 height: x; line-height: x;하지만 더 자주 여러 줄의 텍스트가 필요하지 않습니다. 그래서이 솔루션을 좋아합니다. 간단하고 재사용 가능한 크로스 브라우저, js가 없으며 약간의 추가 마크 만 필요합니다.
Adam Tomat

텍스트가 상자보다 크면 오버플로됩니다. 오버플로를 방지하기 위해 다양한 방법을 시도했지만 모두 테이블 및 테이블 셀 표시와 충돌하는 것처럼 보입니다. 오버플로를 제한하자마자 수직 센터링이 작동을 멈 춥니 다. jsfiddle.net/2HHLE 어떤 아이디어?
Thomas David Baker

고정 너비 / 높이 및 overflow : hidden을 사용하여 테이블 / 테이블 셀 div를 다른 div에 넣으면 내 자신의 질문에 대답하기 위해 트릭을 수행합니다. bluebones.net/2013/03/
Thomas David Baker

2
@ThomasDavidBaker, 다른 솔루션은 동적이어야하는 경우 100 % 높이를 설정하는 것입니다. 여기 jsfiddle입니다 , 기본적으로 그냥 변경 height: 100px;height: 100%;양을 위해 li및 대한이 .outerContainer.
Adam Tomat

2
여기서 코피 커가되고 싶지 않지만 zerosixthree의 두 번째 솔루션입니다. CSS에는 " -wekbit -transform : translateY (-50 %);" 의 오타가 있습니다 . 아직도 많은 감사합니다 !! 훌륭한 솔루션!
Gnagy 2016 년

186

로 쉽습니다 display: flex. 다음 방법을 사용하면의 텍스트가 div세로 중앙에 배치됩니다.

div {
  display: -webkit-flex;
  display: flex;
  align-items: center;
  /* More style: */
  height: 300px;
  background-color: #888;
}
<div>
  Your text here.
</div>

그리고 원하는 경우 가로 :

div {
  display: -webkit-flex;
  display: flex;
  align-items: center;
  justify-content: center;
  /* More style: */
  height: 300px;
  background-color: #888;
}
<div>
  Your text here.
</div>

필요한 브라우저 버전이 표시되어야합니다. 이전 버전에서는 코드가 작동하지 않습니다.


짧고 달콤한 ... 너무 간단한 일을하는 방법. 나를 위해 IE 11, 크롬과 파이어 폭스 ... 충분한에 작품
splashout

이 답변은 svg에서 이물질 안에 텍스트를 배치하는 데 효과적입니다. 감사!

1
나는 믿는다 : Flex는 모든 것에 대한 해결책이다!
DenisKolodin 2012 년

1
text-align: center긴 텍스트 채우기 폭이 왼쪽으로 정렬되기 때문에, 너무 필요
데니스 콜 로딘

나는 항상 이것에 문제가 있었고, 나는 줄 높이를 높이는 대답을 절대적으로 싫어한다. 이것은 정말 잘 작동했습니다.
Jed Lynch

109

다음을 사용하여 임의의 요소를 쉽게 세로로 가운데에 맞 춥니 다.

HTML :

<div style="height: 200px">
    <div id="mytext">This is vertically aligned text within a div</div>
</div>

CSS :

#mytext {
    position: relative;
    top: 50%; 
    transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
}

이것은 내 텍스트를 div200px 높이의 바깥 쪽의 정확한 세로 가운데에 맞 춥니 다 div. 브라우저 -webkit-에서이 작업을 수행하려면 브라우저 접두사 ( 내 경우 와 같이)를 사용해야 할 수도 있습니다 .

이것은 텍스트뿐만 아니라 다른 요소에도 적용됩니다.


3
보다 안정적인 결과를 얻었습니다 position: absolute;-감사합니다! NB 당신은 포함하고 싶 -ms-transform거나 IE는 다른 것을 채워 넣을 것입니다
Wilf

Plunker는 -web-kit-transform앞에 두는 것이 좋습니다 transform. 아마도 추가하면 -ms-transform@ToniMichelCaubet의 문제를 해결할 수 있습니다.
sakovias

39

디스플레이를 'table-cell'로 설정하고 다음을 적용하면됩니다 vertical-align: middle;.

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

그러나 이것은 http://www.w3schools.com/cssref/pr_class_display.asp 에서 복사 한이 발췌에 따라 Internet Explorer의 모든 버전에서 지원되는 것은 아닙니다 .

참고 : 값 "inline-table", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-row", "table-row Internet Explorer 7 및 이전 버전에서는 -group "및"inherit "가 지원되지 않습니다. Internet Explorer 8에는! DOCTYPE이 필요합니다. Internet Explorer 9은 값을 지원합니다.

다음 표는 http://www.w3schools.com/cssref/pr_class_display.asp 에서도 허용되는 표시 값을 보여줍니다 .

여기에 이미지 설명을 입력하십시오


2
좋은 생각이야! display : table-cell은 다른 영향을 미칩니다.하지만 괜찮다면 좋은 해결책입니다
Brian Low

또한 요소의 높이를 추가하는 것이 중요합니다.
Elan Perach

불행히도 오버플로 : 숨겨진 디스플레이에서 작동하지 않습니다 : table-cell
TheJeff

32

요즘 (더 이상 Internet Explorer 6-7-8이 필요하지 않습니다 .) display: table이 문제 (또는 display: flex)에 CSS 를 사용하려고 합니다.


이전 브라우저의 경우 :

표:

.vcenter {
    display: table;
    background: #eee; /* optional */
    width: 150px;
    height: 150px;
    text-align: center; /* optional */
}

.vcenter > :first-child {
    display: table-cell;
    vertical-align: middle;
}
<div class="vcenter">
  <p>This is my Text</p>
</div>

굽힘:

.vcenter {
    display: flex; /* <-- Here */
    align-items: center; /* <-- Here */
    justify-content: center; /* optional */
    height: 150px; /* <-- Here */
    background: #eee;  /* optional */
    width: 150px;
}
<div class="vcenter">
  <p>This is my text</p>
</div>


이것은 (실제로)이 문제에 대해 가장 좋아하는 솔루션입니다 (간단하고 잘 지원되는 브라우저).

div {
    margin: 5px;
    text-align: center;
    display: inline-block;
}

.vcenter {
    background: #eee;  /* optional */
    width: 150px;
    height: 150px;
}
.vcenter:before {
    content: " ";
    display: inline-block;
    height: 100%;
    vertical-align: middle;
    max-width: 0.001%; /* Just in case the text wrapps, you shouldn't notice it */
}

.vcenter > :first-child {
    display: inline-block;
    vertical-align: middle;
    max-width: 99.999%;
}
<div class="vcenter">
  <p>This is my text</p>
</div>
<div class="vcenter">
  <h4>This is my Text<br/>Text<br/>Text</h4>
</div>
<div class="vcenter">
  <div>
   <p>This is my</p>
   <p>Text</p>
  </div>
</div>


2
@Imray 그는 기본적으로 텍스트 옆에 0px 너비의 인라인 블록 요소를 추가합니다 (의사 : 이전). 그러나이 가짜 블록의 높이는 100 %입니다. 블록과 텍스트가 모두 v 정렬되므로 의도 한대로 렌더링됩니다.
Dan H

1
최고의 답변, 깨끗한 솔루션, IE8 지원
Rocco

텍스트가 줄 바꿈되면 이와 관련하여 문제가 발생할 수 있습니다. 중첩 요소에 다음을 추가하여 수정했습니다. width : 95 %; vertical-align : middle;
trgraglia

텍스트가 너무 길면 작동하지 않습니다. 해결책이 있습니까? jsfiddle.net/cyxuy95q
베타

이전 의견에서 제안한 것처럼 최대 너비 95 % jsfiddle.net/cyxuy95q/1
Toni Michel Caubet

28

이것을 시도하고 부모 div를 추가하십시오.

display: flex;
align-items: center;

1
나는 이것을 좋아합니다-단순하고 현대적인 브라우저에서 작동합니다
Casper Skovgaard

8

다음은 한 줄의 텍스트에 가장 적합한 솔루션입니다.

줄 수를 알고 있으면 약간의 조정으로 여러 줄로 된 텍스트에도 사용할 수 있습니다.

.testimonialText {
    font-size: 1em; /* Set a font size */
}
.testimonialText:before { /* Add a pseudo element */
    content: "";
    display: block;
    height: 50%;
    margin-top: -0.5em; /* Half of the font size */
}

다음은 JSFiddle 입니다.


8
<!DOCTYPE html>
<html>

  <head>
    <style>
      .container {
        height: 250px;
        background: #f8f8f8;
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
        -ms-flex-align: center;
        align-items: center;
        -webkit-box-align: center;
        justify-content: center;
      }
      p{
        font-size: 24px;
      }
    </style>
  </head>

  <body>
    <div class="container">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
  </body>

</html>

세로 정렬시 매력처럼 작동했습니다. 가운데; 나머지는 모두 실패했습니다.
Chiwda

7

Flexbox를 사용하여 div 내부의 가운데 텍스트를 세로로 정렬 할 수 있습니다.

<div>
   <p class="testimonialText">This is the testimonial text.</p>
</div>

div {
   display: flex;
   align-items: center;
}

Flexbox대한 완전한 안내서 에서 자세한 내용을 확인할 수 있습니다 .


6

이 간단한 해결책을 확인하십시오.

HTML

<div class="block-title"><h3>I'm a vertically centered element</h3></div>

CSS

.block-title {
    float: left;
    display: block;
    width: 100%;
    height: 88px
}

.block-title h3 {
    display: table-cell;
    vertical-align: middle;
    height: inherit
}

JSFiddle


5

표 / 표 셀에 의존하지 않고 내용을 세로로 정렬하는 간단한 방법이 있습니다.

http://jsfiddle.net/bBW5w/1/

거기에 컨테이너의 전체 높이를 가정하는 보이지 않는 (너비 = 0) div를 추가했습니다.

Internet Explorer 및 Firefox (최신 버전)에서 작동하는 것 같습니다. 다른 브라우저에서는 확인하지 않았습니다

  <div class="t">
     <div>
         everything is vertically centered in modern IE8+ and others.
     </div>
      <div></div>
   </div>

그리고 물론 CSS :

.t, .t > div:first-child
{
    border: 1px solid green;
}
.t
{
    height: 400px;
}
.t > div
{
    display: inline-block;
    vertical-align: middle
}
.t > div:last-child
{
    height: 100%;
}

5

이것은 내가 찾은 가장 깨끗한 솔루션 (Internet Explorer 9 이상)이며 transform-style다른 답변이 생략 된 ".5 픽셀 이상"문제에 대한 수정 사항을 추가합니다 .

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

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

출처 : 3 줄의 CSS로 세로 정렬


4

가치를 모르는 요소에 대한 간단한 해결책 :

HTML

<div class="main">
    <div class="center">
        whatever
    </div>
</div>

CSS

.main {
    position: relative
}

.center {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -o-transform: translate(-50%, -50%);
}

4

Adam Tomat의 답변에 따르면 div 의 텍스트를 정렬 하는 JSFiddle 예제 가 준비 되었습니다 .

<div class="cells-block">    
    text<br/>in the block   
</div>

CSS에서 display : flex 를 사용하여 :

.cells-block {
    display: flex;
    flex-flow: column;
    align-items: center;       /* Vertically   */
    justify-content: flex-end; /* Horisontally */
    text-align: right;         /* Addition: for text's lines */
}

블로그 게시물 에 다른 예제 와 몇 가지 설명이 있습니다.


4

그리드 항목에서 여백 자동.

Flexbox와 마찬가지로 그리드 항목에 여백 자동을 적용하면 두 축의 중심에 해당합니다.

.container {
  display: grid;
}
.element {
  margin: auto;
}

4

Flexbox 는 부모 div 내부의 여러 요소를 가로 및 세로 중앙에 배치하여 완벽하게 작동했습니다.

HTML 코드 :

<div class="parent-div">
    <div class="child-div">
      <a class="footer-link" href="https://www.github.com/">GitHub</a>
      <a class="footer-link" href="https://www.facebook.com/">Facebook</a>
      <p class="footer-copywrite">© 2019 Lorem Ipsum.</p>
    </div>
  </div>

CSS-Code :
아래 코드는 parent-div 내부의 모든 요소를 ​​가로 및 세로 중심으로 열에 쌓입니다. child-div를 사용하여 두 개의 Anchor 요소를 동일한 줄 (행)에 유지했습니다. child-div가 없으면 세 가지 요소 (앵커, 앵커 및 단락)가 모두 부모 div의 열 안에 쌓입니다. 여기에서 child-div 만 parent-div 열 안에 쌓입니다.

/* */
.parent-div {
  height: 150px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

3

사용하다:

h1 {
    margin: 0;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}
.container {
    height: 200px;
    width: 500px;
    position: relative;
    border: 1px solid #eee;
}
<div class="container">
    <h1>Vertical align text</h1>
</div>

이 트릭을 사용하면 왼쪽에 정렬하기 위해 가운데에 "left : 0"을 추가하지 않으려면 아무 것도 정렬 할 수 있습니다.


2

HTML

<div class="relative"><!--used as a container-->
    <!-- add content here to to make some height and width
    example:<img src="" alt=""> -->
    <div class="absolute">
        <div class="table">
            <div class="table-cell">
                Vertical contents goes here
            </div>
        </div>
    </div>
</div>

CSS

 .relative {
     position: relative;
 }
 .absolute {
     position: absolute;
     top: 0;
     bottom: 0;
     left: 0;
     right: 0;
     background: rgba(0, 0, 0, 0.5);
 }
 .table {
     display: table;
     height: 100%;
     width: 100%;
     text-align: center;
     color: #fff;
 }
 .table-cell {
     display: table-cell;
     vertical-align: middle;
 }

2

flex를 사용하면 브라우저 렌더링의 차이에주의하십시오.

이것은 Chrome과 Internet Explorer 모두에서 잘 작동합니다.

.outer {
    display: flex;
    width: 200px;
    height: 200px;
    background-color: #ffc;
}

.inner {
    display: flex;
    width: 50%;
    height: 50%;
    margin: auto;
    text-align: center;
    justify-content: center;
    align-items: center;
    background-color: #fcc;
}
<div class="outer"><div class="inner">Active Tasks</div></div>

Chrome에서만 작동하는 다음과 비교하십시오.

.outer {
    display: flex;
    width: 200px;
    height: 200px;
    background-color: #ffc;
}

.inner {
    display: flex;
    width: 50%;
    height: 50%;
    margin: auto;
    background-color: #fcc;
}
<div class="outer">
<div class="inner"><span style=" margin: auto;">Active Tasks</span></div>
</div>


1

이것은 CSS에서 사용 div하는 div패턴 의 또 다른 변형입니다 calc().

<div style="height:300px; border:1px solid green;">
  Text in outer div.
  <div style="position:absolute; height:20px; top:calc(50% - 10px); border:1px solid red;)">
    Text in inner div.
  </div>
</div>

이것은 다음과 같은 이유로 작동합니다.

  • position:absolutediv내부의 정확한 배치를 위해div
  • 우리가 알고있는 내부의 높이를 div우리가 그것을 설정하기 때문에 20px.
  • calc(50% - 10px)내부 중앙 에 50 %-높이 절반div

1
부모 div 위치 : 상대
Toni Michel Caubet

1

이것은 잘 작동합니다 :

HTML

<div class="information">
    <span>Some text</span>
    <mat-icon>info_outline</mat-icon>
</div>

사스

.information {
    display: inline-block;
    padding: 4px 0;
    span {
        display: inline-block;
        vertical-align: middle;
    }
    mat-icon {
        vertical-align: middle;
    }
}

이미지 태그 <mat-icon>(글꼴)가 있거나없는 경우


0

흠, 이것을 해결하는 방법은 분명히 많이 있습니다.

그러나 나는 <div>절대적으로 height:100%(실제로 top:0;bottom:0고정 너비) display:table-cell배치되어 있으며 텍스트를 세로로 가운데 맞추는 데 효과가 없었습니다. 내 솔루션에는 내부 범위 요소가 필요했지만 다른 솔루션도 많이 볼 수 있으므로 추가 할 수도 있습니다.

내 컨테이너는 a .label이고 세로로 가운데에 숫자를 원합니다. 나는 절대적으로 위치 top:50%시키고 설정 함으로써 그것을했다line-height:0

<div class="label"><span>1.</span></div>

CSS는 다음과 같습니다.

.label {
    position:absolute;
    top:0;
    bottom:0;
    width:30px;
}

.label>span {
    position:absolute;
    top:50%;
    line-height:0;
}

실제로 참조하십시오 : http://jsfiddle.net/jcward/7gMLx/


1
가장 간단한 솔루션이기 때문에 좋습니다. 단점은 한 줄 텍스트에만 작동한다는 것입니다. 더 긴 텍스트가있는 예제 포크를 참조하십시오. jsfiddle.net/6sWfw
Tomas Tintera

0

css를 사용할 수 있습니다 flexbox.

.testimonialText {
  height: 500px;
  padding: 1em;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid #b4d2d2;
}
<div class="testimonialText">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
  in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>


0

CSS 그리드를 사용하면 나에게 도움이되었습니다.

.outer {
  background-color: grey;
  width: 10rem;
  height: 10rem;
  display: grid;
  justify-items: center;
}

.inner {
  background-color: red;
  align-self: center;
}
<div class='outer'>
  <div class='inner'>
    Content
  </div>
</div>


0

테이블 요소를 포함 시키십시오.

<div>
  <table style='width:200px; height:100px;'>
    <td style='vertical-align:middle;'>
      copenhagen
    </td>
  </table>
</div>


6
테이블은 테이블 형식 데이터 만 처리합니다. 레이아웃 문제를 해결하는 데 사용해서는 안됩니다.
Micros

3
그러나 테이블에 대한 좋은 점은 항상 일관성이 있다는 것입니다. CSS는 매우 다양한 방식으로 해석되며 중첩 된 DIV를 단순하게 처리하기 위해 HTML을 추가하고 혼란을줍니다. CSS는 여전히 심각한 결함
MC9000

4
그렇습니다. 불행히도 이것은 여전히 알려지지 않은 텍스트를 블록에 수직으로 정렬하는 유일한 방법입니다. 왜 CSS 신들이 그렇게 많은 것을 싫어합니까? (모든 브라우저는 일관되게 수행 할 수 있지만 테이블 셀에서만 가능)
T4NK3R

-1

div의 중앙에 콘텐츠 또는 이미지를 표시 하는 몇 가지 트릭 이 있습니다. 답변 중 일부는 정말 좋으며 이것에도 완전히 동의합니다.

CSS에서 절대 수평 및 수직 센터링

http://www.css-jquery-design.com/2013/12/css-techniques-absolute-horizontal-and-vertical-centering-in-css/

예제 에는 10 가지 이상의 기술이 있습니다 . 지금 당신이 원하는 것은 당신에게 달려 있습니다.

의심 할 여지없이 display:table; display:table-Cell더 좋은 방법입니다.

좋은 트릭은 다음과 같습니다.

간계 1-사용하여 display:table; display:table-cell

HTML

<div class="Center-Container is-Table">
  <div class="Table-Cell">
    <div class="Center-Block">
        CONTENT
    </div>
  </div>
</div>

CSS 코드

.Center-Container.is-Table { display: table; }
.is-Table .Table-Cell {
  display: table-cell;
  vertical-align: middle;
}
.is-Table .Center-Block {
  width: 50%;
  margin: 0 auto;
}

트릭 2-사용하여 display:inline-block

HTML

<div class="Center-Container is-Inline">
  <div class="Center-Block">
     CONTENT
  </div>
</div>

CSS 코드

.Center-Container.is-Inline {
  text-align: center;
  overflow: auto;
}

.Center-Container.is-Inline:after,
.is-Inline .Center-Block {
  display: inline-block;
  vertical-align: middle;
}

.Center-Container.is-Inline:after {
  content: '';
  height: 100%;
  margin-left: -0.25em; /* To offset spacing. May vary by font */
}

.is-Inline .Center-Block {
  max-width: 99%; /* Prevents issues with long content causes the content block to be pushed to the top */
  /* max-width: calc(100% - 0.25em) /* Only for Internet&nbsp;Explorer 9+ */
}

간계 3-사용하여 position:relative;position:absolute

<div style="position: relative; background: #ddd; border: 1px solid #ddd; height: 250px;">
  <div style="width: 50%; height: 60%; overflow: auto; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; background: #ccc; text-align: center;">
    <h4>ABSOLUTE CENTER, <br/>
WITHIN CONTAINER.</h4>
    <p>This box is absolutely centered, horizontally and vertically, within its container</p>
  </div>
</div>

-2

CSS :

.vertical {
   display: table-caption;
}

이 클래스를 수직으로 정렬하려는 것을 포함하는 요소에 추가하십시오.


-2

min-height속성 과 함께 사용해야하는 경우 다음에이 CSS를 추가해야합니다.

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