WEB系キャンパス

(K)CSSでimg画像を中央に表示させる8個の方法まとめ

css_center_top

CSSでレイアウトを組んでいる時によくある希望のレイアウトは「画像の中央配置」

そんな訳で今回は自分がCSSでコーディング作業をしている時に使用している画像の中央配置の方法を色んなサイトで調べたりするのが面倒なので、自分用の備忘録代わりにまとめておきます。

(1)「text-align:center」でインライン要素を中央寄せ

css_center01

「text-align:center」はもっとも一般的な中央配置のプロパティですが、前に「text」と書いてあるとおり、テキストや画像などのインライン要素でしか使えません。画像をただ単に中央に配置したいだけなら、これだけでおけ。

【HTML】

1<p class="img_center">
2   <img src="img/sample_image01.jpg" alt="サンプル画像" />
3</p>

【CSS】

1p.img_center{
2  text-align: center;
3}

(2)「margin:auto;」でブロック要素を中央寄せ

css_center02

ブロック要素に対して中央配置をしたい場合は、「text-align」ではなく「margin」を指定します。

なので、インライン要素である画像でなく、「div」で囲んで「width」と「高さ」が指定されたBoxには「margin」を指定します。

【HTML】

【CSS】

1#center_Box{
2  width:100px;
3  height:100px;
4  background-color: #F70841;
5  margin:auto;
6}

(3)img要素をブロック要素にして「margin:auto;」

css_center03

(1)と(2)の要素を踏まえて、インライン要素であるimg画像を「margin:auto」で中央配置する場合は、「display:block」で画像をブロック要素にしてあげればおけです。

【HTML】

1<div class="img_block">
2<img src="img/sample_image01.jpg" alt="サンプル画像" />
3</div>

【CSS】

1.img_block img{
2     display: block;
3     margin:auto;
4}

(3-2)画像にリンクを張った時の対処法

css_center04

画像をブロック要素にして、「width」と「height」を設定していない状態で、画像にリンクを貼れば当然画像の両サイトも、リンク領域になってしまいます。画像の部分だけをリンク領域にしたい場合は以下のように記述を変更する必要があります。

【HTML】

1<div class="img_block02">
2<a href=""><img src="img/sample_image01.jpg" alt="サンプル画像" /></a>
3</div>

【CSS】

1.img_block02 a{
2     width: 320px;
3     height:230px;
4     display: block;
5     margin:auto;
6}

(4)div内にサイズフリー画像をBoxの上下左右中央に

css_center05

例えば、2つのBoxを並べてその中に画像を真ん中に配置する場合は、まず「display:table-cell」で要素をテーブル化して、その中に入るimg画像に「vertical-align:middle;」で中央そろえにします。

【HTML】

1<div class="free_Box">
2  <img src="img/sample_image01.jpg" alt="サンプル画像" />  
3</div>
4<div class="free_Box">
5  <img src="img/sample_image02.jpg" alt="サンプル画像2" />  
6</div>

【CSS】

1.free_Box{
2  width:600px;
3  height:300px;
4  display:table-cell;
5  text-align:center;
6  border:#F70841 1px solid;
7  line-height: 300px;
8}
9 
10.free_Box img{
11  vertical-align:middle;
12}

(5)positionを使って上下左右中央配置

css_center06

まず、囲ったBoxに「position:relative;」で基準とし、中のimg画像に対して「position: absolute;」で位置を指定できるように準備します。上下左右すべての値を「0」にして、改めて「margin:auto;」で中央に配置しています。「width」と「height」を指定しないと真ん中に行ってくれないので、注意。

【HTML】

1<div class="position_Box">
2  <div class="center_img">
3    <img src="img/sample_image01.jpg" alt="サンプル画像" />   
4  </div><!-- /.center_img -->
5</div><!-- /#position_Box -->

【CSS】

1.position_Box {
2     position:relative;
3     width: 600px;
4     height:300px;
5     margin:0 auto;
6     border:#F70841 1px solid;
7}
8 
9.position_Box .center_img {
10     position: absolute;
11     top: 0;
12     left: 0;
13     right: 0;
14     bottom: 0;
15     margin: auto;
16     width:320px;
17     height:230px;
18}

(6)横幅可変のBOXを使って上下左右中央配置

