如何在无额外容器和水平间隙的情况下居中CSS Grid指定行元素?
用CSS Grid实现目标布局的问题
我想通过CSS Grid实现如下布局:顶部和底部是通栏的固定高度栏,中间行包含固定宽度的侧边栏和自适应宽度的内容栏,且中间的两栏整体在视口中水平居中。
当前我的代码实现中,中间行是填充整个视口宽度的,代码如下:
html, body { height: 100%; } .TwoColumnsLayout { display: grid; grid-template-areas: "UPPER_FIXED_CONTENT UPPER_FIXED_CONTENT" "SIDEBAR SPECIFIC_CONTENT" "BOTTOM_FIXED_CONTENT BOTTOM_FIXED_CONTENT"; grid-template-columns: 100px 1fr; grid-template-rows: auto 1fr auto; height: 100%; } .TwoColumnsLayout-UpperFixedContent { height: 30px; grid-area: UPPER_FIXED_CONTENT; background-color: lightpink; } .TwoColumnsLayout-Sidebar { overflow-y: auto; grid-area: SIDEBAR; background-color: gold; width: 100px; } .TwoColumnsLayout-SpecificContent { overflow-y: auto; grid-area: SPECIFIC_CONTENT; background-color: aquamarine; } .TwoColumnsLayout-BottomFixedContent { height: 30px; grid-area: BOTTOM_FIXED_CONTENT; background: deepskyblue; }
<div class="TwoColumnsLayout"> <div class="TwoColumnsLayout-UpperFixedContent"></div> <div class="TwoColumnsLayout-Sidebar"></div> <main class="TwoColumnsLayout-SpecificContent"></main> <div class="TwoColumnsLayout-BottomFixedContent"></div> </div>
这种情况下,给网格容器添加justify-content: center;没有任何效果。我尝试对网格容器应用justify-items: center;,同时给顶部和底部栏添加justify-self: stretch;,得到的效果也不符合预期,对应代码如下:
html, body { height: 100%; } .TwoColumnsLayout { display: grid; grid-template-areas: "UPPER_FIXED_CONTENT UPPER_FIXED_CONTENT" "SIDEBAR SPECIFIC_CONTENT" "BOTTOM_FIXED_CONTENT BOTTOM_FIXED_CONTENT"; grid-template-columns: 100px 1fr; grid-template-rows: auto 1fr auto; justify-items: center; height: 100%; } .TwoColumnsLayout-UpperFixedContent { height: 30px; grid-area: UPPER_FIXED_CONTENT; background-color: lightpink; justify-self: stretch; } .TwoColumnsLayout-Sidebar { overflow-y: auto; grid-area: SIDEBAR; background-color: gold; width: 100px; } .TwoColumnsLayout-SpecificContent { overflow-y: auto; grid-area: SPECIFIC_CONTENT; background-color: aquamarine; } .TwoColumnsLayout-BottomFixedContent { height: 30px; grid-area: BOTTOM_FIXED_CONTENT; background: deepskyblue; justify-self: stretch; }
<div class="TwoColumnsLayout"> <div class="TwoColumnsLayout-UpperFixedContent"></div> <div class="TwoColumnsLayout-Sidebar"></div> <main class="TwoColumnsLayout-SpecificContent"></main> <div class="TwoColumnsLayout-BottomFixedContent"></div> </div>
我本以为用CSS Grid实现这个布局会很简单……有没有无需添加额外HTML元素的解决方案?
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

