純 CSS 實現高度與寬度成比例的效果
item 元素的 CSS 定義如下:
.item { float: left; margin: 10px 2%; width: 21%; }
這時遇到的一個需求:在保持 item 元素寬高比恆定(如高是寬的 1.618 倍)的情況下,使得 item 元素可以和父元素同比縮放。 我們知道,如果當 item 元素是圖片,同時需要保持的寬高比恰好為圖片本身的寬高比時,可以設置 item 的 height 為 auto 即可輕松實現這個需求。然而當 item 元素不是圖片或者要保持的寬高比和圖片本身的寬高比不同時,這個需求顯得很難直接用 CSS 實現。
為此我放棄 CSS,直接用 JavaScript 綁定 window 的 onresize 事件來動態獲取每個 item 的寬度,從而計算並設置其高度。
我一直在使用這個解決方案,直到今天調整樣式時,突然想到這個需求竟然是可以只使用 CSS 解決的。
首先需要知道,一個元素的 padding,如果值是一個百分比,那這個百分比是相對於其父元素的寬度而言的,即使對於 padding-bottom 和 padding-top 也是如此。
另外,在計算 Overflow 時,是將元素的內容區域(即 width / height 對應的區域)和 Padding 區域一起計算的。換句話說,即使將元素的 overflow 設置為 hidden,“溢出”到 Padding 區域的內容也會照常顯示。
綜上兩條所述,我們可以使用 padding-bottom 來代替 height 來實現高度與寬度成比例的效果。因為 item 元素的寬度是其父元素寬度的 21%,所以我們將 padding-bottom 設置為它的 1.618 倍,即 33.98%。同時將其 height 設置為 0 以使元素的“高度”等於 padding-bottom 的值,從而實現需要的效果。
最后 item 元素的 CSS 樣式為:
.item { float: left; margin: 10px 5%; padding-bottom: 33.98%; width: 21%; height: 0; }
頁面效果見 http://jsfiddle.net/luin/25BbH/7/,拖動窗口調整頁面寬度,item 元素始終保持恆定的寬高比。
具體快去http://zihua.li/2013/12/keep-height-relevant-to-width-using-css/了解,同時感謝樓主的分享。
demo:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<!
DOCTYPE
html>
<
html
>
<
head
>
<
meta
charset="UTF-8">
<
title
></
title
>
</
head
>
<
body
>
<
div
class="aaa" style="width:80%;height:0;padding-bottom: 45%;margin: 0 auto;">
<
img
src="../style/img/login_bg1.jpg"/ style="width:100%;">
</
div
>
</
body
>
</
html
>
|
