前端筆記:圖片按比例裁剪問題(轉載記錄)

最近在做一個產品列表頁面,布局如右圖所示。頁面中有若干個 item,其中每個 item 都向左浮動,并包含在自適應瀏覽器窗口寬度的父元素中。


效果圖

item 元素的 CSS 定義如下:

.item{

? ? ? ? float:left;

? ? ? ? margin:10px2%;

? ? ? ? width:21%;

}

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

為此我放棄 CSS,直接用 JavaScript 綁定window的onresize事件來動態(tài)獲取每個 item 的寬度,從而計算并設置其高度。

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

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

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

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

最后 item 元素的 CSS 樣式為:

.item{

? ? ? ? ?float:left;

? ? ? ? ?margin:10px5%;

? ? ? ? ?padding-bottom:33.98%;

? ? ? ? ?width:21%;height:0;

}

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

相關閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,122評論 1 92
  • ?前端面試題匯總 一、HTML和CSS 21 你做的頁面在哪些流覽器測試過?這些瀏覽器的內核分別是什么? ...
    Simon_s閱讀 2,371評論 0 8
  • 一:在制作一個Web應用或Web站點的過程中,你是如何考慮他的UI、安全性、高性能、SEO、可維護性以及技術因素的...
    Arno_z閱讀 1,361評論 0 1
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,114評論 0 2
  • 4月12日 相濡以沫 1、昨天做完茱莉蔻的面護,感覺時間還早,想著馬上要參加紅酒派對了,也要稍微拾掇一下自己,跑去...
    滋滋味味閱讀 376評論 0 3

友情鏈接更多精彩內容