在很多場景下,我們都需要一個固定長寬比的div作為容器。直接使用js動態設定固然可行,但在頁面大小變化時就不得不通過觸發onresize事件來動態設定,十分不便。此文旨在於探討使用純CSS實現固定長寬比的容器,取代js動態設定。
方法一:height: auto
若div中只有img標籤,且需要div按照圖片長寬比自動縮放,則只需將img和div的height均設定為auto即可。程式碼如下:
<!--HTML-->
<!DOCTYPE html>
<html>
<head>
<title>div中只有img</title>
<style type="text/css">
.box{
width: 50%;
height: auto;
}
img{
width: 100%;
height: auto;
}
</style>
</head>
<body>
<div class="box">
<img src="http://p8gjnrgtp.bkt.clouddn.com/4.jpg">
</div>
</body>
</html>
<!--HTML-->
複製程式碼
Chrome執行截圖如下:
方法二:height + padding-bottom
讓我們回顧一下CSS中padding百分比值的計算方法:padding設定為百分比時,是以元素的寬度乘以百分比從而得到padding值的。這剛好可以為我們所用,在div的width為固定的情況下,設定height為0,使內容自然溢位,再通過設定padding-bottom使元素有一定高度。
廢話不多說,上程式碼:
<!--HTML-->
<!DOCTYPE html>
<html>
<head>
<title>height + padding-bottom</title>
<style type="text/css">
.box{
width: 50%;
height: 0;
padding-bottom: 30%;
/*寬高比為5:3*/
background: url(http://p8gjnrgtp.bkt.clouddn.com/4.jpg);
background-size: cover;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
<!--HTML-->
複製程式碼
Chrome執行截圖如下:
Tips&bugs:1.祖先元素(即最早定義的寬高比固定的元素)height為0,後代元素無法再通過直接設定height百分比來動態計算高度。
2.解決辦法是:後代元素也通過相同的辦法來定義寬高,即也使用height + padding-bottom的方式來將高度撐起來。