当前位置: 首页 > 知识库问答 >
问题:

具有响应方块的网格布局

田易安
2023-03-14

我想创建一个网格布局与响应方块。

我觉得我应该可以这样做与CSS网格布局,但有麻烦设置高度每个正方形等于宽度。

在每一个方块之间设置一条阴沟也有困难。

我用Flexbox会更好吗?

目前我的HTML看起来像这样,但将是动态的,所以更多的方块可能会被添加。当然,它需要具有响应性,因此理想情况下使用媒体查询将其折叠为一列。

<div class="square-container">

  <div class="square">
    <div class="content">
    </div>
  </div>

  <div class="square">
    <div class="content spread">
    </div>
  </div>

  <div class="square">
    <div class="content column">
    </div>
  </div>

</div>

使用css网格,这是我所得到的

.square-container{
    display: grid;
    grid-template-columns: 30% 30% 30%;
    .square {

    }
}

我能够用flexbox做得更远一些,并且能够使用空隙将正方形与一个很好的阴沟对齐,但是仍然在努力获得与每个正方形的宽度相匹配的高度。

我没有找到任何这样做的例子,无论是flexbox或grid,但任何例子都将是赞赏的。

谢谢

共有1个答案

暨宸
2023-03-14

padding-bottom技巧是最常用的方法。

您可以将它与Flexbox和CSS Grid结合起来,并且由于使用percent作为边距/填充会给Flex/Grid项带来不一致的结果(在较旧的浏览器版本中,请参见下面的编辑注释),因此可以添加一个额外的包装,或者像这里一样,使用pseudo,因此带有percent的元素不是Flex/Grid项。

编辑:注意,有一个更新的规范,现在应该给出一致的结果,当使用在Flex/Grid项目。但是请注意,这个问题仍然发生在旧版本上。

注意,如果要向content元素添加内容,则需要将其定位为绝对位置,以保持正方形的纵横比。

小提琴演示-Flexbox

编辑2:在一个评论中,有人问我如何有一个居中的文本,所以我在下面的片段中添加了这个内容。

null

.square-container {
  display: flex;
  flex-wrap: wrap;
}

.square {
  position: relative;
  flex-basis: calc(33.333% - 10px);
  margin: 5px;
  border: 1px solid;
  box-sizing: border-box;
}

.square::before {
  content: '';
  display: block;
  padding-top: 100%;
}

.square .content {
  position: absolute;
  top: 0; left: 0;
  height: 100%;
  width: 100%;

  display: flex;               /* added for centered text */
  justify-content: center;     /* added for centered text */
  align-items: center;         /* added for centered text */
}
<div class="square-container">

  <div class="square">
    <div class="content">
      <span>Some centered text</span>
    </div>
  </div>

  <div class="square">
    <div class="content spread">
    </div>
  </div>

  <div class="square">
    <div class="content column">
    </div>
  </div>

  <div class="square">
    <div class="content spread">
    </div>
  </div>

  <div class="square">
    <div class="content column">
    </div>
  </div>

</div>
 类似资料:
  • 问题内容: 我想创建一个带有响应正方形的网格布局。 我觉得我应该可以使用CSS Grid布局来做到这一点,但是在将每个正方形的高度设置为等于宽度时遇到麻烦。 在每个正方形之间设置水槽时也遇到麻烦。 使用flexbox会更好吗? 目前,我的HTML看起来像这样,但是它将是动态的,因此可以添加更多的正方形。当然,它需要响应,因此理想情况下将使用媒体查询将其折叠到一列。 使用CSS网格,据我所知 我可以

  • 问题内容: 我在长度为4+的div内有一系列文章,没有任何四舍五入的行标记。我需要将其表示为每行3个文章(列)的表格,大概用display: grid。每篇文章都有一个页眉,一个节和一个页脚。 如何 在每行文章的内部为每个页眉实现相等的高度,为每个部分提供相等的高度以及与文章底部对齐的相等高度的页脚?可能吗 我应该使用display: table吗? PS我需要根据屏幕宽度动态更改每行的文章数。谢

  • 我是JavaFX的新手,我正在尝试制作一个棋盘。首先,我想制作一个基于数组的填充随机颜色的方格网格。我不知道为什么,但是方块没有填满网格的其余部分。我还想使用约束来设置网格的高度和宽度。 左上方只出现一个方块,为什么会这样呢?

  • 媒体查询助手类 Media Query Helper Classes Jquery Mobile给html元素增加了用来模拟浏览器的水平竖直方向以及常用的最?最大宽度css媒介查询class.这些class会在加载,调整大小以及方向变化时更新,使你能够在css中切断这些class,以创建有响应的布局,即使在不支持媒介查询的浏览器中也可以实现 方向类 Orientation Classes 取决于浏

  • 我是一个非常活跃的Dash用户,我已经开始发现我的Dash使用中有很多限制,我意识到关于如何将组件转换为dash的信息/内容绝对有限,有过时和非常简单的例子...我对Javascript或React几乎没有任何了解,我完全不知道如何转换组件。 我试图将响应式网格布局组件从react.js转换为Ploly Dash,但我不知道在这种情况下应该如何处理属性?链接到组件:https://github.c

  • 问题内容: 假设我有一个直方图脚本,可构建960 500 svg图形。如何使它响应,以便调整图形的宽度和高度是动态的? 问题答案: 还有另一种方法,不需要重新绘制图形,它涉及修改元素上的viewBox和preserveAspectRatio属性: 15年11月24日更新 :大多数现代浏览器都可以从推断出SVG元素的长宽比,因此您可能不需要保持图表的大小为最新。如果需要支持较旧的浏览器,可以在窗口调