一行css解決圖片統一大小後的拉伸問題(被冷漠的object-fit)
一、先來個實戰
1. 測試案例
- 需求: 要求表情庫裡所有表情包大小都固定
- 實際效果: 由於圖片原始大小都不一樣,強行設定大小值會導致拉伸,如果不設定大小則參差不齊。例如:
//html
<body>
<img src="1.jpg" />
<img src="2.jpg" />
<img src="3.jpg" />
....
</body>
//css
img{
width: 80px;
height: 80px;
margin-right: 10px;
}
2. 解決方法
大多數都是利用
background-size: cover
來避免對圖片造成的壓縮或者拉伸。
小巧而強大的object-fit
object-fit似乎是被人忽視的一個CSS3屬性。因為存在相容性,所以沒有background-size
好用,但是由於某種情況,你不得不用img
標籤來引入圖片,這時候用object-fit
是很好的選擇。
我們給上圖所有img都統一加上object-fit: cover;
屬性,看看效果:
完美解決!真的很方便,只需要一行css
我們具體學一下object-fit
屬性 | 描述 |
---|---|
fill | 預設值。整個物件將完全填充此框。 如果物件的高寬比不匹配其框的寬高比,那麼該物件將被拉伸以適應。 |
contain | 整個物件在填充盒子的同時保留其長寬比,因此如果寬高比與框的寬高比不匹配,該物件將被新增“黑邊”。 |
cover | 被替換的內容大小保持其寬高比,同時填充元素的整個內容框。 如果物件的寬高比與盒子的寬高比不匹配,該物件將被剪裁以適應。 |
none | 內容尺寸不會被改變。 |
scale-down | 內容的尺寸就像是指定了none或contain,預設應用尺寸最小的值 |
我們用一張圖片作為例子解析以上上面各個屬性:
//html
<div>
<img src="./public/test.jpg" class="initImg"/>
<p>圖片初始化</p>
</div>
<div>
<img src="./public/test.jpg" class="initImg fillImg"/>
<p>object-fit:fill</p>
</div>
<div>
<img src="./public/test.jpg" class="initImg containImg"/>
<p>object-fit:contain</p>
</div>
</br>
<div>
<img src="./public/test.jpg" class="initImg coverImg"/>
<p>object-fit:cover</p>
</div>
<div>
<img src="./public/test.jpg" class="initImg noneImg"/>
<p>object-fit:none</p>
</div>
<div>
<img src="./public/test.jpg" class="initImg scaleDownImg"/>
<p>object-fit:scale-down</p>
</div>
//css
body div{
display: inline-block;
text-align: center;
}
.initImg{
width: 150px;
height: 80px;
}
.fillImg{
object-fit: fill;
}
.containImg{
object-fit: contain;
}
.coverImg{
object-fit: cover;
}
.noneImg{
object-fit: none;
}
.scaleDownImg{
object-fit: scale-down;
}
這裡稍微解釋一下:
- fill: 預設值,和未設定一樣。會將圖片壓縮拉伸
- contain: 當寬/高的值達到父容器規定的最小寬/高時,則對應的另一個值會按照原始寬高比進行生成。例如上面,圖片的高度達到父容器高度後,寬度按照比例生成,導致左右留白
- cover: 和
contain
不一樣,cover是以最大值為規定的。例如上圖,圖片的高度(較小值)首先達到父容器高度後,而寬度並未達到父容器的寬度,圖片會繼續'生長',直到寬度達到和父容器寬度一致。而等比伸縮的高度會溢位,溢位部分裁剪 - none: 顧名思義寬高對圖片不起作用,即使設定了固定的寬高,圖片仍然以原始大小展現,但是超出設定的值會被遮擋
- scale-down: 以
contain
或none
圖片最小尺寸為標準.
以上就是object-fit的全部用法。
很簡單,但是很強大
當然,也可以用background-size
解決圖片伸縮問題
例如淘寶網:
當從文章提取的圖片和文章list的展示塊尺寸比例不一致的時候,背景圖可通過指定 background-size:contain | cover
來避免對圖片造成的壓縮或者拉伸。
相關文章
- 解決android有的手機拍照後上傳圖片被旋轉的問題Android
- 解決canvas合成圖片大小錯誤、模糊以及跨域的問題Canvas跨域
- 解決Hexo關於圖片的問題Hexo
- 解決相鄰圖片之間的空隙問題
- nginx 解決圖片跨域問題Nginx跨域
- 解決圖片訪問403 Forbidden問題ORB
- iOS 圖片拉伸、拉伸兩端保留中間iOS
- 實現背景圖片的全屏拉伸效果
- 一行命令PS你的圖片
- 巧妙的有css合併圖片解決tab切換的背景圖片CSS
- 【轉】css解決相容的問題CSS
- 模組圖片平鋪、拉伸
- 一行程式碼解決求重問題行程
- mysql大小寫問題解決MySql
- IOS下圖片不能顯示問題的解決辦法iOS
- CSS去掉最後一行的分割線CSS
- 重拾圖片純淨之美:Topaz DeNoise AI,一鍵解決圖片降噪問題AI
- 如何解決div樣式拉伸問題
- 將任意bmp圖片大小重新設定後生成新的bmp圖片
- jive 傳圖片問題,那位老大幫我解決一下
- Android圖片解析度dpi的相關問題解決Android
- 【圖解經典演算法題】如何用一行程式碼解決約瑟夫環問題圖解演算法行程
- 多行文字末尾新增圖片排版問題解決
- 成功解決github無法顯示圖片問題Github
- CSS鏤空圖片transition過渡初載入背景色塊問題解決CSS
- Java應用上雲後被kill問題分析與解決Java
- Bitmap拉伸後出現鋸齒的幾種解決辦法
- 解決js控制元素背景圖片切換時的閃屏問題JS
- ubuntu下解決埠被佔用的問題Ubuntu
- 解決被掛起的資料庫問題資料庫
- 解決ELK日誌被截斷的問題
- 求高手解決用java限制上傳圖片大小!!Java
- jQuery 操作 XML(解決大小寫問題)jQueryXML
- 【菜鳥學安卓】- TextView 顯示Html 一 解決圖片顯示不了的小問題安卓TextViewHTML
- CSS Hacks 和 問題解決CSS
- 載入圖片的問題
- UIImageView的圖片居中問題UIView
- 最近解決的幾個DIV+CSS的問題CSS