css元素保持比例,鋪滿父元素高或寬

分享交流编程相关的话题?
回复
头像
ejsoon
圈圈精英
圈圈精英
帖子: 4802
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 173 次
被圈友点赞: 202 次
联系:

css元素保持比例,鋪滿父元素高或寬

帖子 ejsoon »

代码: 全选

要讓 `<img>`(高寬比固定為 3:2)**完全鋪滿父元素的高或寬**(即覆蓋整個容器,不留空白),同時**保持原始比例**且**居中**,最簡單且現代的做法就是使用 CSS `object-fit: cover` + `object-position: center`。

### 推薦方案(2026 年最佳做法)

**HTML 結構:**
```html
<div class="parent">
  <img src="你的圖片.jpg" alt="描述">
</div>
```

**CSS:**
```css
.parent {
  /* 父元素必須有明確的寬高(可使用 %、vw、px 等) */
  width: 100%;     /* 或固定如 600px */
  height: 400px;   /* 或固定如 300px、100vh 等 */
  overflow: hidden; /* 確保超出部分被裁切 */
  position: relative;
}

.parent img {
  width: 100%;
  height: 100%;
  
  /* 關鍵屬性 */
  object-fit: cover;      /* 自動選擇填滿寬或高,保持 3:2 比例,裁切多餘部分 */
  object-position: center; /* 水平垂直置中 */
}
```

### 為什麼這樣就能達成你的需求?
- `object-fit: cover` 會讓圖片**至少填滿父元素的寬和高的其中一邊**(自動判斷),另一邊如果超出就裁切。
  - 如果父元素比例比 3:2 寬 → 會填滿高度,左右裁切。
  - 如果父元素比例比 3:2 高 → 會填滿寬度,上下裁切。
  - 如果父元素正好是 3:2 → 完全不裁切。
- `object-position: center` 保證永遠置中。
- 圖片原始 3:2 比例完全不會被拉伸變形。

### 替代方案(如果你不想裁切圖片)

如果不希望裁切,只要把 `cover` 改成 `contain` 就好:
```css
object-fit: contain;
```
這時圖片會完整顯示,但可能在上下或左右出現空白(letterbox),無法「完全鋪滿」。

### 舊瀏覽器相容寫法(不依賴 object-fit)

如果需要支援非常舊的環境,可以改用絕對定位 + `min-width/min-height`:

```css
.parent {
  position: relative;
  overflow: hidden;
}

.parent img {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  min-width: 100%;
  min-height: 100%;
  width: auto;
  height: auto;
}
```

效果與 `object-fit: cover` 完全相同。

這樣就搞定了!有特定父元素尺寸或響應式需求再告訴我,我可以再幫你調整。
https://ejsoon.vip/
弈趣極光:享受思維樂趣
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 12 访客