CSS Grid嵌套:为何align-self/justify-self在nestedheader容器中生效?
嘿,我来帮你理清楚这里的逻辑哈!你提到想把.header盒子放在左侧,但觉得它作为网格元素本该在那,反而align-self/justify-self在.nestedheader容器里生效了,咱们一步步拆解:
首先得明确两个容器的层级关系:
.header是外层网格的子元素,它的位置由外层网格的布局规则(比如grid-template-areas、grid-template-columns/rows)决定。如果你觉得它没贴左侧,大概率是外层网格给header这个网格区域分配了多余的空间——网格子项默认是justify-self: stretch,也就是会填满所在单元格的宽度,所以哪怕内容没那么宽,盒子也会撑满单元格,看起来就不像“左对齐”。这时候给.header加个justify-self: start,就能让它在自己的网格单元格里贴左侧了。
然后说为什么align-self/justify-self会在.nestedheader上生效:.nestedheader本身是个网格容器没错,但它同时也是.header的子元素呀!如果你的.header是个flex容器(设了display: flex)或者网格容器(设了display: grid),那.nestedheader就成了.header的flex子项/网格子项——这时候align-self(控制交叉轴对齐)和justify-self(控制单元格内的行轴对齐)这些属性,就是作用在子项上的,自然会生效。
举个简单的场景:如果.header设了display: flex; justify-content: center;,那.nestedheader默认会在.header里居中,这时候你给.nestedheader加justify-self: start(如果.header是网格的话)或者直接加margin-right: auto(如果是flex的话),就能让它贴左侧了。
再核对下你的代码,.nestedheader的grid-template-areas定义了headername和headercopy的布局,这部分是控制它内部子元素的网格位置,和外层的.header位置是完全分开的哦。
内容的提问来源于stack exchange,提问作者wezyourboat

