HTML/CSS - 如何在使用宽高比时使内容适合可见页面?

问题描述 投票:0回答:1

我的页面上有一个组件(在示例中名为

grid
)。

我希望这个组件能够实现以下约束:
-1- 保持 1:1 纵横比
-2- 尽可能大
-3- 留在视口的范围内(无滚动条)
-4- 最好没有 JavaScript

我能够满足 1、2 和 4,但不能满足 3:

  • 当视口为纵向(高度大于宽度)时,
    grid
    及其子级将根据需要缩小,以保持
    1:1
    的纵横比。
  • 当视口面向横向时,
    grid
    组件会扩展到视口底部之外,从而创建滚动条。

这是我正在查看的 HTML:

    <div id="wholePage" class="black">
      <div>top bar placeholder</div>
      <div id="grid">
        <div class="row darkGray">
          <div class="column red"></div>
          <div class="column yellow"></div>
        </div>
        <div class="row lightGray">
          <div class="column green"></div>
          <div class="column blue"></div>
        </div>
      </div>
    </div>

这是相关的 CSS:

#wholePage {
  background-color: gray;
  width: 100vw;
  height: 100vh;
  display: flex;
  flex-direction: column;
}

#grid {
  width: auto;
  height: auto;
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  aspect-ratio: 1;
}

.row {
  height: 50%;
  width: 100%;
  flex: 0 1 auto;
  display: flex;
  flex-direction: row;
}

.column {
  height: 100%;
  width: 100%;
  flex: 0 1 auto;
}

html css flexbox aspect-ratio
1个回答
0
投票

您可以使用

aspect-ratio
max-width/height
来防止它超出父容器:

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  width 100%;
  height: 100%;
}

.box {
  aspect-ratio: 1 / 1;
  max-width: 100%;
  max-height: 100%;
  border: 5px solid green;
}
<div class="box"></div>

© www.soinside.com 2019 - 2024. All rights reserved.