Зображуйте зображення горизонтально в розділі


387

Це, мабуть, дурне питання, але оскільки звичайні способи вирівнювання зображення не працюють, я подумав, що запитаю. Як я можу в центрі вирівняти (горизонтально) зображення всередині свого контейнера?

Ось 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, тому слід легше бачити. Жодне рішення не працює на практиці. Текст вгорі та внизу не може бути центрований, а зображення має бути зосереджене в його контейнері. У контейнері переповнений прилив, тому я хочу бачити центр зображення, як це зазвичай там, де знаходиться фокус.


1
Чи передбачається, щоб зображення відображалося в тому ж рядку, що і перше посилання (у виконавця)?
Shoaib

5
imgє предметом, text-align: centerякщо їх displayне було змінено.
Джаред Фарріш

4
jsfiddle.net/cEgRp - простийtext-align: center
Золтан Тот

3
Джейкобе, ти можеш принаймні розмістити фактичну розмітку, яку бачить браузер, а не шаблон, проникнутий PHP? Також функціонує jsfiddle.net завжди допомагає.
Джаред Фарріш

2
Не забувайте про мій коментар - я не помітив, що це imgбуло додано до a. Я німий.
Shoaib

Відповіді:


834

Хлопець CSS пропонує наступне:

Отже, перекладаючи, можливо:

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

Ось моє рішення в: http://jsfiddle.net/marvo/3k3CC/2/


10
Я не думаю, що це гарна ідея, а також я вважаю, що деякі застереження на зразок margin: autoзалежать від елемента, що містить елемент, що має вказане значення ширини.
Джаред Фарріш

4
Я все ще вдосконалюю свої навички CSS, тому дякую за цікавий навчальний момент. Але в цьому випадку він використовує фіксовану ширину на контейнері.
Марво

1
Що саме означає позначена ширина в цьому контексті? Однозначно здається, корисні знання мати.
Shoaib

1
Дивіться цю загадку, яку я склав ; Я не впевнений, що думати. Те, що ви пропонуєте, нічого не зробить, і imgя вважаю, що так чи інакше потрібна ширина, щоб мати якийсь ефект auto.
Джаред Фарріш

2
Ви насправді не реалізували представлене нами рішення. По-друге, вкладений div має ширину 120 пікселів, що приблизно така ж, як і ширина зображення, тому важко зрозуміти, чи є він насправді центром зображення. Ось моє рішення: jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS flexbox може це зробити з 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по центру вертикально. Різні рішення на полях не працюють для мене, оскільки елемент, на який слід по центру, не має атрибутів ширини та висоти.
Марк Рочкінд

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%;для зміни розміру зображення, якщо екран менший за зображення, але в цьому випадку він не в центрі. Будь-які пропозиції щодо
централізації за

18

Це теж зробило б це

#imagewrapper {
    text-align:center
}

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

Ви мали на увазі text-align:center;і margin:0 5px;? Я додав;
jagb

@jagb крапки з комою не потрібні для останнього властивості в блоці вибору.
TylerH

4
@TylerH Це правда, крапки з комою не потрібні для останнього властивості в селекторному блоці, але завжди використовувати запяток. Що робити, якщо я напишу файл CSS, інший розробник редагує мій файл пізніше, вони додають код (після рядка з пропущеною крапкою з комою, рядок, який я писав раніше у цьому файлі CSS) та їх висота, ширина чи інша декларація не працює (або ще гірше, вони не помічають, що вона не працює). Я б сказав, що безпечніше залишати крапки з комою. Тому я використовую крапки з комою та ніколи не залишаю крапки з комою.
jagb

@jagb Якщо інший розробник відредагує ваш файл пізніше, він додасть у крапку з комою, де це необхідно, або це буде їх проблема з написанням коду з помилками. Відповідь на ваш початковий коментар все ще: "крапки з комою в останньому рядку в CSS - це вибір стилю".
TylerH

Я погоджуюся з джегбом. Цей сайт повинен сприяти вибору стилю. Хороший стиль не залишає за собою код, який легко зламати. Нанесення крапки з комою на кожен рядок коштує вам, можливо, 1/10 секунди, налагодження пошуку одного пропущеного крапки з комою може коштувати вам годин. Ось чому великі технологічні компанії наполягають на цьому: Посібник зі стилів Google HTML / CSS - Декларація зупиняється
Георг Патчайдер

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 inline, оскільки тоді вам доведеться внести кілька змін у всі свої теги, використовуючи 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>

Що обмежить висоту зображення до 600 пікселів, а горизонтально буде центрально (або змінити розмір вниз, якщо батьківська ширина буде меншою) до батьківського контейнера, зберігаючи пропорції.


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/


Хм ... ставлюся, що працює. Я зосереджував IMAGE у своєму рішенні, але я бачу, як питання можна інтерпретувати як центрування зображення div-enclosing-image всередині іншого div. Так чи інакше, те саме рішення.
Марво

Жодне рішення не працює на практиці. Я спробував обидва рішення, перш ніж це просто не вийде. Будь ласка, зверніться до редакції у запитанні
Якоб Віндзор

3

Щоб центрувати зображення горизонтально, це працює:

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

Так, але якщо ви плануєте відображати зображення як блок, щоб запобігти нудному білому простору під ним, це більше не спрацює ...
Д-р Фред

3

Додайте це до свого CSS:

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

Просто посилання на дочірній елемент, який у цьому випадку є зображенням.


2
це добре, коли ви все ще хочете отримати доступ до верхньої межі, .. краще, ніж маржа 0 авто
tallgirltaadaa

2

Покладіть рівну піксельну підкладку зліва та справа:

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

1

Помістіть зображення всередину a newDiv. Зробіть ширину вмісту divтакою ж, як на зображенні. Застосувати margin: 0 auto;до newDiv. Це повинно бути в центрі divконтейнера.


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

ви можете вирівняти вміст, використовуючи flex box з мінімальним кодом

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

Відцентруйте зображення у діві

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

Якщо вам потрібно зробити , це інлайн (наприклад, при використанні поля введення),
ось швидкий Хак , який працював для мене: оточити (посилання на зображення в даному випадку)
в divсstyle="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! Будь ласка, додайте пояснення до своєї відповіді.
Максиміліан Петерс

Якщо ми хочемо виправити конкретні <div> або як <section>вертикально, так і горизонтально центр сторінки для всіх пристроїв, просто ви можете використовувати цей код стилю !!!!
Шива Каліямоорті

Схоже, ця відповідь належить до іншого питання :)
Маной Кумар

0

так, такий код працює добре

<div>
 <img>
</div>

але просто для нагадування стилю зображення

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 на контейнері - це правильна відповідь за можливість центрувати як вертикально, так і горизонтально.

Верхня відповідь тут НЕ працює для центрування елемента вертикально, а горизонтально.


ОП чітко просила горизонтальне вирівнювання.
Алвін Мойо

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