css - CSS Grid:在特定 x 位置开始列
问题描述
我正在尝试实现具有三列的 CSS 网格布局:A 列和 B 列始终等于某个宽度,以使 C 列从同一位置开始,除非 A 和/或 B 中的内容变得太宽。
或者用另一种方式来描述它:如果 A 变大,则从 B 中取出所需的额外宽度,而不是将 B 和 C 都向右移动。
或者,可以将 A 和 B 放在同一列中但内联显示吗?
我知道这可以通过将 A 和 B 包装在另一个容器元素中来实现,但是可以仅使用 CSS 网格来完成吗?
|<--A-->|<---B--->|<-------C------->|
where:
A + B + C = 100%
A + B = min(30em)
A = min(18em)
解决方案
您可以考虑在 A 和 B 列上放置一个额外的隐藏元素并min-width
在其上定义 a 来执行此操作。这有点棘手,但想法是两列的宽度都将服从 A 和 B 以及隐藏元素的约束。
这里有一个例子来说明这个技巧。我被替换30em
为200px
18em
50px
.container {
display: grid;
grid-template-columns: auto auto 1fr;
grid-template-rows:1fr 0;
height: 30px;
color:#fff;
margin:5px;
}
.A {
background: red;
min-width:50px;
}
.B {
background:blue;
}
.C {
background:green;
}
.container::after {
content: "";
grid-column: span 2;
min-width: 200px;
}
<div class="container">
<div class="A"></div>
<div class="B"></div>
<div class="C">text here</div>
</div>
<div class="container">
<div class="A">some text</div>
<div class="B"></div>
<div class="C">text here</div>
</div>
<div class="container">
<div class="A"></div>
<div class="B">some text</div>
<div class="C">text here</div>
</div>
<div class="container">
<div class="A">some text</div>
<div class="B">some text</div>
<div class="C">text here</div>
</div>
<div class="container">
<div class="A"></div>
<div class="B">more and more and more text here</div>
<div class="C">text here</div>
</div>
<div class="container">
<div class="A">more and more text here</div>
<div class="B">more and more text here</div>
<div class="C">text here</div>
</div>
唯一的缺点或可能是一个简单的观察是 A 和 B 的宽度将取决于两者的内容,并且在 A 上应用的 min-width 将使其在两者都为空的情况下增长得更多。
推荐阅读
- c++ - Emscripten:找不到模块:无法解析“env”
- javascript - Vue(Gridsome)应用程序中的“无法发布 /”-Netlify 表单阻止重定向
- spring - 尝试检索 OAuth 2.0 访问令牌时出错 响应:406 Not Acceptable
- c++ - 通过用最后一个元素替换它然后删除它来从向量中删除一个元素是否会使过程更快?
- c++ - 尝试在 C++ 中打印字符串时出现“运行失败(退出值 -1,073,741,511,总时间:37 毫秒)”
- php - 在 WooCommerce 中选择“本地取货”时,将结帐字段设为可选
- vb.net - 十六进制到整数转换引发 system.overflow 异常
- python - 仅获取 HTML 标记中的顶级文本
- python - 如何使用 matplotlib 在 python 中叠加绘图
- php - Laravel - 如何将文件从本地存储移动到另一个存储?