div 내에서 가운데와 가운데에 이미지 정렬


302

나는 div를 따랐다.

<div id="over" style="position:absolute; width:100%; height:100%>
 <img src="img.png">
</div>

div의 가운데와 가운데에 위치하도록 이미지를 정렬하는 방법은 무엇입니까?


12
복제 2 분 전 : CSS : image middle
Pekka


정답을 하나 선택해보십시오.
McSonk

답변:


406

body {
  margin: 0;
}

#over img {
  margin-left: auto;
  margin-right: auto;
  display: block;
}
<div id="over" style="position:absolute; width:100%; height:100%">
  <img src="http://www.garcard.com/images/garcard_symbol.png">
</div>

JSFiddle


4
display: block;내 함정이었다. TnX
Ujjwal Singh

2
다음은 작동하지 않습니다. 내가 뭘 잘못하고 있니? <html> <head> <style> #over img {표시 : 블록; 왼쪽 여백 : 자동; 오른쪽 여백 : 자동; } </ style> </ head> <body> <div id = "over"style = "position : absolute; width : 100 %; height : 100 %"> <img src = " img8a.flixcart.com/image/ tablet / f / k / t /… "> </ div> </ body> </ html>
nizam.sp 2013 년

1
우리는 사용하지 않을 경우 display: block기본값은 display: inline에 따른 w3schools.com/cssref/pr_class_display.asp . 왜 블록을 사용해야합니까? 나는 나를 위해 일했지만 블록이 img를 중심으로하고 인라인이 아닌 이유를 잘 모르겠습니다.
user3731622

인라인은 줄에서 움직이지 않기 때문에 실제로 줄에 있습니다. 마진 자동 효과가 없습니다.
netalex

12
이것은 수직으로 정렬되지 않습니다
alpadev

170
<div style="display:table-cell; vertical-align:middle; text-align:center">
<img src="img.png">
</div>

6
가장 유용한 답변입니다!
일리안 안드레 에프

1
매우 짧고 쉬운 솔루션이지만 고정 된 백분율이 아닌 너비와 높이로만 작동하는 것으로 보입니다. 그것은 +1이지만 float와 함께 작동합니다. — jsfiddle.net/2s2nY/2
magnetronnie

1
그러나 이것은 수직 정렬 만하고 수평 오른쪽은 수행하지 않습니까?
V-SHY

1
이미지의 너비가 div의 너비보다 큰 경우 작동하지 않습니다.
Davuz

5
우리가 display : table-cell을 제거하면; 그것은 실제로 작동합니다.
Ahesanali Suthar

103

Flexbox 레이아웃을 사용하여 수행 할 수도 있습니다.

정적 크기

.parent {
    display: flex;
    height: 300px; /* Or whatever */
    background-color: #000;
}

.child {
    width: 100px;  /* Or whatever */
    height: 100px; /* Or whatever */
    margin: auto;  /* Magic! */
}
<div class="parent">
    <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

동적 크기

html, body {
  width: 100%;
  height: 100%;
  display: flex;
  background-color: #999;
}

* {
  margin: 0;
  padding: 0;
}

.parent {
  margin: auto;
  background-color: #000;
  display: flex;
  height: 80%;
  width: 80%;
}

.child {
  margin: auto;  /* Magic! */
  max-width: 100%;
  max-height: 100%;
}
<div class="parent">
  <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

기사 에서 예제를 찾았습니다 . 레이아웃을 사용하는 방법을 설명하는 훌륭한 작업입니다.


정적 크기에서는 자식의 너비와 높이가 필요하지 않습니다 (적어도 내 Firefox 버전에서는).
로드리고

91

그 이미지가 컨테이너 내에서 세로로 가운데에 오기를 원했던 것 같습니다. (나는 그것을 제공 한 답변을 보지 못했다)

일 바이올린 :

  1. 순수한 CSS 솔루션
  2. 문서 흐름을 중단하지 않음 (플로트 또는 절대 위치 지정 없음)
  3. 크로스 브라우저 호환성 (IE6조차도)
  4. 완벽하게 반응합니다.

HTML

