Выровнять изображение по центру текста?


511

Является ли свойство text-align: center;хорошим способом для центрирования изображения с помощью CSS?

img {
    text-align: center;
}

jsfiddle.net/j6q4d810/1 Это прекрасно работает с любой шириной и высотой
gmarsi

Ответы:


1087

Это не будет работать, поскольку text-alignсвойство применяется к блочным контейнерам, а не к встроенным элементам, и imgявляется встроенным элементом. Смотрите спецификацию W3C .

Используйте это вместо:

img.center {
    display: block;
    margin: 0 auto;
}
<div style="border: 1px solid black;">
<img class="center" src ="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>


5
Я попробовал этот метод, и он работает! но когда я попробовал 2 изображения, это не сработало, оно просто сложилось друг на друга как тотем, есть идеи, как выровнять 2 изображения на одной линии посередине?
PatrickGamboa

1
Как это не поддерживается W3C? Можете ли вы предоставить ссылки для поддержки этой претензии?
Призрак Мадары

1
@SecondRikudo: text-alignдля центрирования текста, как следует из названия. Для блочных элементов margin: 0 auto;это рекомендуемый подход.
Mrchief

4
@Mrchief Изображения являются встроенными элементами, а не блоками. text-alignработает так же хорошо на них.
Призрак Мадары

4
Это объяснение странное, не правда ли? Вы говорите, что text-align применяется к блокам, а не к строкам, как я полагаю, тогда вы буквально меняете его на элемент block, но избегаете использования text-align. Я имею в виду, ваш код работает, но этот абзац должен быть полностью переписан, imo.
Осьминог

118

Это не всегда работает ... если это не так, попробуйте:

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

87

Я наткнулся на этот пост , и он работал для меня:

img {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div style="border: 1px solid black; position:relative; min-height: 200px">
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

(Вертикальное и горизонтальное выравнивание)


48

Другим способом сделать это будет центрирование абзаца:

<p style="text-align:center; border:1px solid black"><img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"></p>


19
Я бы не согласился, я думаю, что это действительно отвечает на вопрос. ОП спросил, является ли свойство text-align: centerхорошим способом центрировать изображение, и не указал, что свойство должно быть частью тега img. В этом ответе используется рассматриваемое свойство в попытке найти решение (которое действительно работает).
MandM

2
Это работало для меня, когда показ: блокировать и т. Д. Не будет.
Matthewsheets


13

На самом деле, единственная проблема с вашим кодом состоит в том, что text-alignатрибут применяется к тексту (да, изображения считаются как текст) внутри тега. Вы хотели бы поместить spanтег вокруг изображения и установить его стиль text-align: centerследующим образом:

span.centerImage {
     text-align: center;
}
<span class="centerImage"><img src="http://placehold.it/60/60" /></span>

Изображение будет в центре. В ответ на ваш вопрос это самый простой и надежный способ центрировать изображения, если вы помните, чтобы применить правило к содержащему изображение span(или div).


2
spanЭлемент display: inline;по умолчанию, так что это бежит в ту же проблему , как размещение text-align: center;на imgсебя. Вы должны установить , spanчтобы display: block;или заменить его divна эту работу.
Web_Designer

10

Существует три способа центрирования элемента, которые я могу предложить:

  1. Использование text-alignсобственности

        .parent {
        text-align: center;
    }
        <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>

  2. Использование marginсобственности

    img {
        display: block;
        margin: 0 auto;
    }
    <img src="https://placehold.it/60/60" />

  3. Использование positionсобственности

    img {
        display: block;
        position: relative;
        left: -50%;
    }
    .parent {
        position: absolute;
        left: 50%;
    }
    <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>


Первый и второй методы работают только в том случае, если родительский элемент имеет ширину не менее изображения. Когда изображение шире, чем его родитель, изображение не будет оставаться в центре !!!

Но: третий способ - хороший способ для этого!

Вот пример:

img {
    display: block;
    position: relative;
    left: -50%;
}
.parent {
    position: absolute;
    left: 50%;
}
<div class="parent">
    <img src="http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/img_01.jpg" />
</div>


# 3 настолько точен , что я был в состоянии отцентрировать imgвнутри оправданной divв WebViewс инъекцией CSS. Спасибо!
JorgeAmVF

8

Только если вам нужно поддерживать древние версии Internet Explorer.

Современный подход заключается в том, чтобы сделать margin: 0 autoв вашем CSS.

Пример здесь: http://jsfiddle.net/bKRMY/

HTML:

<p>Hello the following image is centered</p>
<p class="pic"><img src="https://twimg0-a.akamaihd.net/profile_images/440228301/StackoverflowLogo_reasonably_small.png"/></p>
<p>Did it work?</p>

CSS:

p.pic {
    width: 48px;
    margin: 0 auto;
}

Единственная проблема здесь заключается в том, что ширина абзаца должна совпадать с шириной изображения . Если вы не указали ширину абзаца, он не будет работать, потому что он примет 100%, и ваше изображение будет выровнено по левому краю, если, конечно, вы не используете text-align:center.

Попробуйте скрипку и поэкспериментируйте с ней, если хотите.


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

1
охотник за мечтами, если вы предлагаете альтернативный способ центрирования изображения с помощью css, то вам нужно немного расширить свой вопрос. Вы могли бы объяснить, как и почему эта предложенная альтернатива будет лучшим способом достижения цели спрашивающего, возможно, включив ссылку на соответствующую документацию. Это сделало бы его более полезным для них, а также более полезным для других читателей сайта, которые ищут решения подобных проблем.
Винс Боудрен

6

Если вы используете класс с изображением, то будет делать следующее

class {
    display: block;
    margin: 0 auto;
}

Если вы хотите выровнять по центру только изображение в определенном классе, тогда будет сделано следующее:

class img {
    display: block;
    margin: 0 auto;
}

Я бы поменял нижнюю img.classили img.classтоже добавил бы версию. Спасибо за это.
Чак Сэвидж

6

На контейнере, содержащем изображение, вы можете использовать CSS 3 Flexbox для идеального центрирования изображения внутри, как по вертикали, так и по горизонтали.

Предположим, у вас есть <div class = "container"> в качестве держателя изображения:

Тогда в качестве CSS вы должны использовать:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
}

