Подтвердить что ты не робот

Подключить <div> к закрытому изображению?

Ситуация заключается в том, что у меня есть img, и я хочу использовать поле заголовка pop-over, ширина которого равна ширине img. Я не могу добавить подпись как дочерний элемент img, потому что теги img не принимают детей. Поэтому моя идея состояла в том, чтобы иметь что-то вроде этого:

<div>
   <img/>
   <div>
      ...caption...
   <div>
</div>

Проблема заключается в том, что внешние div расширяются, чтобы заполнить ширину их родительского элемента, так как блокируют элементы, и, следовательно, caption-div становится одинаково широким, и я получаю что-то похожее на это:

enter image description here

Если внешний div становится шириной страницы, надпись следует за шириной внешнего div и, таким образом, торчит из изображения.

Я не хочу вручную устанавливать ширину внешнего div, потому что я использую этот подшаблон для изображений всех форм и размеров по всему сайту. В любом случае, чтобы внешний вид обнимал изображение, а не заполнял его родителя?

4b9b3361

Ответ 1

Я не хочу вручную устанавливать ширину внешнего div, потому что я используя этот подшаблон для изображений всех форм и размеров во всем сайт. В любом случае, чтобы заставить внешний вид обнимать изображение, чем заполнить его родителя?

Вам нужно display: inline-block в сочетании с text-align: center.

Смотрите: http://jsfiddle.net/thirtydot/V3XyK/

HTML:

<div class="imageContainer">
    <div>
        <img src=".." />
        <span>...caption...</span>
    </div>
</div>

CSS

.imageContainer {
    text-align: center;
}
.imageContainer img {
    display: block;
}
.imageContainer div {
    position: relative;
    display: inline-block;
    /* if you need ie6/7 support */
    *display: inline;
    zoom: 1;
}
.imageContainer span {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    background: #000;
    background: rgba(0,0,0,.5);
}

Ответ 2

Возможно, просто сделайте ширину div 1px и сделайте overflow: visible

Ответ 3

Это он. В отличие от ответа выше, он будет работать в IE:

<style type="text/css">
     .outerCont {height:auto;width:auto;position:relative;z-index:1;margin:0px auto;overflow:hidden;display:inline;float:left;}
     .outerCont img {height:auto;width:auto;position:relative;z-index:2;}
     .comment {height:auto;width:100%;display:block;font-family:Arial, Helvetica, sans-serif;text-align:center;padding:10px;0px;10px;0px;color:#FFF;position:absolute;z-index:3;bottom:0;/*also set your semi transparent black background-image here using the background-image property*/}
 </style> 

Вы бы использовали его следующим образом:

<div class="outerCont">
    <img src="flower.jpg" /> <!--Or where ever the image is located -->
    <div class="comment">
        <p>Hello</p>
    </div>
</div>

Единственная проблема, связанная с вышеперечисленными способами (мой и другой чувак), заключается в том, что вы жертвуете центрированием изображения. Чтобы центрировать изображение, вам нужно будет создать JavaScript с помощью jQuery и использовать свойство CSS для изменения ширины и высоты в соответствии с внутренним контентом. То, о чем вы просите, - это "Сжать обертку" на содержимое, которое вы можете сделать только в трех особых случаях. Плавающие объекты, объекты Inline или Inline-Block, а также Абсолютно позиционированные объекты. Оба объекта Floated и Absolute не могут быть центрированы без использования JavaScript, а Inline Block не действует корректно в IE, то есть вам нужно использовать display: inline; плыть налево; чтобы он работал как встроенный блок. Вы можете центрировать изображение с помощью JavaScript и что это. Я могу предоставить этот код, но только по запросу.