Centering absolutely positioned element in CSS Gri

2019-08-08 19:13发布

问题:

On Mozilla this pen works. But when I switch to Chrome it breaks.

It's just me or something is wrong with browsers?

.container {
  height: 500px;
  width: 500px;
  background-color: beige;
  display: grid;
  grid-template-rows: 1fr;
  grid-template-columns: 1fr;
}

.container h2 {
  position: absolute;
  justify-self: center;
  align-self: center;
  grid-row: 1;
  grid-column: 1;
}
<div class="container">
  <h2>TEXT</h2>
</div>

codepen LINK

回答1:

It appears that Chrome has deviated from spec guidance on this issue.

The justify-self and align-self properties should work on an absolutely-positioned child element of a grid container.

9.2. With a Grid Container as Parent

An absolutely-positioned child of a grid container is out-of-flow and not a grid item, and so does not affect the placement of other items or the sizing of the grid.

The static position of an absolutely-positioned child of a grid container is determined as if it were the sole grid item in a grid area whose edges coincide with the padding edges of the grid container.

Note that this position is affected by the values of justify-self and align-self on the child.

So, Firefox seems to have this right.

For other centering options see this post:

  • Centering in CSS Grid


回答2:

position: absolute is throwing off Chrome (tested on v62). It seems Firefox interprets the justify-self and align-self attributes as overrides, while Chrome doesn't, hence the different behavior.

Just remove position: absolute and it works.

https://codepen.io/anon/pen/vJRmNR