【发布时间】:2017-01-05 09:57:31
【问题描述】:
我确定以前有人问过这个问题,但我找不到确切问题的答案。
我想要一个非常简单的布局:
-------------------
header
-------------------
|
content | graphic
|
-------------------
地点:
- 标题高度由字体大小设置;
- 内容具有固定的最小宽度;
- 在考虑到这两个约束并保留纵横比的情况下,图形尽可能大(即,它将与屏幕减去标题一样高,除非这会使内容面板太窄);
- 鉴于这三个限制,内容尽可能广泛。
[编辑添加:]
- 垂直:当宽度+纵横比约束导致图像小于最大高度时,图像垂直居中
- 水平:图像始终硬靠在屏幕的右侧(任何手动添加的填充除外),并且内容始终位于图像的左侧(任何手动添加的填充除外)。
我尝试过使用弹性框并满足前三个约束条件,但我无法让内容窗格水平增长以填充图像未使用的空间。我得到的最好结果是使用下面的 HTML 和 CSS,但是,正如您在下面的屏幕截图中看到的那样,这会导致内容 div 和图像占用相同的大小,而不是内容 div 将图像推到右侧. (这是在两者上设置 flex=1 的预期行为,所以我没想到它会起作用;但至少这给了我想要的图像大小)。
我使用的是https://jsfiddle.net/uv566jc3/:
.grid {
border: solid 1px #e7e7e7;
height: 95vh;
display: flex;
flex-direction: column;
}
.header {
flex: 0;
}
.grid__row {
flex: 1;
display: flex;
flex-direction: row;
}
.grid__item {
flex: 1;
padding: 12px;
border: solid 1px #e7e7e7;
}
img {
flex: 1;
object-fit: contain;
overflow: hidden;
border: solid 1px #e7e7e7;
}
<div class="grid">
<div class="header">Some header stuff
</div>
<div class="grid__row">
<div class="grid__item">1</div>
<img id="pic" src="https://s27.postimg.org/oc7sozu7n/clouds.png">
</div>
</div>
- grid样式是列方向的flexbox,包含header和grid__row;
- header 的 flex 为 0,即高度由内容设置;
- grid__row 具有 flex 1,即填充标题后剩余的高度;也是一个包含 grid__item 和 img 的行方向的 flex 容器。
- grid__item 具有 flex 1,即填充可用宽度;
- img 具有 flex 1 并使用 object-fit = 1 (它获取我需要的图像大小调整属性)和 overflow=hidden (我不太明白它在做什么,但如果我把它排除在外,img 容器会展开2 倍)。
我没有在 jsfiddle 中的 grid__item 项上明确设置 min-width,但我预计不会有任何区别。
有没有一种简单的方法可以在 CSS 中获得我想要的东西?如有重复请见谅。
【问题讨论】: