CSS 實現自適應正方形


在處理移動端頁面時,我們有時會需要將banner圖做成與屏幕等寬的正方形以獲得最佳的體驗效果,比如,商品詳情頁,

 

方法1、CSS3 vw單位

CSS3 中新增了一組相對於可視區域百分比的長度單位 vw, vh, vmin, vmax。其中 vw 是相對於視口寬度百分比的單位,1vw = 1% viewport width, vh 是相對於視口高度百分比的單位,1vh = 1% viewport height;vmin 是相對當前視口寬高中 較小 的一個的百分比單位,同理 vmax 是相對當前視口寬高中 較大 的一個的百分比單位。該單位瀏覽器兼容性查看:https://caniuse.com/#search=vw

<div class="box"></div>

<style>
    .box{width: 100vw;height: 100vw;background: #F2DEDE;}
</style>

優點:簡潔方便

缺點:瀏覽器兼容不好

 

方法2、設置垂直方向的padding撐開容器

在 CSS 盒模型中,一個比較容易被忽略的就是 margin, padding 的百分比數值計算。

按照規定,margin, padding 的百分比數值是相對 父元素寬度 的寬度計算的。由此可以發現只需將元素垂直方向的一個 padding 值設定為與 width 相同的百分比就可以制作出自適應正方形

<div class="box"></div>

<style>
     .box{
        width: 100%;
        padding-bottom: 100%;/* padding百分比相對父元素寬度計算 */
        height: 0;//避免被內容撐開多余的高度
    }
</style>    

這種方案簡潔明了,且兼容性好;但。。。可能碰上max-height不收縮,怎么辦 ? 那就用方法3...

 

方法3、利用偽元素的 margin(padding)-top 撐開容器

<div class="box"></div>

<style>
    .box {width: 100%;overflow:hidden; background: #F2DEDE;}
    .box::after {content: "";display: block;margin-top: 100%;}
</style>

這里就涉及到margin collapse的概念,由於容器與偽元素在垂直方向發生了外邊距折疊,所以我們想象中的撐開父元素高度並沒有出現。而應對的方法是在父元素上觸發 BFC:overflow:hiddden;

若使用垂直方向上的 padding 撐開父元素,則不需要觸發 BFC,如下:

<div class="box"></div>

<style>
    .box {width: 100%;background: #F2DEDE;}
    .box::after {content: "";display: block;padding-top: 100%;}
</style>

注意:當元素內部添加內容時高度出現溢出,可以將內容放到獨立的內容塊中,利用絕對定位消除空間占用,如下:

<div class="container">
    <div class="box">內容</div>
</div>

<style>
    .container {width: 100%;background: #F2DEDE;position: relative;}
    .container::after {content: "";display: block;padding-top: 100%;}
    .container .box{position: absolute;width: 100%;height: 100%;}
</style>

 


免責聲明!

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



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