div 내에서 가로로 이미지 중앙


387

이것은 어리석은 질문 일 것입니다. 그러나 이미지를 정렬하는 일반적인 방법이 작동하지 않기 때문에 물어볼 것이라고 생각했습니다. 컨테이너 div 내부의 이미지를 가로로 맞추려면 어떻게해야합니까?

HTML과 CSS는 다음과 같습니다. 또한 축소판의 다른 요소에 대한 CSS도 포함 시켰습니다. 내림차순으로 실행되므로 가장 높은 요소는 모든 것의 컨테이너이고 가장 낮은 요소는 모든 것 안에 있습니다.

#thumbnailwrapper {
      color: #2A2A2A;
      margin-right: 5px;
      border-radius: 0.2em;
      margin-bottom: 5px;
      background-color: #E9F7FE;
      padding: 5px;
      border: thin solid #DADADA;
      font-size: 15px
}
    
#artiststhumbnail {
      width: 120px;
      height: 108px;
      overflow: hidden;
      border: thin solid #DADADA;
      background-color: white;
}
    
#artiststhumbnail:hover {
      left: 50px
}
<!--link here-->

<a href="NotByDesign">
  <div id="thumbnailwrapper">

    <a href="NotByDesign">

      <!--name here-->
      <b>Not By Design</b>
      <br>

      <div id="artiststhumbnail">

        <a href="NotByDesign">

          <!--image here-->
          <img src="../files/noprofile.jpg" height="100%" alt="Not By Design" border="1" />
        </a>
      </div>

      <div id="genre">Punk</div>

  </div>

좋아, PHP없이 마크 업을 추가 했으므로 쉽게 볼 수 있습니다. 두 솔루션 모두 실제로 작동하지 않는 것 같습니다. 상단과 하단의 텍스트는 가운데에 놓일 수 없으며 이미지는 컨테이너 div 안에 가운데에 있어야합니다. 컨테이너에 오버플로가 숨겨져 있으므로 이미지의 중심을 일반적으로 초점이있는 곳으로보고 싶습니다.


1
이미지가 첫 번째 링크 (artisturl 하나)와 같은 줄에 표시되도록되어 있습니까?
Shoaib

5
img수정 text-align: center되지 않은 경우의 영향을받습니다 display.
Jared Farrish 2016 년

4
jsfiddle.net/cEgRp- 단순text-align: center
Zoltan Toth

3
제이콥, 적어도 PHP가 삽입 한 템플릿이 아니라 브라우저에 표시되는 실제 마크 업을 게시 할 수 있습니까? 또한 작동하는 jsfiddle.net이 항상 도움이됩니다.
Jared Farrish 2016 년

2
내 의견에 신경 쓰지 마십시오 .에가 포함 img되어 있음을 눈치 채지 못했습니다 a. 난 멍청이야.
Shoaib

답변:


834

CSS Guy 는 다음을 제안합니다.

따라서 번역은 다음과 같습니다.

#artiststhumbnail a img {
    display:block;
    margin:auto;
}

내 솔루션은 다음과 같습니다. http://jsfiddle.net/marvo/3k3CC/2/


10
나는 이것이 좋은 생각이라고 생각하지 않으며, 또한 margin: auto지정된 너비 값을 가진 포함 요소에 의존하는 것과 같은 몇 가지주의 사항이 있다고 생각 합니다.
Jared Farrish 2016 년

4
여전히 CSS 기술을 향상시키고 있으므로 흥미로운 학습 포인트에 감사드립니다. 그러나이 경우 컨테이너에서 고정 너비를 사용하고 있습니다.
Marvo

1
이 문맥에서 지정된 너비는 정확히 무엇을 의미합니까? 유용한 지식처럼 보입니다.
Shoaib

1
내가 만든바이올린을 보십시오 . 어떻게 생각해야할지 모르겠습니다. 당신이 제안하는 것은 아무것도하지 않을 것이고, img나는에 영향을 미치기 위해 너비를 정의해야한다고 생각합니다 auto.
Jared Farrish 2018 년

2
실제로 제시 한 솔루션을 구현하지 않았습니다. 둘째, 둘러싸는 div의 너비는 120px이며 이미지의 너비와 거의 동일하므로 실제로 이미지의 중앙에 있는지 확인하기가 어렵습니다. 내 해결책은 다음과 같습니다. jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS flexboxjustify-content: center이미지 부모 요소에서 이를 수행 할 수 있습니다 . 이미지의 종횡비를 유지하려면 이미지를 추가 align-self: flex-start;하십시오.

HTML

<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>

CSS

.image-container {
  display: flex;
  justify-content: center;
}

산출:


4
브라우저가이를 지원할 때 탁월한 솔루션입니다. align-items세로로 가운데에 사용할 수도 있습니다 . 중앙에 배치 할 요소에 너비 및 높이 속성이 없으므로 다양한 여백 솔루션이 작동하지 않습니다.
Marc Rochkind

1
필자의 경우 div의 크기는 (예 : 50px) 이미지가 50px로 늘어납니다.
최대

1
@Max이 경우 다음 align-self과 같은 이미지 요소에 적용 할 수 있습니다. jsfiddle.net/3fgvkurd
Manoj Kumar

69

방금 W3 CSS 페이지 에서이 솔루션을 찾았으며 내 문제에 답했습니다.

img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

출처 : http://www.w3.org/Style/Examples/007/center.en.html


max-width: 100%; max-height: 100%;화면이 이미지보다 작은 경우 이미지 크기를 조정하는 데 사용 하지만이 경우 가운데가 아닙니다. 이 두 가지 속성을 적용하는 방법에 대한 제안
Alexey Strakh

18

이것도 할 것입니다

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}

이것을 찾으 셨나요? text-align:center;margin:0 5px;? ;
jagb를

선택기 블록의 마지막 속성에는 @jagb 세미콜론이 필요하지 않습니다.
TylerH

4
@TylerH 사실, 선택자 블록의 마지막 속성에는 세미콜론이 필요하지 않지만 세미콜론을 사용하는 것이 항상 더 안전합니다. CSS 파일을 작성하면 나중에 다른 개발자가 내 파일을 나중에 편집하여 코드를 추가합니다 (줄 뒤에) 세미콜론이 누락되면 CSS 파일에 이전에 작성한 줄과 높이, 너비 또는 기타 선언이 작동하지 않습니다 (또는 더 나쁘게 작동하지 않는다는 것을 알지 못합니다). 세미콜론을 그대로 두는 것이 더 안전하다고 말합니다. 이것이 세미콜론을 사용하고 세미콜론을 절대로 내버려 두지 않는 이유입니다.
jagb

@jagb 다른 개발자가 나중에 파일을 편집하면 필요한 경우 세미콜론을 추가하거나 오류가있는 코드를 작성하는 데 문제가 있습니다. 초기 의견에 대한 답변은 여전히 ​​"CSS의 마지막 줄에있는 세미콜론은 스타일 선택입니다"입니다.
TylerH

나는 jagb에 동의합니다. 이 사이트는 좋은 스타일 선택을 장려해야합니다. 좋은 스타일은 쉽게 깨지는 코드를 남기지 않습니다. 모든 줄에 세미콜론을 넣으려면 1/10 분의 1 정도의 비용이 소요되며 누락 된 세미콜론 하나를 찾기 위해 디버깅하는 데 몇 시간이 걸릴 수 있습니다. 그게 왜 큰 기술 회사는 주장 : 구글 HTML / CSS 스타일 가이드 - 선언 정지
게오르그 Patscheider

14

이미지 또는 요소를 가로로 가운데 맞추기 위해 내가 찾은 (모든 브라우저에서 작동하는 것처럼 보이는) 가장 좋은 것은 CSS 클래스를 만들고 다음 매개 변수를 포함하는 것입니다.

CSS

.center {
    position: relative;          /* where the next element will be automatically positioned */
    display: inline-block;       /* causes element width to shrink to fit content */
    left: 50%;                   /* moves left side of image/element to center of parent element */
    transform: translate(-50%);  /* centers image/element on "left: 50%" position */
}

그런 다음 생성 한 CSS 클래스를 다음과 같이 태그에 적용 할 수 있습니다.

HTML

<img class="center" src="image.jpg" />

다음을 수행하여 요소에서 CSS를 인라인 할 수도 있습니다.

<img style="position: relative; display: inline-block; left: 50%; transform: translate(-50%);" src ="image.jpg" />

...하지만 CSS 인라인을 작성하지 않는 것이 좋습니다. 스타일을 변경하려면 중앙 CSS 코드를 사용하여 모든 태그를 여러 번 변경해야하기 때문입니다.


작업을 수행했지만 브라우저 호환성을 위해서는 다른 형태의 변환을 사용해야합니다.
Jay Smoke

11

이것이 내가 한 일입니다.

<div style="height: 600px">
   <img src="assets/zzzzz.png" alt="Error" style="max-width: 100%; 
        max-height: 100%; display:block; margin:auto;" />
</div>

이렇게하면 이미지 높이가 600px로 제한되고 비율을 유지하면서 부모 컨테이너의 가로 중앙 (또는 부모 너비가 더 작은 경우 크기가 조정 됨)됩니다.


8

나는 사지로 나가서 다음과 같은 말을 할 것입니다.

이 질문에서 실수로 다음 내용이 생략되었다고 생각합니다 (주석 참조).

<div id="thumbnailwrapper"> <!-- <<< This opening element -->
    <div id="artiststhumbnail">
...

따라서 필요한 것은 다음과 같습니다.

#artiststhumbnail {
    width:120px;
    height:108px;
    margin: 0 auto; /* <<< This line here. */
    ...
}

http://jsfiddle.net/userdude/XStjX/3/


흠 ... 그게 효과가있을 겁니다. 내 솔루션의 이미지를 중앙에 배치했지만 질문이 다른 div 내부의 이미지를 중심으로하는 것으로 어떻게 해석 될 수 있는지 볼 수 있습니다. 어느 쪽이든 같은 솔루션입니다.
Marvo

두 솔루션 모두 실제로 작동하지 않습니다. 작동하지 않기 전에 두 솔루션을 모두 시도했습니다. 질문의 편집을 참조하십시오
Jacob Windsor

3

이미지를 가로로 가운데에 맞추려면 다음과 같이 작동하십시오.

<p style="text-align:center"><img src=""></p>

그렇습니다. 그러나 지루한 공백을 방지하기 위해 이미지를 블록으로 표시하려는 경우 더 이상 작동하지 않습니다.
Dr

3

이것을 CSS에 추가하십시오 :

#artiststhumbnail a img {
   display: block;
   margin-left: auto;
   margin-right: auto;
}

이 경우 이미지 인 하위 요소를 참조하십시오.


2
이것은 여전히 ​​상단 여백에 액세스하고 싶을 때 유용합니다. .. 여백 0보다 낫습니다
tallgirltaadaa

2

왼쪽과 오른쪽에 동일한 픽셀 패딩을 넣으십시오.

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">

1

안에 사진을 넣습니다 newDiv. 포함 너비를 div이미지와 동일하게 만드십시오 . 에 적용 margin: 0 auto;하십시오 newDiv. div컨테이너 내부를 중앙에 배치해야합니다 .


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

최소한의 코드로 플렉스 박스를 사용하여 콘텐츠를 정렬 할 수 있습니다

HTML

<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

CSS

