2012-06-26 6 views
2

Хорошо, вот моя проблема. У меня есть блок шириной 348 пикселей, а справа 144 пикселя, я хочу центрировать изображение по вертикали. Легко, правда? Моя проблема в том, что я не знаю высоты изображения или блока. Как я могу вертикально центрировать изображение, чтобы пройти мимо верхней части контейнера, не делая его фоновым изображением?Вертикальное выравнивание изображения внутри меньшего контейнера

CSS 
#block { width: 348px; position: relative; } 
#content { width: 164px; padding: 20px; margin-right: 144px; } 
#image { width: 144px; position: absolute; right: 0; } 

MARKUP 
<div id="block"> 
    <div id="image"><img url="imageurl" /></div> 
    <div id="content">Some content goes here.</div> 
</div> 

Я не знаю, сколько это поможет, но, надеюсь, оно что-то делает.

+0

Вы можете сделать это с помощью решения на основе css, но присваиваемый метод зависит от вашей разметки HTML. Не можете ли вы предоставить соответствующий HTML/CSS для вашей проблемы? – Zuul

+0

К сожалению, это просто общий вопрос. Это частный клиент, а контент и дизайн конфиденциальны до выпуска. Хотелось бы, чтобы я мог обеспечить разметку, поскольку это очень помогло бы. Однако я собираюсь создать общий код. – Chad

ответ

2

решение с использованием только CSS, на основании текущего HTML-разметки и как указывает тегах можно осуществить следующим образом:

Смотрите этот working Fiddle пример!

enter image description here

HTML

<div id="block"> 
    <div id="content">Some content goes here.</div> 
    <div id="image"> 
     <img src="path_to_image" /> 
    </div> 
</div> 

CSS

#block { 
    width: 348px; 
    display: table;   /* set the main wrapper to display as a table */ 
} 
#content { 
    width: 164px; 
    padding: 20px; 
} 
#image { 
    width: 144px; 
    display: table-cell; /* set the inner wrapper to display as a cell */ 
    vertical-align: middle; /* tell to vertically align the contents */ 
} 

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


Решение JQuery к разметке без удаления любой из ваших существующих деклараций CSS и достижения точно той же цели:

Посмотреть этот working Fiddle пример!

enter image description here

JQuery

Добраться до img внутри #image и собрать его высоту, разделить его на два и применить отрицательную маржу к нему с результирующим значением.

$(function() { 
    var $target = $('#image').find('img'); 

    $target.css({ 
    "margin-top" : "-" + ($target.height()/2) + "px" // adjust the top margin 
    }); 
}); 

CSS

#block { 
    width: 348px; 
    position: relative; 
} 
#content { 
    width: 164px; 
    padding: 20px; 
    margin-right: 144px; 
} 
#image { 
    width: 144px; 
    position: absolute; 
    right: 0; 
    top: 0;    /* fit to the top */ 
    bottom: 0;   /* fit to the bottom */ 
    /*overflow:hidden;*/ /* optional if the img is bigger that this container */ 
} 
#image img { 
    position: absolute; /* remove element from the document flow */ 
    top: 50%;   /* move it down by 50% of its parent height */ 
} 

HTML

<div id="block"> 
    <div id="image"> 
     <img src="path_to_image" /> 
    </div> 
    <div id="content">Some content goes here.</div> 
</div> 

Ваша текущая разметка сохраняется и некоторые дополнительные CSS был добавлен, чтобы сделать его работу. Оставляя часть jQuery максимально простой!

+0

И, конечно же, это не будет работать с IE6 или IE7. IE7 все еще довольно предсказуем. –

+0

Хм, это не совсем то, для чего я собираюсь. Что делать, если изображение больше, чем другое содержимое контейнера? Я в основном хочу, чтобы даже переполнение как сверху, так и снизу. И у меня есть дополнение внутри блока, поэтому он абсолютно позиционируется. – Chad

+0

Я хотел, чтобы изображение пробило прокладку и было на краях справа и сверху. И IE7 - обязательная работа. – Chad

1

Вы можете абсолютно позиционировать изображение внутри контейнера, или если это не работает в вашем случае, вам нужно будет использовать javascript, чтобы получить высоту контейнера и высоту изображения и поместить изображение таким образом ,

Чтобы установить его с помощью CSS:

Установить стиль «позиции: относительная» на вашем элементе контейнера. Затем установите стиль вашего изображения на «position: absolute; top: 50%;». Вы также можете добавить высоту в свой контейнер.

+0

Установка абс на 50% просто надавит на 50% в контейнер, вместо того, чтобы сделать центр изображения центром блока. Javascript - это альтернатива, но я бы предпочел не использовать ее. Чтобы вывести изображение с абс-позиции на 50% сверху, вам нужно установить отрицательный запас на половину высоты изображения, который будет связан с JS. Мне просто интересно, есть ли какие-либо варианты CSS. – Chad

+0

Если вы не знаете высоту изображения или высоту контейнера, я не вижу другого способа выполнить это иначе, чем динамически настраивать CSS с помощью javascript. – Justine

+0

Я обязательно сохраню JS в качестве опции. Благодарю. – Chad