【问题标题】:unable to centre child element in css grid无法在 CSS 网格中居中子元素
【发布时间】:2018-07-04 03:01:40
【问题描述】:

我的Angular应用的css结构是

-顶级应用程序有一个 3 行的 CSS 网格 -nav 组件占据第一行 -content-component 占据第二行 -footer 占据第三行

.css-grid-container{
  height:100vh; /*height of the container is same ahs height of the view port.*/
  display: grid;
  grid-gap:20px;
  grid-template-columns: 1fr;  /* 1 columns*/
  grid-template-rows: auto 15fr 1fr; /* 3 rows. Auto takes height of navigation, remaining is divided into 2 rows, middle row is 15 times larger than the 3rd row.*/
}

app-nav-component {
  grid-column: 1 / -1;
  grid-row: 1 / 2;
}

app-content-component{
  grid-column: 1 / -1;
  grid-row: 2 / 3;
}

app-footer-component{
  grid-column: 1 / -1;
  grid-row: 3 / -1;
}

HTML 是

<div class="body__div--background"  >
    <app-nav-component></app-nav-component>
    <app-content-component></app-content-component>
    <app-footer-component></app-footer-component>
  </div>

中间的内容组件是我要放置新组件的位置。 ContentComponenthtml代码是

<div id="content-div">
  <router-outlet></router-outlet>
</div>

css是

#content-div{
  height:100%;
  display:grid; 
  grid-template-columns: 1fr;  /* 1 columns*/
  grid-template-rows: 1fr; /*1 row*/
}

上述组件被假设为其他组件的容器(导航和页脚始终保持不变)。现在我有了另一个组件,HomeComponent。我希望将HomeComponent 放置在中心的ContentComponent 内。我为此写的htmlcss

   <div class="homepage-component-css-grid-container" id="home-page-component">
  <app-practice-component></app-practice-component>
  <app-create-component></app-create-component>
</div>

css是

.homepage-component-css-grid-container{
  display: grid;
  grid-gap:20px;
  grid-template-columns: 1fr 1fr;  /* 2 columns*/
}

#home-page-component{
  align-self:center; /*center of the content component*/
  grid-column: 1 / -1;
  grid-row: 1 / -1;
}


app-practice-component{
  grid-column: 1 / 2;
  align-self: center;
  justify-self:end;

}

app-create-component{
  grid-column: 2 / 3;
  align-self: center;
  justify-self:start;

}

我的问题是HomeComponent 没有显示在中心。见下图。有趣的是,我注意到如果通过浏览器的调试工具,我在reboot.scss 中手动添加align-self:center,那么HomeComponent 会移动到中心。但是reboot.scss 不是我的文件。我如何将HomeComponentcenter 对齐

图 1 - 我正在观察的行为。 HomeComponent不在中心

Pic2 - 如果我在 reboot.scss 中添加 align-self:center

【问题讨论】:

  • 你想要的居中并不完全清楚(至少对我来说)。你有没有经历过这些选择? stackoverflow.com/q/45536537/3597276
  • 非常感谢。我会读一读。如果您看到上面的两张图片,在第一张(这是应用程序现在的样子)中,2 个白框(大的,不是带有黑色边框的)更靠近底部(页脚)。我想要的是第二张图片,即页面中心附近的两个框。在浏览器的调试面板中,我可以通过在reboot.scss 中手动添加align-items:center 来将框移动到中心。但我无法center 代码中的框。在#content-div 中添加align-items:center 或在#home-page-component 中添加align-self:center 似乎没有任何影响。
  • 你在#content-div中尝试过align-content: center吗?
  • 不幸的是没有工作
  • 我能够确定这个问题。这与我们一直在讨论的内容不同,但您提供的链接非常有帮助

标签: angular css css-grid


【解决方案1】:

我通过在 #content-div 中再添加 1 行解决了这个问题

问题(在图片中也可见)是&lt;router-outlet&gt;ContentComponent 的 html 有 &lt;router-outlet&gt;,Angular 将在其中放置其他组件(例如 HomePageComponent)。 Angular 这样做的方式是保留 &lt;router-outlet&gt; 标签并在 html 中在其下方添加特定于组件的标签。因此网格需要为组件和组件的标签提供空间

新代码

#content-div{
  height:100%;
  display:grid; 
  grid-template-columns: 1fr;  
  grid-template-rows: auto 99%; 
}

我还在homepage-component-css-grid-container 中添加了height:100% 规则,否则网格的高度只能达到其子项的高度

.homepage-component-css-grid-container{
  display: grid;
  grid-gap:20px;
  grid-template-columns: 1fr 1fr;  /* 2 columns*/
  height:100%;
}

我不再需要home-page-component,因为app-practice-componentapp-create-component 中的align-selfjustify-self 规则进行了正确对齐

【讨论】:

  • 干得好!在适用时不要忘记接受您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2018-07-22
  • 2014-08-09
  • 1970-01-01
相关资源
最近更新 更多