div内の中央と中央に画像を揃える


302

私は次のdivを持っています

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

divの中央と中央に配置されるように画像を配置する方法は?


12
Duplicateが2分前に尋ねました:CSS:画像の中央
Pekka

1
ここでは同様のトピック:stackoverflow.com/questions/18516317/...
ハシェムQolami

正しい答えを1つ選択することを検討してください。
McSonk 2017

回答:


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 {display:block; margin-left:auto; margin-right:auto; } </ 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 2016年

インラインは列に沿って移動しないため、実際には列に沿って移動します。したがって、マージンオートは無効です。
netalex

12
これは垂直方向に整列しません
alpadev

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

6
トップ回答、非常に役に立ちました!
Ilian Andreev 2013年

1
非常に短くて簡単な解決策ですが、パーセンテージではない固定の幅と高さでしか機能しないようです。フロートでも機能しますが、そのため+1します。— jsfiddle.net/2s2nY/2
Magnetronnie

1
しかし、これは垂直方向の整列だけを行っていますが、水平方向の右揃えは行っていませんか?
V-SHY 2015年

1
画像の幅がdivの幅より大きい場合は機能しません。
Davuz、2015年

5
display:table-cellを削除すると、それは完全に機能します。
Ahesanali Suthar

103

これは、フレックスボックスレイアウトを使用して行うこともできます。

静的サイズ

.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、あなたは擬似要素を使用することができます:beforejsfiddle.net/xaliber/cj6zhtp0
deathlock

@deathlockよく知られています。しかし、私は古いIEブラウザー(疑似要素をサポートしていない)をターゲットにしていました。
avrahamcool 2016年

1
そうではありませんが、HTMLは構造ではなくプレゼンテーションにのみ使用してください。その仕事はCSSに任されているため、疑似要素です。
デスロック

1
「ドキュメントのフローを壊さない(フロートや絶対配置なし)」とはどういう意味ですか?なに#over { position:absolute; width:100%; height:100%;
ロドリゴ

1
@Rodrigo確かに、古いブラウザーをターゲットにする必要がない場合は、このフレックスボックスが推奨されるアプローチです。
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

これまでのベストアンサー。
キランプパラ

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%; float:左; オーバーフロー:非表示。min-height:189px;
user2593040 16

10

基本的に、左右のマージンをautoに設定すると、画像が中央揃えになります。

<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

設定IMGをするインラインブロック:ディスプレイ優れ設定ながらDIV中心:テキスト整列をあまりにも仕事をします

編集:display:inline-blockで遊んでいる人たちへ>>>次のような2つのdivを忘れないでください

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

(ここに見られるように)それらの間に本当にスペースはありません。

それらの間のこれらの(インラインブロック固有の)ギャップを回避するための基本です。これらのギャップは、私が今書いている2つの単語の間に見ることができます!:-)だから..これがあなたの一部に役立つことを願っています


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 2019年

1
それは反対票を正当化しません。答えは技術的に正しく、将来の読者を助けるでしょう。ハウスルールを尊重するために回答の本文を更新しましたが、コードのみの回答を特定することは簡単な作業であるため、おそらくより直接的なソリューションをコアチームが実装する必要があります。
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

これは動作するはずです。

テストの重要性:コードスニペットを実行するには、左ボタンの[コードスニペットを実行]をクリックし、次にページ全体を右クリックします。

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