центральное изображение внутри переполнения-скрыто-родительский - PullRequest
23 голосов
/ 27 марта 2009

У меня есть изображение внутри тега span, span имеет заданную ширину и высоту, а переполнение скрыто так что это показывает только небольшую часть изображения. Это работает, но небольшая часть видимого изображения находится в верхнем левом углу. Я хотел бы, чтобы это был центр изображения, которое видно. Я думаю, что мне нужно абсолютно позиционировать изображение, но размер изображения может варьироваться. Кто-нибудь знает, как делать то, что я пытаюсь сделать?

Спасибо!

Вот HTML:

<div class="lightbox_images">
                <h6>Alternate Views</h6>
                <span>
                    <a href="http://www.kranichs.com/mothers_rings/mothers_rings_txt2.jpg" 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="https://www.kranichs.com/product_images/Simon-G@346_M_346_M.jpg" rel="lightbox[product_alternate_views]" title="This is my captions 2">
                        <img src="https://www.kranichs.com/product_images/Simon-G@346_M_346_M.jpg" />
                    </a>
                </span>
                <span>
                    <a href="http://www.kranichs.com/images/simong/sim_banner_01.jpg" rel="lightbox[product_alternate_views]" title="This is my captions 3">
                        <img src="http://www.kranichs.com/images/simong/sim_banner_01.jpg" />
                    </a>
                </span>
                <span>
                    <a href="http://www.kranichs.com/images/psu/psu_banner.jpg" rel="lightbox[product_alternate_views]" title="This is my captions 4">
                        <img src="http://www.kranichs.com/images/psu/psu_banner.jpg" />
                    </a>
                </span>
            </div>

Вот 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;
}

Ответы [ 5 ]

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

Как предложено Билли Моатом в https://stackoverflow.com/a/14837947/2227298, есть решение , не зная высоты и ширины изображения.

Попробуйте здесь: 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%;
}
17 голосов
/ 27 марта 2009

Учитывая этот вид 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 */
}

В этом случае фон будет автоматически центрирован независимо от его размеров, и он все равно будет активным.

4 голосов
/ 03 сентября 2014

В этом примере изображения находятся в центре элемента независимо от его размера

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;
}
3 голосов
/ 27 марта 2009

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

Стиль изображения слева: 50%; верх: 50%; а затем используйте javascript (возможно, событие загрузки изображения), чтобы добавить поле слева: - imageWidth / 2 px; Поля сверху: - 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, код может немного упроститься, но я не делал этого предположения.

0 голосов
/ 27 марта 2009

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

#mySpan {
  background-image: url(myimage.png);
  background-repeat: no-repeat;
  background-attachment:fixed;
  background-position: -10 -10
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...