<div id="over">
    <span class="Centerer"></span>
    <img class="Centered" src="http://th07.deviantart.net/fs71/200H/f/2013/236/d/b/bw_avlonas_a5_beach_isles_wallpaper_image_by_lemnosexplorer-d6jh3i7.jpg" />
</div>

CSS

*
{
    padding: 0;
    margin: 0;
}
#over
{
    position:absolute;
    width:100%;
    height:100%;
    text-align: center; /*handles the horizontal centering*/
}
/*handles the vertical centering*/
.Centerer
{
    display: inline-block;
    height: 100%;
    vertical-align: middle;
}
.Centered
{
    display: inline-block;
    vertical-align: middle;
}

참고 : 이 솔루션은 요소 내의 요소를 정렬하는 것이 좋습니다. IE7의 경우 .Centered블록 요소에 클래스를 적용 할 때 다른 트릭을 사용하여 inline-block작업해야합니다. (IE6 / IE7은 블록 요소에서 인라인 블록으로 잘 재생되지 않기 때문에)


추가 span요소 대신 의사 요소를 사용할 수 있습니다 :before. jsfiddle.net/xaliber/cj6zhtp0
deathlock

@deathlock 잘 알려져 있습니다. 하지만 이전 IE 브라우저 (의사 요소를 지원하지 않는 브라우저)를 대상으로했습니다.
avrahamcool

1
그렇지는 않지만 HTML은 프리젠 테이션이 아닌 구조에만 사용해야합니다. 이 작업은 CSS이므로 의사 요소입니다.
deathlock

1
"문서 흐름을 중단하지 않음 (플로트 또는 절대 위치 지정 없음)"은 무엇입니까? 무엇입니까 #over { position:absolute; width:100%; height:100%;?
Rodrigo

1
@Rodrigo는 실제로 구형 브라우저를 타겟팅 할 필요가없는 경우이 flexbox를 사용하는 것이 좋습니다.
avrahamcool


32

display : flex css 속성을 사용하면이 작업을 쉽게 수행 할 수 있습니다.

#over {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

이것은 나를 위해 일하는 사람입니다. PUG / SCSS에 깊이 중첩 된 이미지. 감사.
Mogens TrasherDK

29
#over {position:relative; text-align:center; 
       width:100%; height:100%; background:#CCC;}

#over img{
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

이것은 정답입니다. 실제로는 세로와 가로로 중앙에 있습니다.
Alexander Kim

지금까지 가장 좋은 답변입니다.
kiran puppala

13

여기에 제시된 다른 솔루션에 여전히 문제가 있습니다. 마지막으로 이것은 나를 위해 가장 잘 작동했습니다.

<div class="parent">
    <img class="child" src="image.png"/>
</div>

CSS3 :

.child {
 display: block;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
 -webkit-transform: translate(-50%, -50%); /* Safari and Chrome */
 -moz-transform: translate(-50%, -50%); /* Firefox */
 -ms-transform: translate(-50%, -50%); /* IE 9 */
 -o-transform: translate(-50%, -50%); /* Opera */
 // I suppose you may like those too:
 // max-width: 80%;
 // max-height: 80%;
}

이 페이지에서 해당 접근 방식 대한 자세한 내용을 볼 수 있습니다 .


부모 CSS도 추가해야했지만 코드가 완벽하게 작동했습니다! 위치 : 상대; 폭 : 100 %; 왼쪽으로 뜨다; 오버플로 : 숨겨진; 최소 높이 : 189px;
user2593040

10

기본적으로 좌우 여백을 자동으로 설정하면 이미지가 중앙 정렬됩니다.

<div id="over" style="position:absolute; width:100%; height:100%>
<img src="img.png" style="display: block; margin: 0 auto;">
</div>


7

Daaawx의 대답은 효과가 있지만 인라인 CSS를 제거하면 더 깨끗하다고 ​​생각합니다.

body {
	margin: 0;
}

#over img {
	margin-left: auto;
	margin-right: auto;
	display: block;
}
div.example {
  position: absolute;
  width: 100%;
  height: 100%;
}
<div class="example" id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>


6

우수한 divtext-align : center로 설정 한 상태에서 imgdisplay : inline-block으로 설정 하면 작업도 수행됩니다.

