2014-08-27 49 views
3

我想構建一個顯示具有說明圖像的html頁面,說明和圖像是通過生成的,並可以找到這兩種常見情況:根據浮動圖像的高度垂直對齊div中的文本

unwrapped image

<div style="width:500px; padding:10px; border:solid 1px;"> 
    <div style="width:100%; overflow: auto; border:solid 1px;"> 
    <img style="float:right; width:40%" src="http://isc.stuorg.iastate.edu/wp-content/uploads/sample.jpg"> 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tempus justo pharetra, tincidunt erat nec, euismod quam. Fusce vel purus aliquet, posuere nulla ac, porta urna. Aliquam feugiat ligula vitae maximus tincidunt. 
    </div> 
</div> 

wrapped image

<div style="width:500px; padding:10px; border:solid 1px;"> 
    <div style="width:100%; overflow: auto; border:solid 1px;"> 
    <img style="float:right; width:40%" src="http://isc.stuorg.iastate.edu/wp-content/uploads/sample.jpg"> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tempus justo pharetra, tincidunt erat nec, euismod quam. Fusce vel purus aliquet, posuere nulla ac, porta urna. Aliquam feugiat ligula vitae maximus tincidunt. Suspendisse vel tristique massa. Ut lobortis sapien nec libero varius, vitae ullamcorper risus pretium. Nunc vulputate posuere auctor. Phasellus pulvinar nibh a risus semper, a lobortis justo ultricies. Etiam at pretium ligula. Nullam lobortis, nisl nec sollicitudin vestibulum, turpis neque porta neque, pellentesque egestas ipsum nunc id nisl. Morbi quis lacus quam. Pellentesque eget congue neque. Vestibulum elementum arcu nec condimentum posuere. Donec risus lorem, ornare pharetra ex a, lobortis molestie nunc. Suspendisse iaculis est eros, eu vestibulum nisi accumsan eget. Proin eget eleifend eros. 
    </div> 
</div> 

雖然第一文本太短包裹圖像,第二次是足夠LON g來包裝它。

我喜歡這種效果,但我想在第一種情況變化不大,所以這裏是我的問題:

可以垂直對齊文本等根據圖像高度的垂直居中? (當然,我希望保留較長的文本換行效果)

圖形:

我想這一點:

actual result

變成這樣:

wished result

+4

考慮到兩個案例,我不這麼認爲。您可能需要使用JavaScript來達到效果。 – 2014-08-27 14:49:42

+0

很好的答案,但我在這裏知道是否有可能實現這個結果只使用css – Luca 2014-08-27 14:51:10

+0

我也會說不,因爲你會需要知道,如果文本是包裝之前,你應用樣式爲了居中 - 即你將需要計算容器的高度,將其與圖像的高度進行比較,然後應用居中樣式,如果圖像尺寸相同 – Pete 2014-08-27 14:55:36

回答

1

Here是你會怎麼做

HTML

<div class="container"> 
    <div class="something"> 
     <img src="http://isc.stuorg.iastate.edu/wp-content/uploads/sample.jpg" /> 
     <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tempus justo pharetra, tincidunt erat nec, euismod quam. Fusce vel purus aliquet, posuere nulla ac, porta urna. Aliquam feugiat ligula vitae maximus tincidunt.</div> 
    </div> 
</div> 
<div class="container"> 
    <div class="something"> 
     <img src="http://isc.stuorg.iastate.edu/wp-content/uploads/sample.jpg" /> 
     <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tempus justo pharetra, tincidunt erat nec, euismod quam. Fusce vel purus aliquet, posuere nulla ac, porta urna. Aliquam feugiat ligula vitae maximus tincidunt. Suspendisse vel tristique massa. Ut lobortis sapien nec libero varius, vitae ullamcorper risus pretium. Nunc vulputate posuere auctor. Phasellus pulvinar nibh a risus semper, a lobortis justo ultricies. Etiam at pretium ligula. Nullam lobortis, nisl nec sollicitudin vestibulum, turpis neque porta neque, pellentesque egestas ipsum nunc id nisl. Morbi quis lacus quam. Pellentesque eget congue neque. Vestibulum elementum arcu nec condimentum posuere. Donec risus lorem, ornare pharetra ex a, lobortis molestie nunc. Suspendisse iaculis est eros, eu vestibulum nisi accumsan eget. Proin eget eleifend eros.</div> 
    </div> 
</div> 

CSS

.container { 
    width:500px; 
    padding:10px; 
    border:solid 1px; 
} 
.something { 
    width:100%; 
    overflow: auto; 
    border:solid 1px; 
} 
.something>img { 
    float:right; 
    width:40% 
} 

JS

$(document).ready(function() { 
    var numberOfItems = $(".container").length; 
    for (var i = 0; i < numberOfItems; i++) { 
     var imageHeight = $(".container:eq(" + i + ")").children(".something").children("img").height(); 
     var divHeight = $(".container:eq(" + i + ")").children(".something").children("div").height(); 
     if (divHeight < imageHeight) { 
      $(".container:eq("+i+")").children(".something").children("div").css({ 
       "margin-top": (imageHeight - divHeight)/2 + "px" 
      }); 
     } 
    } 
}); 

編輯

對於上面工作了jQuery,包括下面的<header>標籤(呼叫你所有的jQuery的文檔之前)

片斷
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

看看this網站了解更多的信息

+0

這是JS ** + jQuery **。 – SeinopSys 2014-08-27 15:57:53

+0

@ DJDavid98是的,這是一個問題嗎? – ctwheels 2014-08-27 15:59:14

+1

爲了讓OP知道您還在使用外部庫,您可能需要說清楚,考慮到問題本身沒有[tag:javascript]或[tag:jquery]標籤。 – SeinopSys 2014-08-27 16:00:44

0

使包裝div顯示:table和text div display:table-cell; verticle對齊:中間;

如果不工作,那麼也適用溢出:隱藏的文本DIV

+0

不起作用。文字不會在圖像下流動。 – 2014-08-27 16:41:42