вертикальное выравнивание по центру изображения в фиксированном размере div - PullRequest
20 голосов
/ 15 февраля 2011

У меня есть div, который составляет 145px X 145px. У меня есть img внутри этого погружения. Изображение может быть любого размера (самая длинная сторона составляет 130 пикселей). Я хотел бы, чтобы изображение было центрировано вертикально в div. Все, что я пробовал, работает в большинстве браузеров, но не в IE7. Мне нужно что-то, что будет работать в IE7.

Ответы [ 6 ]

51 голосов
/ 30 декабря 2012

вот кросс-браузерное решение:

<div class="img-container"><img src="picture.png" class="cropped"/></div>


div.img-container {
     width: 390px;
     height: 211px;
     position: relative;
     margin-left: auto;
     margin-right: auto;
     overflow: hidden;
 }
img.cropped {
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
17 голосов
/ 15 февраля 2011

Вы можете заменить изображение на фон в DIV следующим образом:

<div style="background:url(myimage.jpg) no-repeat center center"></div>
5 голосов
/ 21 мая 2012

Не уверен насчет IE7, но для IE9 и остальных современных браузеров следующие работы.

    .picturecontainer{
        width:800px;
        height:800px;
        border:solid 1px;
        display:table-cell;
        vertical-align:middle;

    }
    .horizontalcenter{
        display:block;
        margin-left:auto;
        margin-right:auto;
        vertical-align:middle;
    }

Для его использования

<div class="picturecontainer"><img src="" class="horizontalcenter"/></div>

Это помещает изображения в мертвую точку.

4 голосов
/ 18 апреля 2013

Использование свойства line-height решило проблему для меня.

Ссылка: Вертикально выровненное изображение в div

HTML:

<div class="img_thumb">
    <a class="images_class" href="large.jpg" rel="images"><img src="http://www.minfo.pt/fotos/_cache/produtos/0/068.M.976010002__thumbnail_50_50_true_sharpen_1_1.JPG" title="img_title" alt="img_alt" /></a>
</div>

CSS:

.img_thumb {
    float: left;
    height: 120px;
    margin-bottom: 5px;
    margin-left: 9px;
    position: relative;
    width: 147px;
    background-color: rgba(0, 0, 0, 0.5);
    border-radius: 3px;
    line-height:120px;
    text-align:center;
}

.img_thumb img {
    vertical-align: middle;
}
4 голосов
/ 15 февраля 2011

Не уверен, что вы уже пробовали, но свойство CSS vertical-align должно работать, если изображения отображаются в виде встроенных элементов.

Некоторая информация о выравнивании по вертикали: http://www.w3schools.com/css/pr_pos_vertical-align.asp

Если вам приходится учитывать все высоты изображения, это практически единственный способ без использования JavaScript.

Еслиизображения не являются встроенными элементами, и вам нужно было только разместить изображения с одинаковой высотой, вы можете сделать что-то вроде этого:

img {
    margin-top: -50px; /* This number should be half the height of your image */
    position: absolute;
        top: 50%;
}

В противном случае я могу подумать, что для размещения изображений различной высоты будетсделать что-то подобное с вашим CSS, но с помощью JS установите отрицательное поле равным половине высоты изображения.

1 голос
/ 05 ноября 2012

Я создал небольшой код jQuery, чтобы сделать это без использования неприятных таблиц:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js">
imagepos = function () {
    $('img').each(function () {  
            imgheight = Math.round($(this).height() / 2);
            imgwidth = Math.round($(this).width() / 2);    
            $(this).attr("style", "margin-top: -" + imgheight + "px; margin-left: -" + imgwidth + "px; opacity:1;");
        });
    }   
$(window).load(imagepos);
</script>

И вам также нужно немного CSS:

div
{
position:relative;
}
img
{
display:block;
margin:auto;
max-width:100%;
position:absolute;
top:50%;
left:50%;
opacity:0;
}
...