如何使 CSS 网格容器保持响应式方形大小?

2024-02-15

I want grid container to maintain square shape. So when screen is resized, it will get bigger or smaller, but it's height will be always same as it's width. I want to place 3 images inside, with top one taking up two columns, and bottom ones are square taking one column each. enter image description here

HTML:

<div class='container'>
    <div class='grid'>
        <img></img>
        <img></img>
        <img></img>
    </div>
</div>

SASS:

.container: {
  background: #fff;
  max-width: 600px;
  padding: 10px;
}

.grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 10px;

  & > img:first-child {
    grid-column: 1 / span 2;
    grid-row: 1;
  }

  img {
    width: 100%;
    background-color: #000;
    object-fit: cover;
  }
}

我尝试向网格添加伪元素以保持平方比,却发现它不适用于网格。我尝试给予img height: 100%但它弄得太长了。

我发现了一些关于如何使图像保持方形的问题,但没有一个是关于如何保持网格容器方形并防止被儿童拉伸的。


我会做以下事情:

  1. 使网格宽度和高度响应式调整大小 - 用于此用途这个方法 https://spin.atomicobject.com/2015/07/14/css-responsive-square/ (.container and &::after伪元素)
  2. 使网格本身遵循容器的正方形宽度和高度(.grid-wrapper)
  3. 使用图像容器,以便容器在网格内调整大小(第一行 = 2 列宽,第二行 = 2x1 列)(.grid-box)
  4. 在 div 中使用绝对定位图像,因此它们实际上覆盖了 div

HTML 代码:

<div class='container'>
  <div class='grid-wrapper'>
    <div class='grid'>
      <div class="grid-box">
        <img src="https://picsum.photos/200/300"></img>
      </div>
      <div class="grid-box">
        <img src="https://picsum.photos/200/300"></img>
      </div>
      <div class="grid-box">
        <img src="https://picsum.photos/200/300"></img>
      </div>
    </div>
  </div>
</div>

SAS 代码:

$-gutter: 10px;
$-max-width: 600px;

* {
  box-sizing: border-box;
}

.container {
  position: relative;
  max-width: $-max-width;
  width: 100%;
  background: #ffff00;

  &::after {
    content: "";
    display: block;
    padding-bottom: 100%;
  }
}

.grid-wrapper {
  position: absolute;
  width: 100%;
  height: 100%;
  padding: $-gutter;
}

.grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: $-gutter;
  width: 100%;
  height: 100%;

  &-box {
    position: relative;
    width: 100%;
    height: 100%;

    &:first-child {
      grid-column: 1 / span 2;
    }
  }

  img {
    position: absolute;
    width: 100%;
    height: 100%;
    background-color: #000000;
    object-fit: cover;
  }
}

这是一个小提琴演示:https://jsfiddle.net/robertp/uLfj1swm/ https://jsfiddle.net/robertp/uLfj1swm/

And a screenshot of how this solution renders: enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 CSS 网格容器保持响应式方形大小? 的相关文章

随机推荐

  • facebook-ios-sdk requestWithGraphPath:@"我/朋友"

    我找不到关于这个 sdk 的任何基本文档 我只是愚蠢还是找错地方了 我不知道这个方法是什么 void request FBRequest request didLoad id result 实际上在这样的请求的情况下返回 requestWi
  • Bootstrap tabbable 和 popover 之间的冲突

    我正在尝试在同一页面中使用 Twitter Bootstrap tabbable 和 Bootstrap popovers 我在解决弹出窗口无法出现在选项卡限制之外的问题时遇到困难 问题是当弹出窗口出现在边框旁边时 它是半隐藏的 我不是 J
  • 需要授予哪些权限才能访问 sys.dba_systems

    我正在开发适用于 Oracle 的应用程序 对于某种逻辑 我需要从给定的数据库用户获取具有指定模式的表列表 就我而言 我有一个已授予给定模式访问权限的用户 因此 当我的代码使用给定的凭据创建连接并尝试从以下查询中获取表时 它返回表列表 SE
  • Laravel 5 委托一条路由 - 根据角色加载不同的控制器

    所以我刚刚开始学习 Laravel 并且我已经实现了 Entrust Role Permission 包 效果非常好 现在我的问题是 我想要一个 仪表板 页面 如下所示 example com dashboard 问题是 我不确定如何设置
  • 如何在android中使线性布局部分透明?

    我有一个RelativeLayout含 2LinearLayouts其中一个部分覆盖另一个 我想做的一部分LinearLayout顶部透明 所以我也可以看到第二个LinearLayout 知道我有 2 张图像作为 2 张图像的背景Linea
  • bash 脚本根据文件名中的日期查找旧文件

    我正在开发一个 bash 脚本 该脚本需要根据一个变量搜索单个目录中 旧 的文件 该变量指定在超过阈值之前需要经过多少天 并且文件被标记为要执行操作 可以是任何内容 从移动到存档到删除 等等 问题是文件的修改时间与确定文件需要多久才能采取行
  • 将 gitlab 包注册表中的 python 包和其他外部索引直接包含到 setup.py 依赖项中

    The gitlab包注册表 https docs gitlab com ee user packages 可以用来publish https docs gitlab com ee user packages pypi repository
  • 如何将小程序作为应用程序运行?

    我有一个 Applet 类 我想让它作为应用程序运行 所以我编写了以下代码 public static void main String args JFrame app new JFrame Applet Container app set
  • 在 jboss 中加载 HTML 图像

    我有 HTML 页面 放在临时文件夹 WEB INF 目录之外 中 我在 HTML 页面中使用了一些图像 我也将这些图像放入临时文件夹中 然后创建了我的 war 文件 当我在 localhost 中运行该程序时 图像不会加载到 HTML 页
  • 如何在 JavaScript 中将所有对象属性设置为 null?

    我正在使用 Vue 突然使用一些计算的 cssvuetify https vuetifyjs com不管用 我声明对象的方式是 personal info 在我的模板中 我可以这样做personal info name以及每个文本输入 v
  • 在外部网络上托管 Expo 应用程序?

    我正在编写一个应用程序create react native app CRNA 为一家公司 最终 它可能会投入生产 但出于研究原因 我需要一个可以轻松部署到同事手机 Android 和 iOS 的工作原型 由于知识产权的原因 我不得在任何外
  • C#图表控件删除条形图中条形之间的空格

    I have a bar chart made with the c net chart control that looks like the following 正如您所看到的 图表上每对红色和蓝色条之间都有一个空格 有没有办法删除这些
  • Pandas 时间戳以 30 秒为单位不一致

    我试图将 pandas DatetimeIndex 或 Timestamp 舍入到最接近的分钟 但我遇到了 30 秒时间戳的问题 有些向上舍入 有些向下舍入 这似乎是交替的 有什么建议可以解决这个问题 以便 30 总是四舍五入吗 gt gt
  • 比较两个 Doctrine_Record 对象

    我如何比较两个Doctrine Record对象看看它们是否 相等 在我正在考虑的域登录中 如果两个对象具有相同的属性值 则它们相等 除了id和created at and updated at字段 a laTimestampable 我想
  • Django 迁移卡住了

    我有一个新字段要添加到我的数据库中 所以我说 python manage py makemigrations 这正确地创建了kernel migrations 0003 auto 20150726 1911 py 我检查了内容 一切看起来都
  • PostgreSQL 9.3:函数不唯一错误

    我创建了以下具有 11 个参数的函数 如下所示 函数调用 SELECT FROM function TableDetails NULL Type Table 2671ffdb 28a4 4ce4 a226 e5a21d66509e D096
  • 在android中录制原始视频格式

    我对安卓完全陌生 是否可以在 android 中从相机录制原始视频格式 基本上我有一个与 ICS 一起运行的 pandaboard 我连接了 USB 摄像头 iball 现在我想从 USB 摄像头录制原始视频格式 该相机支持原始视频格式我已
  • 是否有必要保护 JAX-RS 请求免受 CSRF 影响?

    是否有必要保护 JAX RS 请求免受攻击CSRF https en wikipedia org wiki Cross site request forgery By 定义 https en wikipedia org wiki Repre
  • Azure Function+ARM:将应用程序设置与当前设置合并

    我的部署分为两个管道 部署基础设施 运行ARM模板 部署和配置应用程序 上传应用程序 运行脚本 我的 ARM 模板包含一个 AppSettings 数组 如下所示 schema https schema management azure c
  • 如何使 CSS 网格容器保持响应式方形大小?

    I want grid container to maintain square shape So when screen is resized it will get bigger or smaller but it s height w