下面是AI的回答:
要讓 <object> 元素內嵌的 SVG 保持與其內容一致的長寬比(aspect ratio),或讓內部的 SVG 自動適應 <object> 的寬度(responsive),關鍵在於 SVG 檔案本身的屬性設定,以及 <object> 的 CSS 樣式。
1. 先確保 SVG 檔案本身支援縮放
SVG 必須有 viewBox 屬性,這定義了內部內容的原始座標範圍與比例。預設的 preserveAspectRatio="xMidYMid meet" 會自動保持長寬比。
- 推薦在 SVG 根元素
<svg>上設定:<svg viewBox="0 0 原始寬度 原始高度" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg"> <!-- 你的 SVG 內容 --> </svg>viewBox的值通常是0 0 你的設計寬度 你的設計高度(例如0 0 100 100)。- 如果 SVG 原本有固定
width和height屬性(如width="500px" height="300px"),建議移除或改成百分比(如width="100%" height="100%"),否則會限制縮放。
如果 SVG 沒有 viewBox,內部內容就不會根據容器比例自動調整。
2. HTML 中的 <object> 使用方式
<div class="svg-container">
<object type="image/svg+xml" data="your-svg-file.svg"></object>
</div>
3. CSS 讓它適應寬度並保持比例
.svg-container {
width: 100%; /* 或你想要的寬度,例如 600px */
max-width: 100%; /* 響應式,避免超出父容器 */
}
.svg-container object {
width: 100%; /* 填滿容器寬度 */
height: auto; /* 高度自動根據比例計算 */
display: block; /* 移除 inline 元素的底部間隙 */
}
- 這樣 SVG 會:
- 完全適應外層容器的寬度。
- 自動計算高度,保持內部 SVG 的原始長寬比(不會變形)。
- 在不同螢幕大小下響應式縮放。
4. 進階選項(根據需求調整對齊方式)
如果想改變 SVG 在容器內的對齊或填滿方式,可以修改 SVG 檔案中的 preserveAspectRatio:
xMidYMid meet(預設):保持比例,完整顯示內容,容器有多餘空間時會留白(類似object-fit: contain)。xMidYMid slice:保持比例,填滿整個容器,多餘部分裁切(類似object-fit: cover)。none:不保持比例,直接拉伸填滿(會變形,通常不推薦)。
注意事項
- 如果 SVG 是外部檔案,修改需編輯該檔案本身(或用工具如 Inkscape/Illustrator 匯出時加入
viewBox)。 - 測試瀏覽器相容性:現代瀏覽器(Chrome、Firefox、Safari、Edge)都支援良好。
- 如果 SVG 內有互動(如連結、動畫),
<object>比<img>更好,因為它允許內部腳本執行。
這樣設定後,<object> 的長寬比就會跟內部 SVG 內容一致,且 SVG 會自動適應寬度而不失真。如果你的 SVG 檔案目前沒有 viewBox,這是最常見的問題來源!