【複習】CSS實現寬高等比自適應容器

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

因而咱們就須要實現一個寬度自適應,高度爲寬度一半的容器html

這裏先以高度爲寬度一半爲例,也能夠是其餘任意比例git

1、思考如何實現

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

咱們能夠藉助這個想法,根據元素高度,來爲元素設置一個相應比例的高度便可。微信

2、實現方法1 - 經過 vw 視口單位實現

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

咱們就能夠利用這個特性,實現移動端的寬高等比自適應容器。ui

HTML代碼:spa

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

CSS代碼:code

*{
    margin:0;
    padding:0
}
.box{
    width:100%;
    height:51.5vw
}
.box img{ 
    width:100%; 
}
  • 爲何 .box 高度爲 51.5vw 呢?

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

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

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

1

3、實現方法2 - 經過子元素 padding 實現

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

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

HTML代碼:

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

CSS代碼:

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

2

分析:

這裏咱們將父容器 .box 寬度設置爲 200px,子元素 .textpadding:10% ,所以 .boxpadding 計算結果爲 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%;
}

這裏 .textpadding-bottom: 51.5%; 也是按照第一個方法,用圖片原始尺寸的寬高比計算出來的,須要注意,這裏將 .text 設置 height: 0; 會出現高度比實際高的問題,所以爲了不這個狀況,就須要設置 height: 0;

因而咱們經過2種方法解決了這個問題。

Author 王平安
E-mail pingan8787@qq.com
博 客 www.pingan8787.com
微 信 pingan8787
每日文章推薦 https://github.com/pingan8787...
ES小冊 js.pingan8787.com

微信公衆號

bg

相關文章
相關標籤/搜索