![](/img/trans.png)
[英]Why does Blueprint-Css set the maximum grid width for a layout as 950px?
[英]How to set the maximum width of a column in CSS Grid Layout?
我想要实现的目标:
使用CSS Grid Layout ,让页面有一个右栏,其大小来自其内容,但最多只有 window 宽度的 20%。
我认为它会如何工作:
div { border-style: solid; } #container { width: 300px; height: 300px; display: grid; grid-template-columns: 1fr minmax(auto, 20%); }
<div id="container"> <div> some content </div> <div> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus eu leo ac ultrices. Vivamus ornare, orci sed pretium sollicitudin </div> </div>
看起来不错,但是当我删除第二个div
的内容时,左列不会折叠:
div { border-style: solid; } #container { width: 300px; height: 300px; display: grid; grid-template-columns: 1fr minmax(auto, 20%); }
<div id="container"> <div> some content </div> <div></div> </div>
我的问题:
我的印象是,因为minmax()
(...) 定义大于或等于最小值且小于或等于最大值的大小范围。
这意味着在我的情况下,宽度从auto
(当div
为空时 = 0
)设置为20%
。 然而,它保持在20%。 为什么会这样?
“fit-content 函数接受一个参数,即最大值。根据其内容,具有此属性集的网格列/行仍将占用尽可能少的空间,但不会超过最大值。”
请参阅本文:成为 CSS 网格忍者!
您可以在仍然使用基于百分比的最大值的同时解决您的问题:
div { outline: 1px dotted gray; } .container { width: 300px; height: 300px; display: grid; grid-template-columns: 1fr fit-content(20%); } .container div { overflow: hidden; /* this needs to be set so that width respects fit-content */ }
<div class="container"> <div> some content </div> <div> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus eu leo ac ultrices. Vivamus ornare, orci sed pretium sollicitudin </div> </div> <div class="container"> <div> some content </div> <div></div> </div>
你误解了minmax
函数。 它首先尝试应用最大值,如果不可能,则应用最小值。
因此,要修复您的布局,您只需要计算容器宽度的20%
,使用网格项的max-width
属性应用它,并在第二列的grid-template-columns
属性定义中使用auto
。 演示:
div { outline: 1px dotted gray; } .container { width: 300px; height: 300px; display: grid; grid-template-columns: 1fr auto; } .container > :nth-child(2) { max-width: 60px; /* 20% x 300px */ }
<div class="container"> <div> some content </div> <div> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus eu leo ac ultrices. Vivamus ornare, orci sed pretium sollicitudin </div> </div> <div class="container"> <div> some content </div> <div></div> </div>
更新:更灵活的解决方案是使用此答案中的fit-content
功能。
您可能需要在容器本身上设置max-width
并将其列设置为auto
。
div, aside { border-style: solid; } #container { width: 300px; height: 300px; display: grid; grid-template-columns: 1fr auto; } aside { max-width: 60px; /* 60px is 20% of 300px*/ /* max-width:20%; 20% of window's */ font-size: 0; transition: 0.25s; } #container:hover aside { font-size: 1em; }
<div id="container"> <div> Hover it to see aside grow till 20% average width </div> <aside>lets give a try to resize it from content</aside> </div>
使用 clamp()
grid-template-columns: clamp(350px, 40%, 500px) auto;
其中 clamp 采用三个参数(最小值、首选值、最大值)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.