【问题标题】:Can I create a Masonry layout using Tailwind CSS utility classes? [duplicate]我可以使用 Tailwind CSS 实用程序类创建砌体布局吗? [复制]
【发布时间】:2021-06-29 00:31:10
【问题描述】:

我正在尝试使用 Tailwind CSS 实用程序类(不是纯 CSS)创建 Masonry 布局,但通过所有官方 Tailwind 文档,似乎框架已经提供了一种方法。

Bootstrap 5 允许您这样做,但需要 JavaScript 库。 https://getbootstrap.com/docs/5.0/examples/masonry/

有没有办法使用 Tailwind CSS 而不使用任何额外的 JavaScript 库?

【问题讨论】:

  • 这篇文章是discussed on Meta
  • 您在下面使用 Tailwind 提供的解决方案似乎对 Tailwind 来说并不新颖/独特,而是使用带有自定义 mixin 的通用 CSS 类,这样您就可以说您正在“使用 Tailwind” .我投票决定再次关闭此作为适当问题的副本。如果您认为其他人可能会发现自定义 Tailwind mixin 有用,请随意在规范目标上提供该解决方案。

标签: html css tailwind-css


【解决方案1】:

我使用 TailwindCSS @layer 和 @variants 指令解决了这个问题。
以下代码在 LG 断点上提供了 3 列网格布局,在 MD 断点上变为 2 列,而在移动设备上只有 1 列。

将此添加到您的 SCSS 文件中:

@layer utilities {
    @variants responsive {
        .masonry-3-col {
            column-count: 3;
            column-gap: 1em;
        }
        .masonry-2-col {
            column-count: 2;
            column-gap: 1em;
        }
        .break-inside {
            break-inside: avoid;
        }
    }
}

还有 HTML:

<div class="md:masonry-2-col lg:masonry-3-col box-border mx-auto before:box-inherit after:box-inherit">
  <div class="break-inside p-8 my-6 bg-gray-100 rounded-lg">
    <p>Really long content</p>
  </div>
  <div class="break-inside p-8 my-6 bg-gray-100 rounded-lg">
    <p>Really long content</p>
  </div>
  <div class="break-inside p-8 my-6 bg-gray-100 rounded-lg">
    <p>Really long content</p>
  </div>
  <div class="break-inside p-8 my-6 bg-gray-100 rounded-lg">
    <p>Really long content</p>
  </div>
  <div class="break-inside p-8 my-6 bg-gray-100 rounded-lg">
    <p>Really long content</p>
  </div>
</div>

我的解决方案是我在这篇不错的文章中找到的答案的演变,该文章没有在页面调整大小上提供开关 1-2-3 列。
https://blog.marclucraft.co.uk/masonry-layout-with-tailwindcss

【讨论】:

  • 这样的问题是,如果您尝试按日期顺序显示项目,您将在左列中获得所有最新项目,然后在第 2 列中的页面顶部获得较旧的项目, 3. 这是个好主意,但在现实中行不通。
【解决方案2】:

现在看来只需要这样做就可以进行适当的砌体布局,而无需添加任何库:

.container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: masonry;
}

因此,您可以使用少量网格值扩展 Tailwind 的功能。

这篇文章的更多细节:https://www.smashingmagazine.com/native-css-masonry-layout-css-grid/

可以在此处找到当前状态:https://drafts.csswg.org/css-grid-3/

Wes Bos also do have a free CSS grid course 在其上,他仅使用 CSS 网格(没有 masonry 道具)模拟了这种行为。


编辑:砌体并不容易,因为它取决于您要寻找的确切内容,但即使 columns 在某些情况下也很有用!

【讨论】:

  • 感谢您的回答!非常有趣的方法。我还发现了另一种使用 css 的策略,它有点不同,我现在正在研究它。稍后我会在这里分享
  • 很高兴看到这个是什么! :3 顺便说一句,我已经编辑了我的答案以合并 columns,这是另一个可能有用的整洁 CSS 属性。
  • "grid-template-rows: masonry" 不是有效属性。它不起作用
  • @MatthewC 更多详情on MDN.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2021-12-22
相关资源
最近更新 更多