편집 : display : inline-block >>> 을 사용하는 사람들에게 두 가지 div와 같은 것을 잊지 마십시오.

<div>Div1 content</div>NOSPACEHERE<div>Div2 content</div>

그들 사이에 공백이 없습니다 (여기에서 볼 수 있듯이).

이들 (인라인 블록 고유) 간격을 피하는 것이 기본입니다. 이 차이는 내가 지금 쓰고있는 두 단어 사이에서 볼 수 있습니다! :-) 그래서 .. 이것이 여러분의 도움이되기를 바랍니다.


6

단순한. 2018. FlexBox. 브라우저 지원을 확인하려면- 최소 솔루션을 사용할 수 있습니까?


div#over { 
   display: flex; 
   justify-content: center; 
   align-items: center; 
}


가장 광범위한 브라우저 지원을 받으려면

div#over { 
   display: -webkit-flex;
   display: -ms-flex; 
   display: flex; 
   justify-content: center; 
   -ms-align-items: center; 
   align-items: center; 
}

5

많은 접근 방식을 시도했지만 컨테이너 div 내부의 여러 인라인 요소에 대해서만 작동합니다. 다음은 div의 모든 것을 중간에 정렬하는 코드입니다.

CSS

.divContainer
{
    vertical-align: middle;
    text-align: center; <!-- If you want horizontal center alignment -->
}
.divContainer > *
{
    vertical-align: middle;
}

HTML

<div class="divContainer">
    <span>Middle Text</span>
    <img src="test.png"/>
</div>

샘플 코드는 다음과 같습니다. https://jsfiddle.net/yogendrasinh/2vq0c68m/



3

이 최소한의 코드를 사용해보십시오 :

<div class="outer">
    <img src="image.png"/>
</div>

그리고 CSS :

.outer{
  text-align: center;
}
.outer img{
  display: inline-block;
}

3

글쎄, 우리는 2016 년입니다 ... flexbox를 사용하지 않는 이유는 무엇입니까? 또한 반응이 좋습니다. 즐겨.

#over{
display:flex;
align-items:center;
justify-content:center;
}
<div id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>


1
css3를 사랑하십시오! 감사합니다. 그러나 이것은 최신 브라우저에서만 작동한다는 점에 유의하는 것이 좋습니다 (IE 제외). 다른 모든 브라우저는 효과가 없습니다.
Neel

2

많은 대답은 사용을 제안 margin:0 auto하지만 이것은 중심으로 만들려고하는 요소가 왼쪽이나 오른쪽에 떠 있지 않은 경우에만 작동합니다. 즉 floatCSS 속성이 설정되어 있지 않습니다. 이렇게하려면 display속성을 table-cell적용한 다음 왼쪽과 오른쪽의 여백을 자동에 적용하여 스타일이style="display:table-cell;margin:0 auto;"


2
    <div>
    <p style="text-align:center; margin-top:0px; margin-bottom:0px; padding:0px;">
    <img src="image.jpg" alt="image"/>
    </p>    
    </div>

2

HTML :

<div id="over">
    <img src="img.png">
</div>

CSS :

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}

코드를 던지는 것이 아니라 주석을 추가하는 것이 가장 좋습니다.
Parkash Kumar

2

가로 중앙에

#over img {
    display: block;
    margin: 0 auto;
    clear:both;
}

다른 방법 :

#over img {
    display: inline-block;
    text-align: center;
}

수직 중심의 경우 :

   #over img {

           vertical-align: middle;
        }

2

이것은 나를 위해 일했다 :

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}

2

이것은 나를 위해 속임수를했다.

<div class="CenterImage">
         <asp:Image ID="BrandImage" runat="server" />
</div>

'참고 :이 경우'BrandImage '와 관련된 CSS 클래스가 없습니다.

CSS :

.CenterImage {
    position:absolute; 
    width:100%; 
    height:100%
}

.CenterImage img {
    margin: 0 auto;
    display: block;
}

2

이것은 이미지를 중앙 정렬해야하고 이미지에 부모 div가 전체 화면을 덮고있을 때 효과적이었습니다. 즉 높이 : 100 % 및 너비 : 100 %

