搜索
首页web前端css教程带有Flexbox的自适应照片布局

使用Flexbox实现自适应照片布局,轻量级且高效!本文介绍一种轻量级方法,利用Flexbox创建水平瀑布流式照片布局,无需JavaScript,即可实现任意尺寸照片的无缝排列。

Adaptive Photo Layout with Flexbox

这种方案不仅轻量级,而且非常简单。我们只需要一个无序图像列表和17行CSS代码,核心在于Flexbox和object-fit属性。

为什么选择这种方法?

我有两个爱好:用照片记录生活,以及探索CSS属性(新旧皆可)的有趣组合方式。

几周前,我参加了XOXO活动,拍摄了大量照片,最终筛选出39张精美的照片。为了更好地管理自己的内容,过去几年我一直想创建一个简单的照片博客,但始终无法实现我理想中的布局:一个简单的瀑布流布局,照片在保持其纵横比的同时填充行(想想iOS上的照片应用、Google相册、Flickr……)。

我做了一些研究,看看是否有任何轻量级的、非JavaScript的选项,但找不到任何符合我需求的方案。在等待航班延误期间,我开始尝试一些代码,并限制自己尽可能保持代码简洁(因为这正是我认为的乐趣所在)。

基本HTML结构

由于我基本上是创建一个图像列表,所以我选择了一个无序列表:


    <li>Adaptive Photo Layout with Flexbox <li>Adaptive Photo Layout with Flexbox <!-- ... more images ... -->

Flexbox的妙用

然后是一系列灵光乍现的时刻:

    <li>Flexbox非常适合通过根据单元格内容确定单元格宽度来填充行。 <li>这意味着所有图像(横向或纵向)都需要具有相同的高度。 <li>我可以使用object-fit: cover;来确保图像填充单元格。

理论上,这听起来像是一个可靠的方案,它让我得到了一个我90%满意的结果。

ul {
  display: flex;
  flex-wrap: wrap;
}

li {
  height: 40vh;
  flex-grow: 1;
}

img {
  max-height: 100%;
  min-width: 100%;
  object-fit: cover;
  vertical-align: bottom;
}

注意: 40vh 对于桌面浏览器来说似乎是最佳的初始方法,它以合理的大小显示两行完整的照片,并暗示下面还有更多照片。这也允许每行显示更多照片,从而显著改善纵横比。

处理最后一行伸展问题

我遇到的唯一问题是Flexbox 非常想填充所有行,它对最后一行照片的纵横比做了一些奇怪的事情。这可能是我对这个布局最不喜欢的一点,但我不得不在列表的末尾添加一个空的<li>元素。

<!-- ... more images ... -->
<li>

结合以下CSS代码:

li:last-child {
  flex-grow: 10;
}

注意: 这里使用“10”并没有什么科学依据。在我的所有测试中,这都提供了最佳结果。

演示(此处应插入演示链接或代码片段)

视口优化

在不同的视口方向下工作时,需要考虑一些因素。

竖屏

如果你的视口高度大于宽度,这种方法会限制每行的照片数量,从而影响其纵横比。要解决这个问题,你可以使用简单的媒体查询使照片行变矮:

@media (max-aspect-ratio: 1/1) {
  li {
    height: 30vh;
  }
}

较短的屏幕

为了适应横向的小型设备,增加照片的高度有助于尽可能大显示照片:

@media (max-height: 480px) {
  li {
    height: 80vh;
  }
}

较小的屏幕 竖屏

大多数手机不够宽,无法让Flexbox在不缩小照片的情况下正常工作,所以我选择不尝试每行容纳多张照片。尽管如此,在这里设置最大高度仍然值得,这样你至少可以瞥见列表中的下一张照片。

@media (max-aspect-ratio: 1/1) and (max-width: 480px) {
  ul {
    flex-direction: column; /* 改为列方向 */
  }

  li {
    height: auto;
    width: 100%;
  }

  img {
    width: 100%;
    max-height: 75vh;
    min-width: 0;
  }
}

总结

这种方法并没有完全尊重照片的纵横比(但已经很接近了),并且偶尔会导致一些奇怪的结果,但我绝对喜欢它的简洁性和灵活性。想要让你的画廊水平滚动而不是垂直滚动?只需进行一些调整即可实现。画廊中有1000张照片还是只有一张?看起来都很好。不确定纵横比?Flexbox是你的最佳选择。如果你还没有查看演示,请再看一遍,并告诉我你的想法!

额外提示

根据这些照片的大小,这样的页面可能会很快增长到几兆字节。在我的博客中,我添加了loading="lazy"来解决这个问题。使用该属性后,图像只会在您滚动时接近它们时才加载。目前它只在Chrome中受支持,但您可以自己编写一个更广泛支持的技术。

以上是带有Flexbox的自适应照片布局的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
'订阅播客”链接应在哪里?'订阅播客”链接应在哪里?Apr 16, 2025 pm 12:04 PM

有一段时间,iTunes是播客中的大狗,因此,如果您将“订阅播客”链接到喜欢:

浏览器引擎多样性浏览器引擎多样性Apr 16, 2025 pm 12:02 PM

当他们在2013年去Chrome时,我们失去了歌剧。与Edge今年早些时候也进行了同样的交易。迈克·泰勒(Mike Taylor)称这些变化为“减少

网络共享的UX注意事项网络共享的UX注意事项Apr 16, 2025 am 11:59 AM

从垃圾点击诱饵网站到大多数出版物的最多,共享按钮长期以来一直无处不在。然而,这些

每周平台新闻:Apple部署网络组件,渐进的HTML渲染,自托管关键资源每周平台新闻:Apple部署网络组件,渐进的HTML渲染,自托管关键资源Apr 16, 2025 am 11:55 AM

在本周的综述中,Apple进入Web组件,Instagram如何插入脚本以及一些思考的食物,以进行自托管关键资源。

git Pathspecs以及如何使用它们git Pathspecs以及如何使用它们Apr 16, 2025 am 11:53 AM

当我查看GIT命令的文档时,我注意到其中许多人都有选择。我最初以为这只是一个

产品图像的彩色拾取器产品图像的彩色拾取器Apr 16, 2025 am 11:49 AM

听起来有点像一个困难的问题,不是吗?我们经常没有成千上万种颜色的产品镜头,以便我们可以随身携带。我们也不是

黑暗模式与React和Themeprovider切换黑暗模式与React和Themeprovider切换Apr 16, 2025 am 11:46 AM

我喜欢网站具有“暗模式”选项时。黑暗模式使我更容易阅读网页,并帮助我的眼睛更放松。许多网站,包括

带有HTML对话框元素的一些动手带有HTML对话框元素的一些动手Apr 16, 2025 am 11:33 AM

这是我第一次查看HTML元素。我已经意识到了一段时间,但是尚未将其旋转。它很酷,

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。