it-swarm-ko.tech

Div의 요소를 세로로 정렬하는 방법은 무엇입니까?

두 개의 이미지와 h1가있는 div가 있습니다. 이들 모두는 div 내에서 서로 옆에 세로로 정렬되어야합니다.

이미지 중 하나는 div 내에 위치하는 absolute이어야합니다.

모든 일반 브라우저에서 작동하려면이 CSS가 필요합니까?

<div id="header">
    <img src=".." ></img>
    <h1>testing...</h1>
    <img src="..."></img>
</div>
646
Abdu

와우,이 문제는 인기가 있습니다. vertical-align 속성의 오해를 기반으로합니다. 이 훌륭한 기사는 다음과 같이 설명합니다.

Gavin Kistner의 vertical-align 또는 "방법 (수직)을 세로로 맞추는 방법"이해 .

“CSS에 센터링하는 방법”는 다양한 상황에 필요한 CSS 센터링 속성을 찾는 데 도움이되는 훌륭한 웹 도구입니다.


간단히 말해서 (그리고 링크 부패를 방지하기 위해):

  • 인라인 요소 (및 only 인라인 요소)는 vertical-align: middle를 통해 컨텍스트에서 세로로 정렬 할 수 있습니다. 그러나 '컨텍스트'는 전체 부모 컨테이너 높이가 아니라 텍스트 행의 높이입니다. jsfiddle example
  • 블록 요소의 경우 수직 정렬이 어렵고 특정 상황에 따라 크게 달라집니다.
    • 내부 요소가 고정 높이 를 가질 수있는 경우 위치를 absolute로 만들고 height, margin-toptop 위치를 지정할 수 있습니다. jsfiddle 예제
    • 중심 요소 가 단일 행 으로 구성되는 경우 부모 높이는 고정되어 있습니다 컨테이너의 line-height를 높이를 채우도록 간단히 설정할 수 있습니다. 이 방법은 내 경험에 매우 다양합니다. jsfiddle 예제
    • … 더 특별한 경우가 있습니다.
845
Konrad Rudolph

Flexbox 지원이 증가함에 따라, 포함 된 요소에 적용된이 CSS는 포함 된 항목을 세로로 가운데에 배치합니다.

.container {        
    display: flex;
    align-items: center;
}

Explorer 10 및 이전 (<4.4) Android 브라우저를 대상으로해야하는 경우 접두사가 붙은 버전을 사용하십시오.

.container {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -ms-flex-align: center;
    -webkit-align-items: center;
    -webkit-box-align: center;

    align-items: center;
}
109
E. Serrano

이 아주 간단한 코드를 사용했습니다.

HTML :

<div class="ext-box">
    <div class="int-box">
        <h2>Some txt</h2>
        <p>bla bla bla</p>
    </div>
</div>

CSS :

div.ext-box { display: table; width:100%;}
div.int-box { display: table-cell; vertical-align: middle; }

분명히 .class 또는 #id를 사용하든간에 결과는 변경되지 않습니다.

104
user2346571

그것은 나를 위해 일했다 :

.vcontainer {
    min-height: 10em;
    display: table-cell;
    vertical-align: middle;
}
44
Romain
 .outer {
   display: flex;
   align-items: center; 
   justify-content: center;
 }

내 친구의 기술 :

HTML :

<div style="height:100px; border:1px solid;">
    <p style="border:1px dotted;">I'm vertically centered.</p>
</div>

CSS :

div:before {content:" "; display:inline-block; height:100%; vertical-align:middle;}
div p {display:inline-block;}

데모 여기

21
abernier

블록 요소를 가운데에 배치하려면 (IE9 이상에서 작동) 래퍼 div이 필요합니다.

.vcontainer {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
}
16
Blacksonic

모두 div 안에 세로로 정렬해야합니다.

어떻게 정렬 했습니까? 텍스트 상단에 정렬 된 이미지의 상단?

이미지 중 하나는 div 내에 절대 위치에 있어야합니다.

DIV와 관련하여 절대적으로 배치 되었습니까? 아마도 당신은 당신이 찾고있는 것을 밖으로 스케치 할 수 있습니다 ...?

fd가 설명 됨 이미지가 인라인으로 표시되도록 H1 요소의 표시를 조정하는 것뿐만 아니라 절대 위치 지정을위한 단계. 이를 위해 vertical-align 스타일을 사용하여 이미지를 정렬 할 수 있다고 추가합니다.

#header h1 { display: inline; }
#header img { vertical-align: middle; }

... 헤더와 이미지를 함께 배치하고 상단 가장자리를 맞 춥니 다. 다른 정렬 옵션이 있습니다. 문서 참조 . 또한 DIV를 삭제하고 이미지를 H1 요소 내부로 옮기는 것이 유용 할 수 있습니다. 이는 컨테이너에 의미 적 가치를 부여하고 H1의 표시를 조정할 필요를 제거합니다.

<h1 id=header">
   <img src=".." ></img>
   testing...
   <img src="..."></img>
</h1>
16
Shog9

이 수식을 사용하면 균열없이 항상 작동합니다.

#outer {height: 400px; overflow: hidden; position: relative;}
#outer[id] {display: table; position: static;}

#middle {position: absolute; top: 50%;} /* For Explorer only*/
#middle[id] {display: table-cell; vertical-align: middle; width: 100%;}

#inner {position: relative; top: -50%} /* For Explorer only */
/* Optional: #inner[id] {position: static;} */
<div id="outer">
  <div id="middle">
    <div id="inner">
      any text
      any height
      any content, for example generated from DB
      everything is vertically centered
    </div>
  </div>
</div>
15
Anita Mandal

내 트릭은 div 안에 1 행 1 열의 테이블을 넣고 너비와 높이를 100 %로 설정하고 속성 vertical-align : middle을 설정하는 것입니다.

<div>

    <table style="width:100%; height:100%;">
        <tr>
            <td style="vertical-align:middle;">
                BUTTON TEXT
            </td>
        </tr>
    </table>

</div>

피들 : http://jsfiddle.net/joan16v/sbqjnn9q/

11
joan16v

거의 모든 방법은 높이를 지정해야하지만 종종 높이가 없습니다.
그래서 여기에 CSS3 3 줄의 트릭이 있는데 높이를 알 필요가 없습니다.

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

IE9에서도 지원됩니다.

공급 업체 접두사가있는

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

출처 : http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/

10
Shadowbob

우리는 CSS 함수 계산을 사용하여 요소의 크기를 계산 한 다음 그에 따라 하위 요소를 배치 할 수 있습니다.

HTML 예제 :

<div class="box">
    <span><a href="#">Some Text</a></span>
</div>

그리고 CSS :

.box {
    display: block;
    background: #60D3E8;
    position: relative;
    width: 300px;
    height: 200px;
    text-align: center;

}
.box span {
    font: bold 20px/20px 'source code pro', sans-serif;
    position: absolute;
    left: 0;
    right: 0;
    top: calc(50% - 10px);
}
a {
    color: white;
    text-decoration: none;
}

여기에서 만든 데모 : https://jsfiddle.net/xnjq1t22/

이 솔루션은 반응 형 divheightwidth에서도 잘 작동합니다.

참고 : calc 함수는 이전 브라우저와의 호환성을 테스트하지 않았습니다.

3
Dashrath

기본적으로 h1은 블록 요소이며 첫 번째 img 다음에 줄에 렌더링되며 두 번째 img가 그 다음 줄에 표시됩니다.

이것을 막으려면 h1이 인라인 흐름 동작을 갖도록 설정할 수 있습니다.

#header > h1 { display: inline; }

Img div 내부의 위치를 ​​절대적으로 정하는 데는 제대로 작동하려면 div를 포함하는 div를 "알려진 크기"로 설정해야합니다. 내 경험에 의하면, 당신은 또한 기본 위치에서 위치 속성을 변경해야합니다.

#header { position: relative; width: 20em; height: 20em; }
#img-for-abs-positioning { position: absolute; top: 0; left: 0; }

이를 작동 시키려면 div.header에서 height, width, position 속성을 점진적으로 제거하여 원하는 효과를 얻으려면 최소한의 필수 속성을 얻으십시오.

업데이트 :

다음은 Firefox 3에서 작동하는 완전한 예제입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>Example of vertical positioning inside a div</title>
        <style type="text/css">
            #header > h1 { display: inline; }
            #header { border: solid 1px red; 
                      position: relative; }
            #img-for-abs-positioning { position: absolute;
                                       bottom: -1em; right: 2em; }
        </style>
    </head>

    <body>
        <div id="header">
            <img src="#" alt="Image 1" width="40" height="40" />
            <h1>Header</h1>
            <img src="#" alt="Image 2" width="40" height="40" 
                 id="img-for-abs-positioning" />
        </div>
    </body>
</html>
3
Mike Tunnicliffe

수직 중심에 CSS를 사용하면 외부 컨테이너를 표처럼 작동시키고 내용을 표 셀로 사용할 수 있습니다. 이 형식에서는 개체가 중앙에 머물러있게됩니다. :)

예를 들어 JSFiddle에서 여러 객체를 중첩했지만 핵심 아이디어는 다음과 같습니다.

HTML

<div class="circle">
  <div class="content">
    Some text
  </div>
</div>

CSS

 .circle {
   /* act as a table so we can center vertically its child */
   display: table;
   /* set dimensions */
   height: 200px;
   width: 200px;
   /* horizontal center text */
   text-align: center;
   /* create a red circle */
   border-radius: 100%;
   background: red;
 }

 .content {
   /* act as a table cell */
   display: table-cell;
   /* and now we can vertically center! */
   vertical-align: middle;
   /* some basic markup */
   font-size: 30px;
   font-weight: bold;
   color: white;
 }

여러 객체 예제 :

HTML

<div class="container">
  <div class="content">

    <div class="centerhoriz">

      <div class="circle">
        <div class="content">
          Some text
        </div><!-- content -->
      </div><!-- circle -->

      <div class="square">
        <div class="content">
          <div id="smallcircle"></div>
        </div><!-- content -->
      </div><!-- square -->

    </div><!-- center-horiz -->

  </div><!-- content -->
</div><!-- container -->

CSS

.container {
  display: table;
  height: 500px;
  width: 300px;
  text-align: center;
  background: lightblue;
}

.centerhoriz {
  display: inline-block;
}

.circle {
  display: table;
  height: 200px;
  width: 200px;
  text-align: center;
  background: red;
  border-radius: 100%;
  margin: 10px;
}

.square {
  display: table;
  height: 200px;
  width: 200px;
  text-align: center;
  background: blue;
  margin: 10px;
}

.content {
  display: table-cell;
  vertical-align: middle;
  font-size: 30px;
  font-weight: bold;
  color: white;
}

#smallcircle {
  display: inline-block;
  height: 50px;
  width: 50px;
  background: green;
  border-radius: 100%;
}

결과

 Result

https://jsfiddle.net/martjemeyer/ybs032uc/1/

3
Henk-Martijn

오늘 당장 CSS3를 사용하여 div의 여러 텍스트 줄을 세로로 정렬하는 새로운 해결 방법을 발견했습니다 (또한 UI를 아름답게 꾸미기 위해 부트 스트랩 v3 그리드 시스템을 사용하고 있습니다). 이는 다음과 같습니다.

.immediate-parent-of-text-containing-div{
    height: 50px;         /* or any fixed height that suits you.*/
}

.text-containing-div {
    display: inline-grid;
    align-items: center;
    text-align: center;
    height: 100%;
}

내 이해에 따라 요소를 포함하는 텍스트의 바로 부모는 어느 정도의 높이가 있어야합니다. 나는 그것이 당신을 도울 것이라는 것을 희망한다. 감사!

2
Shivam

내가 가장 좋아하는 방법은 CSS 그리드를 사용하는 것입니다.

/* technique */

.wrapper {
  display: inline-grid;
  grid-auto-flow: column;
  align-items: center;
  justify-content: center;
}

/* visual emphasis */

.wrapper {
  border: 1px solid red;
  height: 180px;
  width: 400px;
}

img {
  width: 100px;
  height: 80px;
  background: #fafafa;
}

img:nth-child(2) {
  height: 120px;
}
<div class="wrapper">
  <img src="https://source.unsplash.com/random/100x80/?bear">
  <img src="https://source.unsplash.com/random/100x120/?lion">
  <img src="https://source.unsplash.com/random/100x80/?tiger">
</div>
1
Stephen

Div 안에 하나의 셀 테이블 만 사용하십시오! 셀과 테이블 높이를 100 %로 설정하면 수직 정렬을 사용할 수 있습니다.

Div 안에있는 하나의 셀 테이블은 수직 정렬을 처리하고 석기 시대와 호환됩니다.

1
Joel Moses

나를 위해, 그것은 이렇게 작동했습니다 :

<div style="width:70px; height:68px; float:right; display: table-cell; line-height: 68px">
    <a href="javascript:void(0)" style="margin-left: 4px; line-height: 2" class="btn btn-primary">Login</a>
</div>

"a"요소는 부트 스트랩 클래스를 사용하여 버튼으로 변환되며, 이제는 바깥 쪽 "div"내부에서 수직 가운데에 배치됩니다.

0
BernieSF

이 div 내 i 요소에 대한 내 개인 솔루션입니다.

JSFiddle 예제

HTML

<div class="circle">
    <i class="fa fa-plus icon">
</i></div>

CSS

.circle {
   border-radius: 50%;
   color: blue;
   background-color: red;
   height:100px;
   width:100px;
   text-align: center;
   line-height: 100px;
}

.icon {
  font-size: 50px;
  vertical-align: middle;
}
0
danigonlinea

요소를 세로 및 가로로 정렬하는 데는 두 가지 방법이 있습니다.

1. 부트 스트랩 4.3.X

수직 정렬을 위해 : d-flex align-items-center

수평 정렬을 위해 : d-flex justify-content-center

.container {
    height: 180px;
    width:100%;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" 
rel="stylesheet"/>

<div class="d-flex align-items-center justify-content-center bg-info container">
  <div class="bg-light p-2">I am in Center</div>
</div>

2. CSS3

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #17a2b8;
    height: 180px;
    width:100%;
}

.child {
  background-color: #f8f9fa;
  padding: 0.5rem;
}
<div class="container">
  <div class="child">I am in Center</div>
</div>
0
WasiF

# 부모의 div에 중심 자식 div를 만드는 3 가지 방법

  • 절대 위치 결정 방법
  • Flexbox 방법
  • 변환/번역 방법

    enter image description here

    데모

/* 1st way */
.parent1 {
  background: darkcyan;
   width: 200px;
   height: 200px;
   position: relative;
}
.child1 {
  background: white;
  height: 30px;
  width: 30px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -15px;
}

/* 2nd way */
.parent2 {
  display: flex;
  justify-content: center;
  align-items: center;
  background: darkcyan;
  height: 200px;
  width: 200px;
}
.child2 {
  background: white;
  height: 30px;
  width: 30px;
}

/* 3rd way */
.parent3 {
  position: relative;
  height: 200px;
  width: 200px;
  background: darkcyan;
}
.child3 {
  background: white;
  height: 30px;
  width: 30px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div class="parent1">
  <div class="child1"></div>
</div>
<hr />

<div class="parent2">
  <div class="child2"></div>
</div>
<hr />

<div class="parent3">
  <div class="child3"></div>
</div>
0
Vahid Akhtar

나는 1 년 넘게 IE 7 및 8에서도 작동하므로 다음 솔루션을 사용하고 있습니다 (위치 지정 및 선 높이 없음).

<style>
.outer {
    font-size: 0;
    width: 400px;
    height: 400px;
    background: orange;
    text-align: center;
    display: inline-block;
}

.outer .emptyDiv {
    height: 100%;
    background: orange;
    visibility: collapse;
}

.outer .inner {
    padding: 10px;
    background: red;
    font: bold 12px Arial;
}

.verticalCenter {
    display: inline-block;
    *display: inline;
    zoom: 1;
    vertical-align: middle;
}
</style>

<div class="outer">
    <div class="emptyDiv verticalCenter"></div>
    <div class="inner verticalCenter">
        <p>Line 1</p>
        <p>Line 2</p>
    </div>
</div>
0
Arsh