CSS實現寬高等比自適應容器


在最近開發移動端頁面,遇到這么一個情況:當頁面寬度 100% 時,高度為寬度一半,並隨手機寬度變化依然是一半。

於是我們就需要實現一個寬度自適應,高度為寬度一半的容器

這里先以高度為寬度一半為例,也可以是其他任意比例

 

一、思考如何實現

這個問題類似於:我們在移動端頁面,上面有一張寬度 100% 的圖片,如果我們沒設置高度,則圖片會根據原有尺寸,等比縮放。

我們可以借助這個想法,根據元素高度,來為元素設置一個相應比例的高度即可。

 

二、實現方法1 - 通過 vw 視口單位實現

所謂視口單位(viewport units)是相對於視口(viewport)的尺寸而言,100vw 等於視口寬度的 100%,即 1vw 等於視口寬度的 1%。

我們就可以利用這個特性,實現移動端的寬高等比自適應容器。

html代碼:

<div class="box"> <img src="http://images.pingan8787.com/2019_07_12guild_page.png" /> </div>

css代碼:

*{
    margin:0; padding:0 } .box{ width:100%; height:51.5vw } .box img{ width:100%; }
為什么 .box 高度為 51.5vw 呢?

原因是圖片原來的尺寸是 884 * 455的寬高比例,即 455 / 884 = 51.5%。

這個方法相比原來圖片的等比縮放,有個優點:無論圖片是否加載成功,容器高度始終是計算完成,不會造成頁面抖動,也不會造成頁面重繪,從而提升性能。

下面看看這種情況下,圖片加載成功和失敗的對比:

 

三、實現方法2 - 通過子元素 padding 實現

通過設置子元素的 padding 屬性來實現,是比較常用,也是效果比較好的一種,這里需要理解的是:子元素的 padding 屬性百分比的值是先對父容器的寬度而言

這里看下面代碼和效果圖理解下:

html代碼:

<div class="box"> <div class="text">我是王平安,pingan8787</div> </div>

css代碼:

.box{ width: 200px; } .text{ padding: 10%; }

廣州設計公司https://www.houdianzi.com 我的007辦公資源網站https://www.wode007.com

分析:

這里我們將父容器 .box 寬度設置為 200px,子元素 .text 的 padding:10% ,因此 .box 的 padding 計算結果為 20px;

接下來結合主題,我們利用這個原理,來實現等比例的問題:

HTML代碼:

<div class="box"> <div class="text"> <img src="http://images.pingan8787.com/2019_07_12guild_page.png" /> </div> </div>

CSS代碼:

.box{ width: 100%; } .text{ overflow: hidden; height: 0; padding-bottom: 51.5%; } .box .text img{ width: 100%; }

這里 .text 的 padding-bottom: 51.5%; 也是按照第一個方法,用圖片原始尺寸的寬高比計算出來的,需要注意,這里將 .text 設置 height: 0; 會出現高度比實際高的問題,因此為了避免這個情況,就需要設置 height: 0;。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM