Bootstrap是最广泛采用的开源前端框架之一。 将Bootstrap包含在您的项目中,您将能够立即生成响应式网页。 如果您尝试将Masonry与Bootstrap Tabs小部件(Bootstrap必须提供的众多JavaScript组件之一)一起使用,那么您可能会偶然发现了某种令人讨厌的行为。

在砌体网站上 ,我们看到砌体是……

JavaScript网格布局库。 它通过根据可用的垂直空间将元素放置在最佳位置来工作,就像砌墙的石匠一样。

我做到了,本文重点介绍了问题所在以及可以解决的方法。

引导选项卡介绍

Bootstrap选项卡组件包括两个关键的相关部分:一个选项卡式导航元素和多个内容面板。 在页面加载时,第一个面板上应用了.active类。 这使面板默认情况下可见。 通过JavaScript使用此类,可通过选项卡式导航链接触发的事件来切换面板的可见性:如果存在.active ,则面板可见,否则面板被隐藏。

如果您有一些最好以单独的块呈现的Web内容,而不是一网打尽,Bootstrap选项卡组件可能会派上用场。

为什么要砌石?

在某些情况下,每个面板内的内容都适合在响应式网格布局中显示。 例如,一系列产品,服务和投资组合项目是可以以网格格式显示的内容类型。

但是,如果网格单元的高度不同,则可能会发生以下情况。

较大的间隙将两行内容分隔开,并且布局似乎已损坏。

如今,Bootstrap通过基于Flexbox的全新卡组件解决了等宽问题。 仅将card-deck 类添加到一组卡组件中就足以实现等宽列。

如果您希望卡片的长度不均匀,则可以使用CSS3多列布局 。 (毕竟,即使存在一些浏览器支持错误,总的来说还是不错的。)这是card组件随附的新card column选项的基础。 但是,如果您仍然喜欢Masonry JavaScript库提供的精美动画以及其广泛的浏览器兼容性,那么在这种情况下,JavaScript仍然是可行的选择。

设置演示页面

启动并运行演示页面有助于说明如何将Bootstrap Tabs与Masonry集成起来并不像人们期望的那么简单。

本文的演示页面基于Bootstrap网站上提供的入门模板 。

以下是“引导程序”选项卡组件的标记的框架:

<ul class="nav nav-tabs" id="myTab" role="tablist"><!-- nav item 1 --><li class="nav-item"><a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a></li><!-- nav item 2 --><li class="nav-item"><a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a></li><!-- nav item 3 --><li class="nav-item"><a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a></li>
</ul>

nav nav-tabs类负责赋予选项卡其独特的外观。 href属性的值形成单个选项卡及其对应的选项卡式内容之间的关系。 例如, href值为#home会与带有id="home"的选项卡式内容创建关系:单击该特定选项卡将显示idhomediv的内容。

另外,请注意Bootstrap如何注意可访问性属性,例如rolearia-controls等。

以下代码段说明了选项卡式内容的结构:

<!-- content 1 -->
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab"><h3>Tab 1 Content</h3>
<div class="card-group"><!-- first card --><div class="card"><img class="card-img-top" src="path/to/img" alt="Card image cap"><div class="card-body"><h5 class="card-title">Card title</h5><p class="card-text">Card text here.</p><p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p></div></div><!-- second card --><div class="card"><!-- card markup here --></div&lgt;<!-- third card --><div class="card"><!-- card markup here --></div></div>
</div>

只需为每个选项卡式内容部分添加与您上面编码的选项卡元素相对应的类似结构即可。

有关完整代码,请查看CodePen演示 。

添加砌体库

您可以通过单击下载masonry.pkgd.min.js按钮从官方网站下载Masonry 。

为了避免布局问题,该库的作者建议将Masonry与imagesLoaded插件一起使用。

石工不需要jQuery库即可工作。 但是,由于Bootstrap JavaScript组件已经使用jQuery,因此我将为自己简化生活,并以jQuery方式初始化Masonry。

这是使用jQuery和imagesLoaded初始化Masonry的代码片段:

var $container = $('.masonry-container');
$container.imagesLoaded( function () {$container.masonry({columnWidth: '.card',itemSelector: '.card'});
});

上面的代码缓存div ,该div将所有卡元素包装在一个名为$container的变量$container

接下来,使用几个推荐的选项在$container上初始化Masonry。 columnWidth选项指示水平网格的列的宽度。 在这里,使用类别名称将其设置为单个卡片项目的宽度。 itemSelector选项指示哪些子元素将用作项目元素。 在这里,它也设置为单个卡片项目。

现在该测试代码了。

糟糕! 隐藏面板怎么了?

在不使用“引导程序选项卡”的网页上,上面的代码就像一个超级按钮一样工作。 但是,在这种情况下,您很快就会意识到一种有趣的行为发生了。

首先,这看起来不错,因为正确显示了默认活动选项卡面板中的网格:

但是,如果单击选项卡式导航链接以显示隐藏面板的内容,则会发生以下情况:

窥视源代码可以发现Masonry已经按预期方式开火了,但是每个物品的位置都没有正确计算:网格物品都像一副纸牌一样堆叠在一起。

不仅如此。 调整浏览器窗口的大小会使网格项目正确定位。

让我们修复布局错误

由于单击选项卡式导航链接后会出现意外的布局错误,因此让我们更仔细地研究Bootstrap选项卡引发的事件。

事件列表很短。 这里是。

  • show.bs.tab在选项卡显示时触发,但在显示新选项卡之前
  • 显示标签后, bs.tab会在标签显示上触发
  • 当显示一个新标签时, hide.bs.tab会触发(因此,前一个活动标签将被隐藏)
  • 在显示新标签页后, hidden.bs.tab会触发(因此,先前的活动标签页将被隐藏)。

由于在显示选项卡后砌体布局会混乱,因此请进入shown.bs.tab事件。 这是代码,您可以将其放在上一个代码片段的正下方:

$('a[data-toggle=tab]').each(function () {var $this = $(this);$this.on('shown.bs.tab', function () {$container.imagesLoaded( function () {$container.masonry({columnWidth: '.card',itemSelector: '.card'});   });  });
});

这是上面的代码中发生的事情:

jQuery .each()函数在每个选项卡式导航链接上循环并侦听shown.bs.tab事件。 当事件触发时,面板将变为可见状态,并且在完成所有图像的加载后将重新初始化石工。

测试代码

如果您一直在遵循,请在浏览器中启动演示,或尝试下面的CodePen演示以查看结果:

请参阅CodePen上的SitePoint ( @SitePoint )的笔引导选项卡和砌体 。

单击选项卡式导航链接,然后注意这次网格项目如何均匀地放入每个内容面板中。 调整浏览器的大小可使项目正确地重新定位,并具有良好的动画效果。

就是这样,工作完成了!

结论

在本文中,我展示了如何将Bootstrap Tabs组件与Masonry JavaScript库集成在一起。

这两个脚本都易于使用且功能强大。 但是,将它们放在一起,您将遇到一些讨厌的布局错误,这些错误会影响隐藏的选项卡。 如上所示,诀窍是在每个面板可见后重新初始化Masonry库。

使用工具箱中的此解决方案,轻松实现出色的平铺布局将非常容易。

引导愉快!

如果您掌握了Bootstrap的基础知识,但又想知道如何将Bootstrap技能提高到一个新的水平,请查看我们的使用Bootstrap 4建立您的第一个网站课程,以快速,有趣地介绍Bootstrap的功能。

From: https://www.sitepoint.com/bootstrap-tabs-play-nice-with-masonry/

使Bootstrap选项卡与砌体一起发挥作用相关推荐

  1. 选项卡 bootstrap_使Bootstrap选项卡与砌体一起发挥作用

    选项卡 bootstrap Bootstrap是最广泛采用的开源前端框架之一. 将Bootstrap包含在您的项目中,您将能够立即生成响应式网页. 如果您尝试将Masonry与Bootstrap Ta ...

  2. bootstrap 选项卡_使Bootstrap选项卡与砌体一起玩

    bootstrap 选项卡 Bootstrap is one of the most widely adopted, open-source, front-end frameworks. Includ ...

  3. 如何在10分钟内让Redux发挥作用

    Hi everyone ❤️ 大家好❤️ For a while now I've been hearing my friends and colleagues complaining about h ...

  4. delphi5开发人员指南_成为企业家并发挥作用的开发人员指南

    delphi5开发人员指南 by Isabel Nyo 通过伊莎贝尔·尼奥 成为企业家并发挥作用的开发人员指南 (A developer's guide to becoming an intrapre ...

  5. amd服务器有什么优势,服务器市场才是AMD真正想要发挥作用的地方

    AMD推出了7nm"Rome"系列Epyc服务器CPU,具有多达64个内核,128个线程,225W TDP,最高时钟速度高达3.4GHz.虽然第三代Ryzen在上个月点亮了发烧友并 ...

  6. 什么是线索评分?如何让线索评分发挥作用?

    线索评分是一个有效的模型可帮助销售和营销部门确定哪些潜在客户对公司最具价值.但是线索评分系统只有在正确设置和使用的情况下才能发挥作用.否则就会浪费营销和销售的时间和资源. 什么是线索评分? 许多线索的 ...

  7. 转载:汶川大地震中业余无线电应急通讯发挥作用

    http://tieba.baidu.com/p/708843176 汶川大地震中业余无线电应急通讯发挥作用 在地震发生时,所有电话手机都发生了中断,只有使用电台通讯. 地震在14点28分发生,14点 ...

  8. 为什么游戏AI无法帮助AI在现实世界中发挥作用,但可以

    多人游戏被视为一个硕果累累的竞技场,可以在其中模拟许多现实世界中的AI应用程序场景(例如自动驾驶汽车,无人驾驶无人机和协作商务),这些场景可能过于昂贵,投机性或冒险性,无法在现实世界中进行全面测试. ...

  9. 游戏ai人工智能_为什么游戏AI无法帮助AI在现实世界中发挥作用,但可以

    游戏ai人工智能 多人游戏被视为一个硕果累累的竞技场,在其中可以模拟许多现实世界中的AI应用程序场景(例如自动驾驶汽车,无人驾驶无人机和协作商务),这些场景可能过于昂贵,投机性或冒险性,无法在现实世界 ...

最新文章

  1. 逻辑结构图向关系转换规则3
  2. 20135203齐岳 信息安全系统设计基础第十三周学习总结
  3. 解决 Flex navigateToURL 中文乱码问题
  4. 【案例】ZigBee无线模块在城市智能照明上的应用
  5. ReactOS,硬件抽象层,HAL概述
  6. 使用AsyncEnumerator简化异步操作
  7. 【排序算法】选择排序
  8. UIImagePickerController的知识点总结
  9. MFC在一个工程中启动其他工程的exe文件
  10. 面向硬件编程的一些思考
  11. 漂亮的壁纸,这些网站就足够了。
  12. 精挑细选的原创公众号,你值得拥有
  13. Android apk 腾讯云-乐固的加固及签名
  14. PhpSpreadsheet 基本使用和导入 导出 模版生成Excel文件
  15. 第一章:机器学习概览
  16. 【Requests】获取本地的请求IP和域名解析的IP
  17. 这些Word小技巧,你知道吗?
  18. 数学分析公式LaTex练习-洛必达法则
  19. Electron(基于Vue)中使用IPC
  20. 深度学习词汇 Developing Our Own Deep Learning Toolset

热门文章

  1. 如何用纯文本生成漂亮的表格?
  2. python有向图,无向图绘制
  3. tp5模型能实现事务吗_实现工作单元-通过事务模型处理域对象
  4. 【Hive】unsupport subquery expression
  5. 从一仅仅狗的创新说开去
  6. Linux命令之useradd命令
  7. oracle命令解锁用户,在命令行下进行Oracle用户解锁的语句
  8. Nature封面:这种新的酶,10小时就能“吃掉”塑料瓶,分解率高达90%,还很便宜...
  9. 【SAP Hana】X-DOC:SAP Hana CDS 开发简介
  10. H3C SSH远程管理登录配置