1. 程式人生 > >利用padding百分比繼承父級元素寬度特性實現元素寬高比例縮放

利用padding百分比繼承父級元素寬度特性實現元素寬高比例縮放

純 CSS 實現高度與寬度成比例的效果
最近在做一個產品列表頁面,佈局如下圖所示。頁面中有若干個 item,其中每個 item 都向左浮動,幷包含在自適應瀏覽器視窗寬度的父元素中。
item 元素的 CSS 定義如下:
這裡寫圖片描述

.item {
  float: left;
  margin: 10px 2%;
  width: 21%;
}

這時遇到的一個需求:在保持 item 元素寬高比恆定(如高是寬的 1.618 倍)的情況下,使得 item 元素可以和父元素同比縮放。 我們知道,如果當 item 元素是圖片,同時需要保持的寬高比恰好為圖片本身的寬高比時,可以設定 item 的 height 為 auto 即可輕鬆實現這個需求。然而當 item 元素不是圖片或者要保持的寬高比和圖片本身的寬高比不同時,這個需求顯得很難直接用 CSS 實現。

為此我放棄 CSS,直接用 JavaScript 繫結 window 的 onresize 事件來動態獲取每個 item 的寬度,從而計算並設定其高度。

我一直在使用這個解決方案,直到今天調整樣式時,突然想到這個需求竟然是可以只使用 CSS 解決的。

首先需要知道,一個元素的 padding,如果值是一個百分比,那這個百分比是相對於其父元素的寬度而言的,即使對於 padding-bottom 和 padding-top 也是如此。

另外,在計算 Overflow 時,是將元素的內容區域(即 width / height 對應的區域)和 Padding 區域一起計算的。換句話說,即使將元素的 overflow 設定為 hidden,“溢位”到 Padding 區域的內容也會照常顯示。

綜上兩條所述,我們可以使用 padding-bottom 來代替 height 來實現高度與寬度成比例的效果。因為 item 元素的寬度是其父元素寬度的 21%,所以我們將 padding-bottom 設定為它的 1.618 倍,即 33.98%。同時將其 height 設定為 0 以使元素的“高度”等於 padding-bottom 的值,從而實現需要的效果。

最後 item 元素的 CSS 樣式為:

.item {
  float: left;
  margin: 10px 5%;
  padding-bottom: 33.98%;
  width: 21%;
  height: 0
; }

相關推薦

利用padding百分比繼承元素寬度特性實現元素高比例

純 CSS 實現高度與寬度成比例的效果 最近在做一個產品列表頁面,佈局如下圖所示。頁面中有若干個 item,其中每個 item 都向左浮動,幷包含在自適應瀏覽器視窗寬度的父元素中。 item 元素的 CSS 定義如下: .item { float

css利用padding百分比實現圖片自適應高度

應用場景 寬高比率,實現圖片自適應高度,防止圖片載入過程高度為0,載入完圖片高度撐起,它下面的div抖動問題 重點:CSS百分比padding都是相對寬度計算的 <div class="works-item-t"> <img src="./150x200.png">

jquery獲取的同級的子元素

一、知識介紹1、jquery獲取父級元素用parent()$(this).parent('ul');2、jquery獲取同級元素用siblings()$(this).parent('ul').siblings();3、jquery獲取子元素用find()$(this).par

JQuery實現選擇器(廣告實現)

ont highlight .com jquery實現 src absolute content 1.0 utf-8 效果圖如下: HTML代碼如下: <!DOCTYPE html> <html lang="en"> <head>

c++子類繼承類函式呼叫特性原理以及與java的對比

c++ c++中子類繼承了父類,子類物件的函式和變數會接著新增在父類物件的記憶體後面,以此類推。。。 如果c++中父類的那個變數或者函式宣告為virtual虛擬函式,那麼子類物件的同名函式就直接覆蓋了(即在記憶體中真正的覆蓋,父類的這個函式已經不在了)父類物件的這個函式 如

【前端】利用Canvas給圖片新增水印,支援拖拽、編輯、與刪除

利用Canvas給圖片新增水印,支援拖拽、編輯、縮放與刪除。 難點一: 如何在偽元素after“刪除按鈕“上新增點選事件。 通過滑鼠點選位置event中offsetX屬性獲得其偏離元素距離,與元素寬度做比較。若大於元素寬度,則點選在了偽元素上,否則點選到正常元

解決圖片太大溢位問題、CSS 限制圖片最大寬度、圖片按比例自動

在網上找了很久,這裡儲存一下,方便以後使用 實現思路很簡單,改造js程式碼,既然圖片很大,那麼我們先用最經典的限制width的方法限制大圖的寬度,但是小圖怎麼辦?小圖我們用onload的方法再縮小,就這麼搞定了。完美程式碼如下: 對應的JS程式碼: <script

使用背景圖片,圖片高度隨寬度自動變化,並居中,不變形

item{    width:100%; height:0; padding-bottom:41.8%; overflow:hidden; background-position:50%; background-repeat:no-repeat; background-si

【震驚】padding-top的百分比值參考物件竟是元素寬度

## 引言 書寫頁面樣式與佈局是前端工程師```Coding``` 中必不可少的一項工作,在定義頁面元素的樣式時,```padding``` 屬性也是經常被使用到的。 ```padding``` 屬性用於設定元素的內邊距,其值可以是```length```、```inherit```,當然也可以是```百分

margin與padding值設定為百分數時,其值的計算參照最近元素width

在前端開發過程中,設定樣式引數margin 與 padding 值為百分數時,其具體值的計算方法需參照最近父級的width計算。 1)exp1: margin-top 為百分數 其中標籤的巢狀關係為: <div class="boxparent">

浮動元素繼承元素padding-top值

疑問: ie6下 浮動元素會繼承父元素的padding-top值? 問題重現條件:子元素(a)浮動,父元素(.demo)設padding-top值並沒設高度,有祖父元素(.box) /*演示樣式*/ <style type="text/css">

兼容性— IE6下子元素高會撐大

color html image oct 編寫代碼 ack box ie6 images <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

js在元素上添加點擊事件,怎麽阻止子元素繼承元素的點擊事件?

!= fun 元素 spa clas urn else target click div.onclick = function(ev){ if(ev.target!=this) return; else { ... } }js在父元素

video自動填充滿元素

寬高 覆蓋 object vid cal art scale .net 100% 想要video能自動填充慢父div的大小,只要給video標簽加上style="width= 100%; height=100%; object-fit: fill"即可。 object-fi

Jquery 元素、同級元素、子元素

所有 close next() eva 第一個 上一個 tro find() 子元素 prev():獲取指定元素的上一個同級元素(是上一個哦)。 prevAll():獲取指定元素的前邊所有的同級元素。 find():查找子元素方式 next(): 獲取指定元素的下一個同級元

圖片寬度大於元素寬度時如何水平居中

class 一半 寬度 div col 弊端 abs pan tex 1. 定位流:對圖片進行定位 .img{ position:absolute; left:50%; margin-left:-20px;/*值為圖片寬度的一半*/ }  這種方法不多說

jQuery以及同級元素查找的實例

next ren 會有 pan ngs 兄弟節點 nts find exp  父級以及同級元素的查找在使用過程中還是蠻頻繁的,下面為大家介紹下jQuery是如何實現的,感興趣的朋友可以參考下   jQuery.parent(expr) 找父親節點,可以傳入expr進行過濾,

js獲取元素下所有子元素寬度賦值給元素

網上 () func back 賦值 click button article ack 這個問題是今天在網上看到有人提的。 想要獲取#box下面所有div的寬度之和,然後賦值給#box,不論加多少個div,#box的寬都會隨著div的增加而改變。 <styl

jquery獲取元素、子元素、兄弟元素的方法

next 返回結果 初始 對象 clas 祖先 eval p s all jQuery.parent(expr) 找父親節點,可以傳入expr進行過濾,比如$("span").parent()或者$("span").parent(".class") jQuery.par

jquery選擇器 之 獲取元素、同級元素、子元素 (轉載)

content 異同 sele sel node pan query -a ofo 一、獲取父級元素 1、 parent([expr]): 獲取指定元素的所有父級元素 <div id="par_div"><a id="href_fir" href="#