Изображение центра внутри переполнения-скрытого родителя
У меня есть изображение внутри тега span, span имеет заданную ширину и высоту, и он настроен на скрытие переполнения. поэтому он отображает только небольшую часть изображения. Это работает, но небольшая часть видимого изображения - верхний левый угол. Я бы хотел, чтобы это был центр изображения, который виден. Я думаю, мне нужно полностью позиционировать изображение, но размер изображения может измениться. Кто-нибудь знает, как делать то, что я пытаюсь сделать?
Спасибо!
Вот HTML:
<div class="lightbox_images">
<h6>Alternate Views</h6>
<span>
<a href="#" onclick="location.href='http://www.kranichs.com/mothers_rings/mothers_rings_txt2.jpg'; return false;" rel="lightbox[product_alternate_views]" title="This is my captions 1">
<img src="http://www.kranichs.com/mothers_rings/mothers_rings_txt2.jpg" />
</a>
</span>
<span>
<a href="#" onclick="location.href='https://www.kranichs.com/product_images/
Вот CSS:
.lightbox_images{
background-color:#F9F9F9;
border:1px solid #F0F0F0;
}
.lightbox_images h6{
font-family:Verdana, Arial, Helvetica, sans-serif;
color:#333333;
font-size:14px;
font-weight:bold;
font-style:italic;
text-decoration:none;
margin:0px;
}
.lightbox_images span{
padding:5px;
padding-bottom:15px;
background-color:#DFDFDF;
margin:5px;
display:inline-block;
border:1px solid #CCC;
}
.lightbox_images a{
display:inline-block;
width:60px;
height:60px;
overflow:hidden;
position:relative;
}
.lightbox_images a img{
position:absolute;
left:-50%;
top:-50%;
}
.lightbox_images span:hover{
border:1px solid #BBB;
background-color:#CFCFCF;
}
Ответы
Ответ 1
Учитывая этот вид HTML:
<span><img src="..." width="..." height="..." alt="..." /></span>
Вы можете использовать CSS следующим образом:
span {
position: relative;
display: block;
width: 50px; /* Change this */
height: 50px; /* Change this */
overflow: hidden;
border: 1px solid #000;
}
span img {
position: absolute;
left: -10px; /* Change this */
top: -10px; /* Change this */
}
Затем вы можете центрировать изображение на основе его точных размеров.
Кроме того, если вы можете изменить HTML, вы можете использовать что-то вроде этого:
<div>
<a href="...">[name of picture]</a>
</div>
Затем сопоставьте его с этим CSS:
div {
width: 50px;
height: 50px;
background: transparent url(...) center center no-repeat;
border: 1px solid #000;
}
div a {
display: block;
height: 100%;
text-indent: -9999em; /* Hides the link text */
}
В этом случае фон будет автоматически центрирован независимо от его размеров, и он будет по-прежнему доступен для клика.
Ответ 2
Как было предложено в fooobar.com/questions/221272/... Билли Моатом, существует решение , не зная высоты и ширины изображения.
Попробуйте здесь: http://jsfiddle.net/LSKRy/
<div class="outer">
<div class="inner">
<img src="http://3.bp.blogspot.com/-zvTnqSbUAk8/Tm49IrDAVCI/AAAAAAAACv8/05Ood5LcjkE/s1600/Ferrari-458-Italia-Nighthawk-6.jpg" alt="" />
</div>
</div>
.outer {
width: 300px;
overflow: hidden;
}
.inner {
display: inline-block;
position: relative;
right: -50%;
}
img {
position: relative;
left: -50%;
}
Ответ 3
В этом примере изображения находятся в центре элемента, независимо от его размера
HTML:
<div class="box">
<img src="example.jpg">
</div>
CSS
div.box{
width: 100px;
height: 100px
overflow: hidden;
text-align: center;
}
div.box > img{
left: 50%;
margin-left: -100%;
position: relative;
width: auto !important;
height: 100px !important;
}
Ответ 4
Если ширина и высота изображения меняются, я думаю, что единственный способ сделать это - с помощью javascript.
Стиль изображения слева: 50%; верх: 50%; а затем, используйте javascript (возможно, изображение onload event), чтобы добавить margin-left: -imageWidth/2 px; margin-top: -imageHeight/2 px;
Итак, у вас есть
span img {
position: absolute;
left: 50%;
top: 50%;
}
и следующие js
window.onload = function() {
var images = document.getElementsByTagName('img');
for(i=0; i<images.length; i++)
images[i].onload = centerImage(images[i]);
function centerImage(img) {
img.style.marginLeft = -(img.width/2) + "px";
img.style.marginTop = -(img.height/2) + "px";
}
}
PS. Если вы используете фреймворк/библиотеку javascript, код может немного упростить, но я не сделал этого предположения.
Ответ 5
Вы можете установить изображение в качестве фона элемента и задать ось x, y, как показано в следующем примере:
#mySpan {
background-image: url(myimage.png);
background-repeat: no-repeat;
background-attachment:fixed;
background-position: -10 -10
}