一行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
來避免對圖片造成的壓縮或者拉伸。
相關文章
- 解決canvas合成圖片大小錯誤、模糊以及跨域的問題Canvas跨域
- 解決Hexo關於圖片的問題Hexo
- 大小不統一的圖片居中排列
- 解決圖片訪問403 Forbidden問題ORB
- nginx 解決圖片跨域問題Nginx跨域
- mysql大小寫問題解決MySql
- 一行命令PS你的圖片
- iOS 圖片拉伸、拉伸兩端保留中間iOS
- 一行程式碼解決求重問題行程
- IOS下圖片不能顯示問題的解決辦法iOS
- 重拾圖片純淨之美:Topaz DeNoise AI,一鍵解決圖片降噪問題AI
- 將任意bmp圖片大小重新設定後生成新的bmp圖片
- 如何解決div樣式拉伸問題
- 多行文字末尾新增圖片排版問題解決
- 成功解決github無法顯示圖片問題Github
- 解決js控制元素背景圖片切換時的閃屏問題JS
- ubuntu下解決埠被佔用的問題Ubuntu
- 解決ELK日誌被截斷的問題
- Java應用上雲後被kill問題分析與解決Java
- 【圖解經典演算法題】如何用一行程式碼解決約瑟夫環問題圖解演算法行程
- url-loader不能處理html中引入的圖片問題的解決方案HTML
- 短視訊系統,解決圖片上傳時底部或頂部留白的問題
- 解決jenkins 傳送郵件圖片亂碼問題Jenkins
- vue-element-admin 解決壓縮打包之後背景圖片不顯示問題Vue
- WPF 讀取圖片 賦值Image控制元件 解決圖片佔用問題賦值控制元件
- 一道指令快速解決MAC不能預覽WebP格式圖片問題MacWeb
- 解決彈出層被Flash擋住的問題
- CSS解決文字溢位問題CSS
- 解決CSS position:fixed 相容問題CSS
- css高度塌陷問題解決方法CSS
- 直播系統搭建,插入圖片、刪除圖片、設定圖片大小
- 在CSS中解決內容過長的問題CSS
- wordress小程式圖片訪問出現404問題解決辦法
- 解決Linux系統下MYSQL資料表大小寫敏感問題LinuxMySql
- 圖片問題
- 解決網站搬家windows下解壓圖片檔名亂碼問題的利器:Bandizip網站Windows
- PDF轉圖片部分公式字元丟失問題解決的爬坑記錄公式字元
- 影片直播系統原始碼,CSS3如何調整背景圖片大小原始碼CSSS3