#img{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
}

1

포지셔닝을 사용하십시오. 다음은 나를 위해 일했습니다 ...

이미지의 중심을 확대 한 상태에서 (이미지가 div를 채 웁니다) :

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

이미지 가운데로 확대하지 않고 (이미지가 div를 채우지 않음 ) :

   div{
        display:block;
        overflow:hidden;
        width: 100px; 
        height: 100px;  
        position: relative;
    }
    div img{
        width: 70px; 
        height: 70px; 
        top: 50%;
        left: 50%;
        bottom: 50%;
        right: 50%;
        position: absolute;
    }

1

이에 대한 답변은 이미지를 세로로 정렬하지 않습니다. 최신 브라우저에 적합한 솔루션은 flexbox입니다. 플렉스 컨테이너는 품목을 수평 및 수직으로 정렬하도록 구성 할 수 있습니다.

<div id="over" style="position:absolute; width:100%; height:100%; display: flex; align-items: center; justify-content: center;">
    <img src="img.png">
</div>

이 솔루션은 표시된 답변과 달리 질문에 답변하고 작동합니다. 다운 투표자는 다운 투표 결정을 자세히 설명 할 수 있습니까?
WDuffy

6
검토 대기열에서 : 소스 코드 주위에 컨텍스트를 추가하도록 요청하십시오. 코드 전용 답변은 이해하기 어렵습니다. 게시물에 더 많은 정보를 추가 할 수 있다면 독자와 미래 독자 모두에게 도움이 될 것입니다.
RBT

1
그것은 downvote를 정당화하지 않습니다. 대답은 기술적으로 정확하며 미래 독자에게 도움이 될 것입니다. 하우스 규칙을 준수하기 위해 답변 본문을 업데이트했지만 코드 전용 답변을 식별하는 것이 쉬운 작업이므로 핵심 팀이 더 직접적인 솔루션을 구현해야 할 수도 있습니다.
WDuffy

0

이 솔루션을 살펴볼 수 있습니다.

상자에서 이미지를 가로 및 세로로 가운데 맞추기

<style type="text/css">
.wraptocenter {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: ...;
    height: ...;
}
.wraptocenter * {
    vertical-align: middle;
}
.wraptocenter {
    display: block;
}
.wraptocenter span {
    display: inline-block;
    height: 100%;
    width: 1px;
}
</style>
<!--[if lt IE 8]-->
<style>
.wraptocenter span {
    display: inline-block;
    height: 100%;
}
</style>
<!--[endif]-->

<div class="wraptocenter"><span></span><img src="..." alt="..."></div>

0

간단한 방법은 div와 이미지에 대해 별도의 스타일을 만든 다음 독립적으로 배치하는 것입니다. 이미지 위치를 50 %로 설정하려면 다음과 같은 코드가 표시됩니다.

#over{
  position:absolute;
  width:100%;
  height:100%;
}
#img{
  position:absolute;
  left:50%;
  right:50%;
}
<div id="over">
 <img src="img.png" id="img">
</div>


모든 브라우저에서 작동하는지 알려주십시오. 비록 모든 브라우저가 지원해야하는 기본 사항이지만 (그렇지 않으면 브라우저라고 부르지 마십시오)
KSJ10

0
#over {
    display: table-cell; 
    vertical-align: middle; 
    text-align: center;
    height: 100px;
}

필요에 따라 높이 값을 수정하십시오.


0

이 작동합니다.

테스트 중요 : 코드 스 니펫을 실행하려면 왼쪽 버튼 RUN code snippet을 클릭 한 다음 오른쪽 링크를 클릭 하십시오.

#fader{
position:fixed;z-index: 10;
top:0;right:0;bottom:0;left:0;
opacity: 0.8;background: black;
width:100%;height:100%;
text-align: center;
}
.faders{display:inline-block;height:100%;vertical-align:middle;}
.faderi{display:inline-block;vertical-align:middle;}
<div id="fader">
<span class="faders"></span>
<img class="faderi" src="https://i.stack.imgur.com/qHF2K.png" />
</div>

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