【发布时间】:2018-05-04 15:30:34
【问题描述】:
我想创建一个带有灵活列的网页布局,可以限制为某些最大宽度。 例如,侧边栏菜单占用 30% 的可用水平空间,但宽度不应超过 200 像素。
使用 CSS flexbox,我会采用这样的解决方案:
.flexbox-layout {
display: flex;
}
.flexbox-sidebar {
flex: 1 1 30%;
max-width: 200px;
background-color: lightblue;
}
.flexbox-content {
flex: 1 1 70%;
background-color: lightgreen;
}
<p>Layout based on CSS flexbox:</p>
<div class="flexbox-layout">
<div class="flexbox-sidebar">
<ol>
<li>Menu item 1</li>
<li>Menu item 2</li>
<li>Menu item 3</li>
</ol>
</div>
<div class="flexbox-content">
<p>Content</p>
</div>
</div>
这显然是一个最小的例子——真正的布局会复杂得多,我想利用 CSS 网格功能,如列/行跨越和自动列,结合媒体查询以提高响应能力。 到现在为止,我还没有设法用 CSS grid 实现与上述 flexbox 示例相同的效果:
.grid-layout {
display: grid;
grid-template-columns: 30% 70%; /* Max. width for 1st column? */
grid-template-rows: auto;
}
.grid-sidebar {
background-color: lightblue;
}
.grid-content {
background-color: lightgreen;
}
<p>Layout based on CSS grid:</p>
<div class="grid-layout">
<div class="grid-sidebar">
<ol>
<li>Menu item 1</li>
<li>Menu item 2</li>
<li>Menu item 3</li>
</ol>
</div>
<div class="grid-content">
<p>Content</p>
</div>
</div>
以下现有问题的标题看起来很有希望,但最终解决了其他问题:
Can't use max-width to limit content width in css grid column
How to set the maximum width of a column in CSS Grid Layout?
CSS 网格的 minmax(...) 函数也无济于事,因为它没有考虑相对列宽 - 至少就我而言。
有没有办法用 CSS 网格做到这一点?
【问题讨论】:
-
您可能需要将容器设置为
grid-template-areas: 30% 70%。然后在网格项本身上设置max-width: 200px。不幸的是,Grid 似乎没有提供更简洁的方法。minmax()函数在这种情况下是无用的,因为 max 在小于 min 时会被忽略,在这种情况下会计算到 min。 -
我也试过这个 - 不幸的是,这并不完全有效,因为网格列本身仍在继续增长并进一步推动以下列及其内容(我的 sn-ps 中的绿色区域)向右。
-
啊,是的。这就说得通了。那么如何将容器中的第一列设置为
auto,并定义项目的最小和最大长度呢? (顺便说一句,我认为容器上的第二列可以是1fr。) -
在这种情况下,to 列的 30:70 比例会出现在哪里?你会为项目的最小宽度提出什么值?