響應式布局中,元素如何始終保持寬高比?

前言

我們知道響應式布局中,元素的寬度可以隨著瀏覽器窗口的寬度變化而變化,這時候元素只是寬度變化,高度通常情況下是不會隨著變的,當內容高度有變化的時候,高度會隨著內容而變化。

但有時候,我們需要元素的寬高比始終保持一致,這就麻煩了,有人說了,這肯定需要js來實時根據(jù)寬度計算高度,也就是注冊window.onresize事件。然而,布局屬于表現(xiàn),讓JS介入總覺得還是不甘心。

又有人說了,可以用ele {height: calc(width * 0.75)}來實現(xiàn),假定需要保持4:3的比例。但是這段代碼根本就不執(zhí)行,根本就是錯誤的知識。

現(xiàn)在有一個簡單的辦法,和一個復雜的方法,可以實現(xiàn)這種需求。

padding-bottom: xx%大法

我們最終的要求很簡單,就是寬高比鎖定。雖然,并沒有一種直接的css方法能幫你根據(jù)寬度值實時計算高度值,但是有一個屬性接近這種需求,就是padding-bottom。

先看這個手冊:http://www.runoob.com/cssref/pr-padding-bottom.html

% 定義基于父元素寬度的百分比下內邊距。此值不會如預期地那樣工作于所有的瀏覽器中。

先不考慮“此值不會如預期地那樣工作于所有的瀏覽器中。”,因為現(xiàn)在任意一個瀏覽器都可以如預期的工作。padding-bottom的確實現(xiàn)了讓元素的容器高度由元素的容器寬度決定。

現(xiàn)在我們的解決辦法就是:

<body>
  <style>
  .inner {
    height: 0;
    padding-bottom: 25%;
    overflow: hidden;
    background-color: red;
  }
  </style>
  <div style="width: 50%;">
    <div class="inner">
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
      測試<br>
    </div>
  </div>
</body>

現(xiàn)在,你可以調整你的瀏覽器的界面邊界,拉大或者拉小,看看內部容器是不是始終在保持寬高比。

我推薦這種padding-bottom: xx%;大法。

底圖大法

這種解決方案就是依靠一個img元素來負責撐起容器元素,img是媒體元素,它的特點是自帶寬高,可以設置width: 100%; height: auto,這個時候auto的確會自動計算。

所以我們整體方案就是以img撐起元素,然后其他的元素設成absolute,寬高都是100%,就可以實現(xiàn)其他元素的即使有響應式變化也依然保持寬高比。

假設我們有一個可以自適應寬度的容器,如下。它必須是relative,且高度為auto。

<div class="col">

</div>

接著我們給它加入一個img元素,設一些style,注意,display: block非常重要,必須設置。

<div class="col">
    <img style="display:block; width: 100%; height: auto;">
</div>

然后關鍵的問題就是這個圖片是個啥。最佳的選擇是,比如你要保持4:3的比例,元素大體上在400x300px的大小上,可大可小,那么你需要用ps做一張400x300px、png8的透明圖片先。

做好之后,找一個圖片轉dataurl的工具,比如我隨便找了一個http://www.mycodes.net/170/8897.htm ,這個就夠用了。將我們做的圖片轉換成dataurl。如果你的網(wǎng)站需要考慮IE8和以下的瀏覽器訪問,那么就存成一個實體圖片然后引用就行了。

然后就是設置你真正的內容了:

<div class="col">
    <img style="display: block; width: 100%; height: auto;">
    <div style="position: absolute; top: 0; width: 100%; height: 100%;">
        ......
    </div>
</div>

也就是說,img負責保持外層容器的寬高比,然后里面的div也充滿容器,這樣大家就都符合4:3的比例了。就算視口有變化,也一樣能保持。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,114評論 1 92
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,113評論 0 2
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,429評論 0 11
  • 筆記參考自《響應式Web設計:HTML5和CSS3實踐》,2013年出版內容說不上最新。如下是全書的章的目錄:第 ...
    于曉魚閱讀 1,068評論 0 1
  • 轉載請聲明 原文鏈接地址 關注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    前端進階之旅閱讀 16,871評論 32 459

友情鏈接更多精彩內容