.image-container{
  width:100%;
  background:green;
  display:flex;

.image-container{
  width:100%;
  background:green;
  display:flex;
  justify-content: center;
  align-items:center;
}
<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

JS 바이올린 링크 https://jsfiddle.net/7un6ku2m/


1

사업부에서 이미지 중심

/* standar */
div, .flexbox-div {
  position: relative;
  width: 100%;
  height: 100px;
  margin: 10px;
  background-color: grey;  
}

img {
  border: 3px solid red;
  width: 75px;
  height: 75px;
}
/* || standar */


/* transform */
.transform {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */ 
}
/* || transform */


/* flexbox margin */
.flexbox-div {
  display: -webkit-flex;
  display: flex;
  background-color: lightgrey; 
}

.margin-img {
  margin: auto;
}
/* || flexbox margin */


/* flexbox justify align */
.flexbox-justify {
  justify-content: center;
}

.align-item {
  align-self: center;
}
/* || flexbox justify align */
<h4>Using transform </h4>  
<div>
  <img class="transform" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox margin</h4>  
<div class="flexbox-div">
  <img class="margin-img" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox justify align</h4>  
<div class="flexbox-div flexbox-justify">
  <img class="align-item" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>


1

몇 가지 방법을 시도했습니다. 그러나이 방법은 나에게 완벽하게 작동합니다.

<img src="~/images/btn.png" class="img-responsive" id="hide" style="display: block; margin-left: auto; margin-right: auto;" />

1

이미지를 중앙에 배치하는 반응 형 방법은 다음과 같습니다.

.center {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: 100%;
}

0

(예 : 입력 상자를 사용하는 경우 등)이 인라인을해야 할 경우,
여기에 나를 위해 일한 빠른 해킹은 : 당신의 (이 경우 이미지 링크)를 둘러싸고있는
A의 divstyle="text-align:center"

<div style="text-align:center">

<a title="Example Image: Google Logo" href="https://www.google.com/" 
target="_blank" rel="noopener"><img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" alt="Google Logo. Click to visit Google.com" border="0" data-recalc-dims="1" /></a>

<h6><strong>This text will also be centered </strong></h6>

</div> /* ends centering style */

0
##Both Vertically and Horizontally center of the Page
.box{
    width: 300px;
    height: 300px;
    background-color: #232532;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

5
stackoverflow에 오신 것을 환영합니다! 답변에 설명을 추가하십시오.
Maximilian Peters

모든 장치에 대해 페이지의 특정 <div> 또는 <section>세로 및 가로 가운데를 모두 고정 하려면이 스타일 코드를 사용하십시오!
Siva Kaliyamoorthy

이 답변이 다른 질문에 속하는 것 같습니다 :)
Manoj Kumar

0

예, 이와 같은 코드는 정상적으로 작동합니다

<div>
 <img>
</div>

이미지의 스타일 인 U를 생각 나게합니다.

object-fit : *depend on u*

최종 코드는 Example과 같습니다.

<div style="border: 1px solid red;">
    <img
      src="./assets/images/truck-toy.jpg"
      alt=""
      srcset=""
      style="
       border-radius: 50%;
       height: 7.5rem;
       width: 7.5rem;
       object-fit: contain;"
    />
</div>

최종 결과


0

컨테이너에서 flex 속성을 사용하는 것은 수직 및 수평으로 중앙에 배치 할 수있는 정답입니다.

여기에서 가장 좋은 대답은 항목을 세로, 가로로 가운데 맞추는 데 효과적이지 않습니다.


OP는 분명히 수평 정렬을 요구했습니다.
Alvin Moyo

-1
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">


      <style>
      body{
  /*-------------------important for fluid images---\/--*/
  overflow-x: hidden; /* some browsers shows it for mysterious reasons to me*/
  overflow-y: scroll;
  margin-left:0px;
  margin-top:0px;
  /*-------------------important for fluid images---/\--*/
      }
      .thirddiv{
      float:left;
      width:100vw;
      height:100vh;
      margin:0px;
      background:olive;
      }
      .thirdclassclassone{
      float:left;   /*important*/
      background:grey;
      width:80vw;
      height:80vh; /*match with img height bellow*/
      margin-left:10vw; /* 100vw minus "width"/2    */
      margin-right:10vw; /* 100vw minus "width"/2   */
      margin-top:10vh;
      }
      .thirdclassclassone img{
      position:relative; /*important*/
     display: block;  /*important*/
    margin-left: auto;  /*very important*/
    margin-right: auto;  /*very important*/
    height:80vh; /*match with parent div above*/

    /*--------------------------------
    margin-top:5vh;
    margin-bottom:5vh;
    ---------------------------------*/
    /*---------------------set margins to match total  height of parent di----------------------------------------*/
      }
    </style>           
</head>  
<body>
    <div class="thirddiv">
       <div class="thirdclassclassone">
       <img src="ireland.png">
    </div>      
</body>
</html>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.