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

具有响应方块的网格布局

田易安
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

  • 是否寻求创建适合多种屏幕的反应迅速的网站?了解如何在 Dreamweaver 中使用流体网格设计适合移动设备和桌面设备的网站。 网站的布局必须对显示该网站的设备尺寸作出响应与调整(响应性设计)。流体网格布局为对应显示该网站的设备而创建不同布局提供了可视化方式。 例如,将在桌面计算机、平板电脑和移动电话上查看您的网站。可使用流体网格布局为其中每种设备指定布局。根据在桌面计算机、平板电脑还是移动电话上