div内で画像を水平方向に中央揃え


388

これはおそらくばかげた質問ですが、画像を中央に揃える通常の方法が機能していないので、私は尋ねると思いました。コンテナー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

5
jsfiddle.net/cEgRp-シンプルtext-align: center
Zoltan Toth

3
ジェイコブ、少なくともブラウザに表示される実際のマークアップを投稿できますが、PHPが注入されたテンプレートは投稿できませんか?また、機能しているjsfiddle.netは常に役立ちます。
Jared Farrish

2
私のコメントを気にしないでください- imgがに囲まれていることに気付きませんでしたa。私はダムです。
Shoaib

回答:


836

CSS Guyは次のことを提案しています。

したがって、おそらく、翻訳:

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

これが私の解決策です:http//jsfiddle.net/marvo/3k3CC/2/


10
これは良い考えではないと思いmargin: autoます。また、指定された幅の値を含む要素に依存しているなど、いくつかの警告があると思います。
Jared Farrish

4
私はまだCSSスキルを向上させているので、興味深い研究ポイントに感謝します。しかし、この場合、彼はコンテナで固定幅を使用しています。
Marvo

1
このコンテキストで指定された幅とは正確にはどういう意味ですか?確かに知っておくと便利な知識のようです。
Shoaib

1
私が作ったこのフィドルを見てください。何を考えればいいのかわかりません。あなたが提案していることは何もしません、そしてimg私はとにかく影響を与えるためにとにかく定義された幅が必要だと私は信じていますauto
Jared Farrish

2
私が提示したソリューションは実際には実装していません。第2に、外側のdivの幅は120pxで、これは画像の幅とほぼ同じなので、実際に画像の中央に配置されているかどうかがわかりません。ここに私の解決策だ: jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS フレックスボックスjustify-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 2017年

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%;画面が画像よりも小さい場合は、画像のサイズ変更に使用 していますが、この場合は中央に配置されていません。これらの2つの属性を適用して中心に
置く

18

これもそれをします

#imagewrapper {
    text-align:center
}

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

もしかしてtext-align:center;margin:0 5px;?追加しました;
jagb

@jagbセミコロンは、セレクターブロックの最後のプロパティには必要ありません。
TylerH 2018年

4
@TylerHそうです、セレクターブロックの最後のプロパティにセミコロンは必要ありませんが、セミコロンを使用することは常に節約されます。CSSファイルを作成すると、別の開発者が後でファイルを編集し、コードを追加します(行の後にセミコロンがないため、そのCSSファイルで以前に記述した行)とその高さ、幅、またはその他の宣言が機能していません(さらに悪いことに、機能していないことに気づいていません)。セミコロンはそのままにしておくほうが安全です。そのため、セミコロンを使用し、セミコロンは省略しないでください。
jagb 2018年

@jagb後で別の開発者がファイルを編集する場合、必要に応じてセミコロンを追加するか、エラーのあるコードを作成するときに問題になります。あなたの最初のコメントへの応答はまだです:「CSSの最後の行のセミコロンはスタイルの選択です」。
TylerH 2018年

私はjagbに同意します。このサイトは良いスタイルの選択を促進する必要があります。良いスタイルは簡単に壊れるコードを残さない。セミコロンをすべての行に配置すると、おそらく1/10秒のコストがかかります。セミコロンを1つだけ見つけるためのデバッグには、何時間もかかります。それが、大手テクノロジー企業がそれを主張する理由です:Google HTML / CSSスタイルガイド-宣言の停止
Georg 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を記述することはお勧めしません。


仕事をしましたが、ブラウザーの互換性のために、変換の他の形式を使用する必要があります。
ジェイスモーク

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内のdiv-enclosing-the-imageを中央に配置するように質問を解釈する方法を確認できます。どちらにしても、同じ解決策です。
Marvo

どちらのソリューションも実際には機能していません。それがうまくいかない前に、私は両方の解決策を試しました。質問の編集を参照してください
Jacob Windsor

3

画像を水平方向に中央揃えにするために、これは機能します:

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

はい。ただし、画像をブロックとして表示して、その下にある退屈な空白を防止する場合、これは機能しません...
Dr Fred

3

これをCSSに追加します。

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

その場合は画像である子要素を参照するだけです。


2
これは、上部マージンへのアクセスが必要な場合に適しています。マージン0よりも優れていますauto
tallgirltaadaa 2017年

2

左と右に同じピクセルパディングを配置します。

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

1

内に画像を配置しnewDivます。を含む幅をdiv画像と同じにします。に適用margin: 0 auto;しますnewDivdivコンテナの中央に配置されます。


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

divの中央に画像を配置する

/* 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

あなたは(そのような入力ボックスを使用している場合など)は、このインラインを行う必要がある場合は、
ここでは私のために働いた迅速なハックは以下のとおりです。あなたの(この場合の画像リンク)を囲む
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*

最終的なコードは例のようになります

<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.