繁体   English   中英

CSS-网格行居中

[英]CSS - Grid row centering

我得到了一个由内联块元素制成的网格,这样它们可以溢出到其他行。

问题是,如果该行不完整,则该行中的项目也会居中并且不与左侧对齐,就像它们只是溢出一样。

这个小提琴可以看出问题所在。

在纯CSS中有什么方法可以做到这一点? 使容器居中,但其中的元素仍然在左侧?

我已经尝试使用margin: 0 auto; 只能使容器居中,但容器必须具有固定的宽度,但是在这种情况下,容器会尽可能扩展(填充外部容器)。

编辑:我能想到的唯一方法是使用Javascript获取容器的宽度,然后将宽度除以元素的宽度(因为它们具有相同的宽度),将宽度应用于容器并加上边距: 0自动; 方法。

在一般情况下,这是不可行的( 请参阅本文 ),因为CSS无法确定元素何时包装,因此无法重新计算所需的空白空间。

类似于该帖子中的解决方案,您可以使用媒体查询来获得此结果。 我已经针对您的情况写了一个更具体的版本:

 .grid { margin: 0 auto; width: 990px; font-size: 0; } .item { display: inline-block; margin: 5px; width: 100px; height: 100px; background: red; } @media screen and (max-width: 230px) { .grid { width: 110px; } } @media screen and (min-width: 231px) and (max-width: 340px) { .grid { width: 220px; } } @media screen and (min-width: 341px) and (max-width: 450px) { .grid { width: 330px; } } @media screen and (min-width: 451px) and (max-width: 560px) { .grid { width: 440px; } } @media screen and (min-width: 561px) and (max-width: 670px) { .grid { width: 550px; } } @media screen and (min-width: 671px) and (max-width: 780px) { .grid { width: 660px; } } @media screen and (min-width: 781px) and (max-width: 890px) { .grid { width: 770px; } } @media screen and (min-width: 891px) and (max-width: 1000px) { .grid { width: 880px; } } @media screen and (min-width: 1001px) and (max-width: 1110px) { .grid { width: 990px; } } 
 <div class="grid"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> 

但是,不建议编写这么多媒体查询。 我实际上是使用Sass生成它们的(请参阅我的CodePen ):

$width: 100px;
$margin: 5px;
$extra-padding: 10px;
$column-width: $width + 2 * $margin;
$num-blocks: 9;

@function screen-size($n) {
  @return $n * $column-width + $extra-padding;
}

.grid {
  margin: 0 auto;
  width: $num-blocks * $column-width;
  font-size: 0;
}

.item {
  display: inline-block;
  margin: $margin;
  width: $width;
  height: 100px;
  background: red;
}

@media screen and (max-width: screen-size(2)) {
  .grid {
    width: $column-width;
  }
}

@for $i from 2 through $num-blocks {
  @media screen and (min-width: screen-size($i) + 1px) and (max-width: screen-size($i + 1)) {
    .grid {
      width: $i * $column-width;
    }
  }
}

上面的解决方案有其局限性,它只能与固定数量的块一起使用。 如果这是一个问题,您将必须使用JavaScript库(例如Desandro Masonry)或自行滚动。

似乎不可能仅使用CSS方法进行此操作(除非使用Flexbox)。

这意味着我将使用“使用Javascript设置宽度并使用margin:0 auto”方法。

最好的方法是使用@Nelson Yeung提出的仅CSS方法,但是我将在多个页面上使用它,其中容器宽度将是不同的。

同样有趣的是,面向前端开发人员<>设计师的平台Zeplin也正在使用我将要使用的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM