css使用padding-bottom百分比進行提前占位,防止抖動


頁面加載抖動問題

在web開發中,經常會遇到這樣一個問題,比如一個寬度百分百,高度自適應的圖片,在網速慢的情況下加載過程中會出現抖動的問題(未加載圖片前容器的高度為0,圖片加載完成后下面的內容會被擠下去)。

這種問題如果是圖片有固定高度,就不會出現加載抖動。但一般情況下,為了使圖片不被拉伸,高度一般設為自適應,那么為了防止加載抖動,我們需要給圖片提前占個位,這里使用的是css的padding-bottom百分比進行占位。

示例代碼如下

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

padding-bottom實際上是提前占位了,這個容器的高度始終是0,高度為0還之所以能夠顯示內容是因為內容溢出在了padding-bottom上,這里的50%是圖片的高寬比例,切記是相對於父元素寬度的50%(即.img-box的上一級),不是相對於自己的width,詳情請看下面的例子。

這里寫了一個小案例

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>padding-bottom</title>
  <style>
    .content{
      width: 400px;
      height: 400px;
      margin: 100px auto;
      background-color: aquamarine;
    }
    .box1{
      width: 100%;  /* 400px 相對於content的width */
      height: 0;
      padding-bottom: 50%;  /* 200px 相對於content的width */
      background-color: red;
    }
    .box2{
      width: 25%; /* 100px 相對於box1的width */
      height: 0;
      padding-bottom: 25%;  /* 100px 相對於box1的width */
      background-color: yellow;
    }
  </style>
</head>
<body>
  <div class="content">
    <div class="box1">
      <div class="box2"></div>
    </div>
  </div>
</body>
</html>

如圖所示

padding-bottom

這種情況下box2中如果有圖片寬高比為一比一時(根據padding的百分比),加載過程中就不會出現抖動的情況,同理box1也是如此。

當然解決抖動還有其他方法,比如何以用vw(兼容性不太好,這里就不列舉了),還有比如在微信小程序中rpx,如果圖片的設計大小寬高為750×300時,就可以直接寫成height: 300rpx。


免責聲明!

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



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