P粉4589136552023-09-04 16:01:19
你有aspect-ratio
告訴棋盤具有與寬度相同的高度,所以如果你的寬度是3000px,你的高度將是相同的。你有選擇
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } .parent { height: 100vh; background-color: grey; display: flex; flex-direction: column; } .header { flex-shrink: 0; height: 10px; background-color: blue; } .child { flex-grow: 1; background-color: lightcoral; } .chessboard { height: 100%; max-height: 100%; background-color: purple; margin: auto; } .footer { flex-shrink: 0; height: 10px; background-color: green; }
<div class="parent"> <header class="header"> </header> <div class="child"> <div class="chessboard"> main </div> </div> <footer class="footer"> </footer> </div>
P粉0345716232023-09-04 15:38:58
最終答案取決於您的一些澄清。我在這個問題的評論中問過你。但我會給出一個通用的答案。
我將簡要解釋下面範例中所做的事情。
我創建了一個 .chessboard-wrapper
,其中有一個 。
根據需要進行縮放,並具有
aspect-ratio: 1;
。
.chessboard
本身俱有 position:absolute;
並將採用父親的尺寸。
* { margin: 0; padding: 0; box-sizing: border-box; } .parent { height: 100vh; background-color: grey; display: flex; flex-direction: column; } .header { height: 10px; background-color: blue; flex: none; } .child { background-color: red; flex: auto; min-height: 0; display: flex; flex-direction: column; } .chessboard-wrapper { position: relative; min-height: 0; margin: auto; aspect-ratio: 1; } .chessboard-wrapper > canvas { max-width: 100%; max-height: 100%; } .chessboard { position: absolute; inset: 0; background-color: purple; } .footer { height: 10px; background-color: green; flex: none; }
<div class="parent"> <div class="header"></div> <div class="child"> <div class="chessboard-wrapper"> <canvas width="1000000" height="1000000"></canvas> <div class="chessboard"></div> </div> </div> <div class="footer"></div> </div>