И это сделает весь ваш контент внутри этого div идеально центрированным.


что в justify-content можно использовать для установки выравнивания в <p> ??
Манджита Тешара

Это то, что я хотел. Спасибо.
Дион Ким

5

Самым простым решением, которое я нашел, было добавить это к моему img-элементу:

style="display:block;margin:auto;"

Кажется, мне не нужно добавлять «0» перед «auto», как предлагают другие. Может быть, это правильный путь, но он работает достаточно хорошо для моих целей без «0». По крайней мере, на последних версиях Firefox, Chrome и Edge .


только авто среднего auto auto auto autoи 0 autoсредства 0 auto 0 auto... и по умолчанию для автоматического нижнего и верхнего края является 0поэтому добавление 0 или не точно такой же , в этом случае , который заставит вас ответить на п - й-дубликатом тех , которые уже предусмотрены
Феманитян Afif

Ваш комментарий объясняет, почему это работает. Отлично. Но какой из предыдущих ответов сказал, что обычное 'auto' без '0' также работает? Не стоит ли упоминать этот факт?
Panu Logic

в этом случае это должен быть комментарий, потому что в данном конкретном случае оба одинаковы. Я не думаю , что мы должны иметь ответ для всех эквивалентных значений, в этом случае мы можем написать: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, и так далее ... Вы думаете , каждый из которых заслуживает другого ответа? Я так не думаю.
Темани Афиф

Я бы не сказал, что если два разных сегмента CSS дают одинаковый конечный результат, эти два CSS-сегмента «одинаковы». Их вывод одинаков, но их исходный код не совпадает. Как и в общем случае, вы можете написать любое количество разных программ, которые выдают одинаковый результат. Тогда важно знать (и говорить людям, которые спрашивают), какая из таких «эквивалентных» программ кажется самой простой и короткой для написания.
Panu Logic

и все это должно быть написано в одном ответе. Вот почему этот ответ больше подходит в качестве комментария, чем совершенно новый ответ. Мы должны представить все эквивалентные вещи вместе, а не делать их отдельной функцией, которая может показаться, что они совершенно разные, потому что это не так [мое мнение, кстати, нет необходимости соглашаться с этим или утверждать обратное]. И я не говорю о разных программах, которые выдают один и тот же результат, это совершенно разные вещи, поскольку логика может не совпадать. Здесь речь идет об одном и том же свойстве и о том же значении (как i++и у того же самого i+=1)
Темани Афиф

4

Просто смени родительский настроить :)

Попробуйте это на родительских свойствах:

text-align:center

3

Вы можете использовать text-align: centerродительский элемент и изменить его imgна display: inline-block→, поэтому он ведет себя как текстовый элемент и будет отцентрирован, если родительский элемент имеет ширину!

img {
    display: inline-block
}

2

Я бы использовал div, чтобы выровнять изображение по центру. Как в:

<div align="center"><img src="your_image_source"/></div>

2

Если вы хотите установить изображение в качестве фона, у меня есть решение:

.image {
    background-image: url(yourimage.jpg);
    background-position: center;
}

2

Центрирование не фонового изображения зависит от того, хотите ли вы отобразить изображение как встроенное (поведение по умолчанию) или элемент блока.

Дело в строке

Если вы хотите сохранить поведение по умолчанию для свойства CSS отображения изображения, вам нужно будет обернуть ваше изображение в другой элемент блока, который вы должны установить text-align: center;

Корпус блока

Если вы хотите рассматривать изображение как отдельный элемент блока, то text-alignсвойство не имеет смысла, и вы должны сделать это вместо этого:

IMG.display {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

Ответ на ваш вопрос:

Является ли свойство text-align: center; хороший способ центрировать изображение с помощью CSS?

Да и нет.

  • Да, если изображение является единственным элементом внутри оболочки.
  • Нет, если у вас есть другие элементы внутри обертки изображения, потому что все дочерние элементы, являющиеся братьями и сестрами изображения, будут наследовать это text-alignсвойство: возможно, вам не понравится этот побочный эффект.

Ссылки

  1. Список встроенных элементов
  2. Центрирование вещей

1

Еще один способ масштабирования - отобразить его:

img {
  width: 60%; /* Or required size of image. */
  margin-left: 20% /* Or scale it to move image. */
  margin-right: 20% /* It doesn't matters much if using left and width */
}

1

Используйте это для вашего imgCSS:

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

0

display: blockс margin: 0не работал для меня, ни упаковка с text-align: centerэлементом.

Это мое решение:

img.center {
    position: absolute;
    transform: translateX(-50%);
    left: 50%;
}

translateX поддерживается большинством браузеров


1
ты имел ввиду margin: 0 auto;? Ключ настройки margin-leftи margin-rightк auto. margin: 0 auto;просто ярлык для этого.
Web_Designer

1
@Web_Designer Я пытался margin: 0 auto, margin: 0и margin: autoникто не работал. Обратите внимание, что в инспекторе Chrome при использовании margin: 0 autoон наносит удар по свойству с восклицательным знаком invalid property value(или что бы это ни значило)
OverCoder

Я думаю, что вы имели в виду «позиция: абсолют»; вместо «display: absolute;»
WebDevDaniel

Спасибо @WebDevDaniel за указание на опечатку. Да, кстати, вы, возможно, захотите использовать relativeпозиционирование, а не то absolute, что оба работают довольно хорошо.
OverCoder

0

Я обнаружил, что если у меня есть изображение и текст внутри div, то я могу использовать его text-align:centerдля выравнивания текста и изображения одним махом.

HTML:

    <div class="picture-group">
        <h2 class="picture-title">Picture #1</h2>
        <img src="http://lorempixel.com/99/100/" alt="" class="picture-img" />
        <p class="picture-caption">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Temporibus sapiente fuga, quia?</p>
    </div>

CSS:

.picture-group {
  border: 1px solid black;
  width: 25%;
  float: left;
  height: 300px;
  #overflow:scroll;
  padding: 5px;
  text-align:center;
}

CodePen: https://codepen.io/artforlife/pen/MoBzrL?editors=1100


0

Иногда мы напрямую добавляем контент и изображения на администратора WordPress внутри страниц. Когда мы вставляем изображения в контент и хотим выровнять этот центр. Код отображается как:

 **<p><img src="https://abcxyz.com/demo/wp-content/uploads/2018/04/1.jpg" alt=""></p>**

В этом случае вы можете добавить контент CSS следующим образом:

article p img{
    margin: 0 auto;
    display: block;
    text-align: center;
    float: none;
}

0

Использование:

<dev class="col-sm-8" style="text-align: center;"><img src="{{URL('image/car-trouble-with-clipping-path.jpg')}}" ></dev>

Я думаю, что это способ центрировать изображение в рамках Laravel.


0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

это сделает центр изображения как вертикально, так и горизонтально

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.