我不明白為什么在下面的代碼中,svg-container元素被限制為1/1的縱橫比,卻不放大它的父元素top。它按照我的需要垂直填充頂部元素,但是沒有擴大它的寬度。
目前,父模塊元素的寬度由bottom的子元素的總寬度決定,這正是我所期望的。除了svg-container的計算寬度比底部大,我希望頂部和模塊調整到這個更大的寬度。
在開發工具中,我清楚地看到了縱橫比的效果,因為svg容器的邊界框比它的父對象要大(藍色框向左右溢出)。盡管頂部元素的寬度設置為auto,但它不會調整寬度來容納其子元素。
在svg上設置height: 100%或width: 100%沒有幫助,我也不認為這是必要的,因為svg-container已經有了合適的尺寸。它只是不調整其父對象的大小。
我已經把整件事提交給ChatGPT,得到了這樣的回復:
自從。module元素應用了justify-content: space-between,它嘗試在其flex項(頂部和底部)之間分配可用空間。控件的width: auto屬性。模塊元素阻止它擴展以適應更寬的。SVG-容器。
這導致了替換寬度:自動輸入的建議。帶伸縮裝置的模塊:1。這并沒有改變什么,然后我被告知這在CSS中是不可能的。
我不明白為什么在flex框中垂直分布項目會阻止項目水平擴展flex框。是通過設計嗎,在CSS中有可能實現我需要的嗎?
/*
Extra wrapper needed for rounded borders because parent has overflow-x: auto
*/
.module-wrapper {
}
.module {
border-radius: 0.5rem;
/* Needed for absolute positioning of close button */
position: relative;
/* Hide corners */
overflow-y: hidden;
/* Vertically distribute top and bottom */
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
/* Fill entire available space in parent */
height: 100%;
width: auto;
}
.top {
height: 100%;
width: auto;
align-items: center;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.svg-container {
/* Push <controls> to the bottom */
flex-grow: 1;
/* Keep svg element centered */
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
aspect-ratio: 1/1;
}
.bottom {
/* Container for more elements */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
<div class="module-wrapper">
<div class="module">
<button class="close"/>
<div class="top">
<div class="svg-container">
<svg />
</div>
<div class="controls" />
</div>
<div class="bottom">
</div>
</div>
</div>