css_center07

スマホサイトなどは、画像に対して「width」や「height」が可変するので「px」指定ができない場合は以下の設定が有効です。

まず、全体囲いのBoxに「width」を「%」で指定し、中に入る画像を「50%」にするなら、その両サイドに「padding」を「残りの50%÷2=25%」と指定します。

1  <div class="kahen_Box">
2  <div class="kahen_img">
3    <img src="img/sample_image01.jpg" alt="サンプル画像" />   
4  </div><!-- /.center_img -->
5</div><!-- /#position_Box -->

【CSS】

1.kahen_Box{
2     width:80%;
3     min-width: 320px;
4     border:#F70841 1px solid;
5     margin:0 10%;   
6}
7 
8.kahen_img img{
9     width:50%;
10     padding:5% 25%;
11}

今回参考にさせていただいたサイトm(_ _)m

まとめ

今回した6個のやり方を以下の「DEMO」にまとめておきました。

中央寄せの全DEMO

画像を中央配置にするやり方は色々ありますが、状況に分けて使い分ける必要があります。コーディング初心者の時期はバカの一つ覚えの「text-align:center」を指定して、「あれ?真ん中にいかない???」なんて事がよくありました。要素やその他環境などで使い分ける必要があります。方法を片っ端から書きだすのは頭の整理にもなってイイもんです。今回は以上ですm(_ _)m

CSS3の要素を使った画像の中央寄せ(※2018年6月追記)

こちらのエントリーですが、それなりに大勢の人が見ているようなのでCSS3のプロパティを使用した別の中央寄せ、天地中央寄せの方法をアップデートしておきます。

(7)FlexBoxを使っての上下左右中央配置

css_center08
最近は、多くの基本ブラウザでもサポートしているので使うことが多くなったFlexBoxでは、display:inline-blockとdisplay:tableのいいとこ取りって感じで、横並び要素を段落ちさせたり、順番変えたり、配置を調整したり、高さを調整したり、何かとレスポンシブに順応に対応してくれます。

【HTML】

1  <div class="flex_Box">
2  <div class="flex_img">
3    <img src="img/sample_image01.jpg" alt="サンプル画像" />
4  </div><!-- /.flex-img -->
5</div><!-- /.flex-Box -->

ベンダープレフィックスが多いので、やたら長く見えますが、FlexBoxで使っているのは、3要素です。

  • 画像を囲う大元のBoxにdisplay: flex;を適用。
  • justify-content:center;で左右中央。(ボックスを左端から右端へのレイアウト位置)
  • align-items: center;で天地中央(ボックスのクロス軸をもとにレイアウト配置)

【CSS】

1.flex_Box{
2    display: -ms-flexbox;
3    display: -webkit-box;
4    display: -webkit-flex;
5    display: flex;
6    -webkit-justify-content:center;
7    justify-content: center;
8    -ms-flex-align: center;
9   -webkit-box-align: center;
10   -webkit-align-items: center;
11   align-items: center;
12   width: 500px;
13   height: 500px;
14   margin: auto;
15   border: #F70841 1px solid;
16}
17.flex_img{
18    width: 100%;
19    text-align: center;
20}

(8)transformを使って上下中央配置

css_center09
一旦、大元のBoxを「position:relative」で基準点とし、画像のBoxを「position:absolute」で、絶対配置。
topとleftを50%として、なんとなく真ん中っぽいレイアウトだけど、基本的に左上を基準とするので、上記画像のように右下にずれた配置になる。
それを「transform: translate」を使って、位置を調整してあげると、ぴったり真ん中に移動します。

【HTML】

1  <div class="tra_Box">
2  <div class="tra_img">
3    <img src="img/sample_image01.jpg" alt="サンプル画像" />
4  </div><!-- /.tra-img -->
5</div><!-- /.tra-Box -->

【CSS】

1.tra_Box {
2    position:relative;
3    width: 500px;
4    height:500px;
5    border: #F70841 1px solid;
6    margin: auto;
7}
8.tra_img {
9    position: absolute;
10    top: 50%;
11    left: 50%;
12    -webkit-transform: translate(-50%, -50%);
13    transform: translate(-50%, -50%);
14}

中央寄せの全DEMO

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です