Вирівняйте зображення в центрі та посередині в розділі


302

У мене є наступний дів

<div id="over" style="position:absolute; width:100%; height:100%>
 <img src="img.png">
</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 {display: block; край-ліворуч: авто; margin-right: авто; } </style> </head> <body> <div id = "over" style = "позиція: абсолютна; ширина: 100%; висота: 100%"> <img src = " img8a.flixcart.com/image/ планшет / f / k / t /… "> </div> </body> </html>
nizam.sp

1
Якщо ми не використовуємо display: blockза замовчуванням, це display: inlineвідповідно до w3schools.com/cssref/pr_class_display.asp . Чому нам потрібно використовувати блок? Я працював для мене, але не впевнений, чому блок буде в центрі img, а вбудований не буде.
користувач3731622

тому що рядки не рухаються по лінії, це дійсно в рядку. тому автоматична маржа неефективна.
netalex

12
Це не вирівнюється вертикально
alpadev

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

6
найкраща відповідь, дуже корисна!
Ільян Андрєєв

1
Дуже коротке та просте рішення, але воно, здається, працює лише з фіксованою непроцентною шириною та висотою. Це працює з поплавками, хоча так +1 для цього. - jsfiddle.net/2s2nY/2
магнетронніе

1
але це робиться лише вертикальне вирівнювання, але не горизонтальне праворуч?
V-SHY

1
Він не працюватиме, якщо ширина зображення більше, ніж ширина Div.
Давуз

5
Якщо ми видалимо відображення: table-cell; це працює бездоганно.
Ахесаналі Сутар

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 це добре відомо. але я орієнтувався на старі браузери IE (які не підтримували псевдоелементи).
avrahamcool

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;
}

Це правильна відповідь, яка насправді орієнтується як по вертикалі, так і по горизонталі.
Олександр Кім

Найкраща відповідь поки що.
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%; поплавок: зліва; переповнення: приховано; мінімальна висота: 189 пікселів;
користувач2593040

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

установка IMG для відображення: вбудований блок , а встановивши чудовий DIV для вирівнювання тексту: центр буде робити цю роботу теж

EDIT: тим людям, які грають з дисплеєм: вбудований блок >>>, не забувайте, що, наприклад, два диви подобаються

<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

Я спробував багато підходів, але тільки цей працює для декількох вбудованих елементів всередині контейнера, що ділиться. Ось код, щоб вирівняти все в розділі в середині.

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 році ... чому б не скористатися флексбоком? Він також чуйний. Насолоджуйтесь.

#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). Усі інші браузери не матимуть ефекту.
Ніл

2

багато відповідей пропонує використовувати, margin:0 autoале це працює лише тоді, коли елемент, який ви намагаєтеся зробити в центрі, не плаває зліва або справа, тобто floatатрибут css не встановлений. Для цього застосуйте 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;
}

Найкраще, якщо ви додасте там якийсь коментар, а не просто підкиньте код.
Паркаш Кумар

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>

'Примітка: не майте в цьому випадку класу css, призначеного до' BrandImage '

CSS:

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

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

2

Це спрацювало для мене, коли вам доведеться вирівняти зображення в центрі, а ваш батьківський поділ до зображення має кришки на весь екран. тобто висота: 100% і ширина: 100%

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

1

Використовуйте позиціонування. Наступне працювало для мене ...

Зі збільшенням до центру зображення (зображення заповнює діву):

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{
        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
З черги на огляд : чи можу я попросити вас додати деякий контекст навколо свого вихідного коду. Відповіді, що стосуються лише коду, важко зрозуміти. Це допоможе запитувачу та майбутнім читачам, якщо ви зможете додати більше інформації у своєму дописі.
РБТ

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

Простим способом було б створення окремих стилів як для діла, так і для зображення, а потім їх розташування незалежно. Скажіть, якщо я хочу встановити позицію свого зображення на 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 , а потім праве посилання Повна сторінка

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.