P粉2949544472023-08-31 11:33:30
影像列的寬度不是任意的。
網格容器首先佈置結構。 。 然後正在佈置物品。
這表示當影像處於其自然寬度 (100%) 時,第一列的大小將會調整。
當項目以寬度:50%
呈現時,瀏覽器不會傳回並重新調整列的大小。
所以列的大小不是任意的;這是圖像的自然寬度。
(這可以說是一個錯誤或 CSS 限制。)
請注意,當影像為全寬時,此問題不存在:
* { box-sizing: border-box; } body { margin: 0; } header { display: grid; grid-template-columns: auto 1fr; background-color: green; padding: 1rem; } img { width: 100%; background-color: pink; } div { background-color: red; } nav { background-color: yellow; grid-column: span 2; }
<header> <div style="background-color: blue"> <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 324 413.28'%3E%3Crect class='655de5e2-44d3-4b5a-ae63-e6e7ec799246' x='18' y='18.12' width='288' height='324' fill='blue'/%3E%3C/svg%3E"> </div> <div> <h1>Heading</h1> <p>Text Line 1</p> <p>Text Line 2</p> <p>Text Line 3</p> </div> <nav> <a href="#">Menu Item 1</a> <a href="#">Menu Item 2</a> <a href="#">Menu Item 3</a> <a href="#">Menu Item 4</a> <a href="#">Menu Item 5</a> <a href="#">Menu Item 6</a> </nav> </header>
當你嘗試 width: 150%
時它會回來:
* { box-sizing: border-box; } body { margin: 0; } header { display: grid; grid-template-columns: auto 1fr; background-color: green; padding: 1rem; } img { width: 150%; background-color: pink; } div { background-color: red; } nav { background-color: yellow; grid-column: span 2; }
<header> <div style="background-color: blue"> <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 324 413.28'%3E%3Crect class='655de5e2-44d3-4b5a-ae63-e6e7ec799246' x='18' y='18.12' width='288' height='324' fill='blue'/%3E%3C/svg%3E"> </div> <div> <h1>Heading</h1> <p>Text Line 1</p> <p>Text Line 2</p> <p>Text Line 3</p> </div> <nav> <a href="#">Menu Item 1</a> <a href="#">Menu Item 2</a> <a href="#">Menu Item 3</a> <a href="#">Menu Item 4</a> <a href="#">Menu Item 5</a> <a href="#">Menu Item 6</a> </nav> </header>
旁注
一般來說,在使用 CSS Grid 和 Flexbox 時,將圖像作為容器的子項並不是一個好主意。
換句話說,通常最好避免將影像用作網格或彈性項目。
不同瀏覽器之間有太多錯誤和渲染差異。
在許多情況下,只需將圖像放入 div
中(使 div
成為網格項目)即可解決問題。
避免將影像作為網格或彈性項目: