P粉5295811992023-09-01 15:18:03
解決方案非常簡單。我將我的網格放入另一個網格中。然後我簡單地使用 fr 作為調整主網格所在 div 上的行大小的方法。這導致了將網格行從 0fr 轉換為 1fr 的可能性。就是這樣。
.toggle { width: 100%; } .grid { display: grid; width: 20%; border: solid black 2px; } .div1 { grid-column: 1; grid-row: 1; } .div2 { grid-column: 2; grid-row: 1; } .wrapper { grid-column: 1 / 3; grid-row: 2; display: grid; grid-template-rows: 0fr; overflow: hidden; transition: grid-template-rows 200ms; } .div3 { grid-column: 1; grid-row: 1; min-height: 0; } .div4 { grid-column: 2; grid-row: 1; min-height: 0; } .toggle:checked ~ .grid > .wrapper { grid-template-rows: 1fr; }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="style.css"> <title>Website</title> </head> <body> <input class="toggle" type="checkbox"> <div class="grid"> <div class="div1">Hello</div> <div class="div2">Hello2</div> <div class="wrapper"> <div class="div3">Hello3</div> <div class="div4">Hello4</div> </div> </div> </body> </html>
此外,如果您的網格中有不同大小的不同行。例如,一個為 0.05fr,一個為 1fr,動畫將變得「滯後」。您可以做的就是將包裝網格放入另一個包裝網格中。然後,您不會使用實際行來為該網格設定動畫,而是使用相同的方法為第一個網格的子級或實際網格的父級設定動畫。
這是一種奇怪的解決方法,但它是解決問題的一種方法,而無需重做太多。