CSS/Flexbox:仅显示容器中容纳的尽可能多的项目

2024-01-08

我的目标是构建一个面包屑样式组件,其中:

  1. 显示项目的水平列表
  2. 每个项目都有最大宽度
  3. 如果宽度不足以显示项目,则从列表开头省略项目
  4. 优先考虑last列表中的项目
  5. 所有布局仅通过 CSS 实现(没有 JS 调整大小观察器等)

Flexbox 似乎是一个很好的起点,但当涉及到要求 3 和 4 时,我不确定最好的方法是什么。

到目前为止我的思考过程是这样的:

a) 首先,我可以创建一个包含如下项目的 Flexbox,每个项目宽 100 像素:

https://codepen.io/mattwilson1024/pen/LLvMzB https://codepen.io/mattwilson1024/pen/LLvMzB

b) 现在假设容器只有 300 像素。我可以让所有物品都收缩(flex: 0 1 100px)。这对于少量物品来说没问题,但如果我有很多物品,它们都会变得太小。

https://codepen.io/mattwilson1024/pen/pwBqdN https://codepen.io/mattwilson1024/pen/pwBqdN

我真正想要的是它只显示容器中容纳的尽可能多的项目。在本例中,即为第 7-9 项。

c) 启用flex-wrap: wrap意味着每行只显示尽可能多的项目。这更接近我想要的,只是我只想要底行。

https://codepen.io/mattwlson1024/pen/YQMdEB https://codepen.io/mattwilson1024/pen/YQMdEB

d) 媒体查询可能会有所帮助。例如,我可以使用媒体查询隐藏小屏幕上除最后 3 个项目之外的所有项目,以及大屏幕上除最后 6 个项目之外的所有项目等。但是,我需要确切地知道该组件将在哪里使用并相应地调整数字。我宁愿找到一个基于的解决方案容器尺寸而不是视口的大小.


您需要进行 3 项调整(在上一个示例中)才能满足您的要求:

  • 在弹性容器上items

    • remove flex-wrap: wrap
    • add justify-content: flex-end
  • 关于弹性项目item最后一个孩子

    • add margin-right: auto

它的工作原理如下,其中flex-end will 右对齐使最后一个项目成为可见项目的项目。

The margin-right: auto将制作物品左对齐当填充容器的物品较少时。

更新代码笔 https://codepen.io/anon/pen/xreeNy,我还给了弹性项目一个max-width并将 flex 更改为flex: 0 0 auto,因此它们会根据内容进行调整,并在超过最大宽度时得到省略号。


在下面的堆栈片段中我更改了flex-shrink从 1 到 0 中flex: 0 0 100px所以它清楚地显示了它的行为方式:

.items {
  width: 300px;
  display: flex;
  justify-content: flex-end;
}

.item {
  flex: 0 0 100px;
  
  /* Truncate text with ellipsis */
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

.item:last-child {
  margin-right: auto;
}


/* Styling - not relevant to the question, just to make it look good */

.item {
  border-right: solid 1px black;
  box-sizing: border-box;
}

.item:nth-child(1) {
  background-color: #e3f2fd;
  color: black;
}

.item:nth-child(2) {
  background-color: #bbdefb;
  color: black;
}

.item:nth-child(3) {
  background-color: #90caf9;
  color: black;
}

.item:nth-child(4) {
  background-color: #64b5f6;
  color: black;
}

.item:nth-child(5) {
  background-color: #42a5f5;
  color: white;
}

.item:nth-child(6) {
  background-color: #2196f3;
  color: white;
}

.item:nth-child(7) {
  background-color: #1e88e5;
  color: white;
}

.item:nth-child(8) {
  background-color: #1976d2;
  color: white;
}

.item:nth-child(9) {
  background-color: #1565c0;
  color: white;
}

body {
  font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
  font-size: 14px;
}

body > div:nth-child(2) {
  font-family: sans-serif;
  font-size: 12px;
}
<div class="items">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
  <div class="item">Item 3</div>
  <div class="item">Item 4</div>
  <div class="item">Item 5</div>
  <div class="item">Item 6</div>
  <div class="item">Item 7</div>
  <div class="item">Item 8</div>
  <div class="item">Item 9</div>
</div>

<div><br>If less to fit the container, they align left<br><br></div>

<div class="items">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
</div>

Updated

根据评论,某项不能切碎的, 可以使用row-reverse, flex-end and order让它们从右下角开始。

这样他们就可以向上包裹并添加overflow: hidden只有适合容器宽度的内容才会可见

.items {
  width: 300px;
  height: 15px;
  display: flex;
  flex-direction: row-reverse;
  flex-wrap: wrap;
  justify-content: flex-end;
  overflow: hidden;
}
.item {
  flex: 0 0 auto;
  max-width: 100px;  
  padding: 0 10px;

  /* Truncate text with ellipsis */
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}


/* Styling - not relevant to the question, just to make it look good */
.item { border-right: solid 1px black; box-sizing: border-box; }
.item:nth-child(1) { background-color: #e3f2fd; color: black; order: 10; }
.item:nth-child(2) { background-color: #bbdefb; color: black; order: 9; }
.item:nth-child(3) { background-color: #90caf9; color: black; order: 8; }
.item:nth-child(4) { background-color: #64b5f6; color: black; order: 7; }
.item:nth-child(5) { background-color: #42a5f5; color: white; order: 6; }
.item:nth-child(6) { background-color: #2196f3; color: white; order: 5; }
.item:nth-child(7) { background-color: #1e88e5; color: white; order: 4; }
.item:nth-child(8) { background-color: #1976d2; color: white; order: 3; }
.item:nth-child(9) { background-color: #1565c0; color: white; order: 2; }
body {
  font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
  font-size: 14px;
}
<div class="items">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
  <div class="item">Item 3</div>
  <div class="item">Item 4</div>
  <div class="item">Item 5</div>
  <div class="item">Item 6</div>
  <div class="item">Item 7</div>
  <div class="item">Item 8</div>
  <div class="item">Item 9</div>
</div>

<div><br>If less to fit the container, they align left<br><br></div>

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

CSS/Flexbox:仅显示容器中容纳的尽可能多的项目 的相关文章

  • 如何使用 Twitter Bootstrap 创建类似 Gmail 的布局

    是否可以使用 Twitter Bootstrap 创建类似 GMail GoogleGroups 的布局 以便布局始终适合视口 窗口高度 并且侧边栏和内容区域适合 单独滚动 Fixed top navbar
  • 有没有办法在 Nokogiri css 中转义非字母数字字符?

    我有一个锚标签 file html stuff morestuff CHP 1 SECT 2 1 尝试提取 Nokogiri 中引用的内容 documentFragment at css stuff morestuff CHP 1 SECT
  • 在纯 css3 循环中按顺序对元素进行动画处理

    我正在尝试在完整的 css3 动画中按顺序对元素进行动画处理 似乎非常直接的答案是使用动画延迟 但是我想要这个循环 有什么想法如何使动画无限循环吗 我找到了这个fiddle http jsfiddle net cherryflavourpe
  • 在 jQuery Mobile 中设置 Listview
  • 高度
  • 我正在尝试调整大小 li 在我的 jQuery 移动网站 listview 中 似乎无法在 CSS 中找到合适的类来执行此操作 我基本上调整了一些元素的大小 页眉和页脚等 我有五个 li li 按钮垂直堆叠 按钮和页脚下方有间隙 我只想设置
  • 三行无表 CSS 布局,中间行填充剩余空间

    我需要的是一个包含 3 行的基于像素高度的 div 最上面一行的高度根据内容而变化 底行具有固定高度 中间行填充任何剩余空间 一切都是宽度 100 我一直在努力构建一个 div 和基于 CSS 的布局几个小时 这让我从字面上看seconds
  • HTML/CSS 水平导航子菜单悬停显示错误

    我正在创建一个带有水平导航和垂直子菜单的 HTML 页面 一切工作正常 除了子菜单上的悬停显示在实际菜单项的左侧 看我的jsfiddle https jsfiddle net qmcte349 https jsfiddle net qmct
  • 父元素的 mousedown 事件中的 offsetX 和 offsetY 错误

    我在 mousedown 上获取 offsetX 时遇到问题 下面是我的代码 div Click the text The mouseDown function is triggered when the mouse button is p
  • 使用 css3 列 - 如何获取元素位置?

    为了将长 html 文件与列分开 我使用了 css3 列 padding 0px height 1024px webkit column gap 0px webkit column width 768px 我想获取指定元素的位置 所以我使用
  • 如何在CSS中嵌套多个计数器?

    我想用 CSS 嵌套两个不同的编号 以获得如下所示的自动编号 1 第 1 节 1 1 小节1 1 2 小节1 2 第 2 节 2 1 小节2 2 2 小节2 这是我实现这一目标的尝试
  • Bootstrap 4 行布局没有响应

    我正在使用 Bootstrap 4 在 MEAN 堆栈上为新闻文章布局创建一个 html 模板 但这应该不重要 对于这种总体布局的要求是 一篇 特色 文章位于其自己的列中 而其他 8 篇文章位于另一列中的两行中 当在较小的屏幕或移动设备上查
  • IE8/9 - CSS 文件的最大字节数

    我目前正在开发的应用程序有过多的 CSS 样式 我们似乎已经达到了 IE8 9 以及它可以加载的 CSS 数量的某种限制 在某些时候 它会停止解释 CSS 从而破坏某些页面上的样式 我们正在使用 Combres 来压缩 缩小导致 CSS 文
  • 如何使单词中的每个字母在悬停时发生变化

    假设我的网站上某个段落中有一个单词 IamGreat 我希望它在悬停时更改为 Good4you 但是 我不想更改整个单词 而是希望每个字母单独更改 因此 如果我将鼠标悬停在字母 I 上 它将变成字母 G 字母 r 将变成数字 4 等 这两个
  • 有没有一种方法可以使页面布局在 100% 缩放下完美契合,同时又尊重更大的缩放系数?

    有多种方法可以布局网页 使其适合浏览器视口 DOMwindow 当我说 适合 时 我包括更改所用字体的大小 更改 DIV IMG 和其他渲染元素的宽度和高度 以及允许元素 流畅 移动 目标是使页面在所有显示设备 从小型手机到大桌面屏幕 上看
  • 下拉菜单导致滚动条

    我用过这个W3C 的示例 http www w3schools com bootstrap bootstrap dropdowns asp div class dropdown div
  • 自定义字体有时在 IE8 / IE7 中以斜体呈现

    在 IE7 和 IE8 中 当使用自定义 Web 字体时 文本有时会以斜体呈现 即使我明确设置font style normal 这个问题是偶发的 它会渲染几次 然后我刷新 一切都是斜体 然后我刷新 它恢复正常 我正在用这个 font fa
  • 向 Twitter Bootstrap 添加新字体系列

    我怎样才能按照他们的方式将新的字体系列添加到 twitter bootstrap 中 他们使用一种叫做 woff 的东西 我正在尝试将 roboto 添加到 css 文件中 我怎样才能像他们那样做 woff 的事情呢 font face f
  • 如何使网站适应用户的屏幕分辨率?

    我正在使用 1024x768 屏幕分辨率来设计我的网站 当您从屏幕分辨率较小 较大的计算机上的浏览器中查看网站时 网站开始变形 无论用户的屏幕分辨率是什么 如何使网站适应用户的屏幕分辨率 我相信通过 JavaScript 或 CSS 是可能
  • 禁用 iframe 中的滚动

    有没有办法在 iframe 中禁用所有滚动 我有一个 iframe 其中内容超出了 iframe 尺寸 设置scrolling no 只会删除滚动条 但不会禁用滚动 我无法控制 iframe html 的头部 所以我无法设计它的样式 有任何
  • 如何显示不同页眉的页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在为我的学校项目开发网站 但我遇到了一个问题 我在每个页面上显示一个标题 我的标题之一包含登录表单 另一标题包含用户名 搜索栏等 问题是
  • Chrome 上的 contenteditable 中未显示编辑光标

    当您打开此页面时 请参阅现场演示 http jsfiddle net gs3p1a6r 3 show 与 Chrome span span CSS myspan border 0 outline 0 JS myspan focus the

随机推荐

  • Active Directory Web 服务 (ADWS) SDK

    我最近了解到 WCF 有针对 Active Directory 的 Web 服务 我认为这与 LDAP 无关 是否有任何相关文档或博客介绍默认端点是什么或 API 是什么样子 或者它是否以 SOAP 进行交流 或者您能否介绍一下如何连接到
  • 使用 wpf 4 打印的最佳方法

    你好 我需要能够从我的 wpf 应用程序进行打印 我只是想打印交易收据 我发现使用 PrintDialog pDialog new PrintDialog pDialog PrintVisual new Receipt 交易名称 我的商店
  • 有没有可能的方法将指纹生物识别设备连接到网站..?

    有没有可能的方法将指纹生物识别设备连接到网站 我创建了一个基于网络的 ERP 系统 根据客户要求 我需要集成指纹记录系统 我的网站是用 C 和 angular2 开发的 我尝试了很多 sdk 但没有任何效果符合我的预期 它唯一可行的方法是使
  • 如何在 Scrapy .csv 结果中获取双引号

    我在使用 Scrapy 的输出中遇到引用问题 我试图废弃包含逗号的数据 这会导致某些列中出现双引号 如下所示 TEST TEST TEST ON TEST TEST 2 449 000 4 735 Sq Ft 6 Bed 5 1 Bath
  • 如何使用 jest/enzyme 模拟 multer 以使用 axios 后模拟调用进行文件上传

    我正在测试我的快速路由器axios调用后到后端 我正进入 状态500响应而不是 200 不知道如何嘲笑multer有效地 对此有什么想法吗 谢谢 路线 jsx const axios require axios const router e
  • 颤动底部被无限像素溢出

    我面临这个问题 当我将某个小部件添加到列的子项中时 我不断遇到 底部溢出无限像素 的问题 现在这就是添加名为的新小部件之前的样子countdown 以下是我添加后发生的情况countdown 这是屏幕下半部分的代码 我在其中添加countd
  • Android动画中的pivotX和pivotY是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这两个术语出现在很多地方 但它们在 Android 动画上下文中到底意味着什么 枢轴X和枢轴Y是动画的中心点 例如 如果你想做放大动画 你
  • iOS 8 Swift Xcode 6 - 设置顶部导航栏背景颜色和高度

    我到处查看并测试了 Stack 上发布的所有代码片段 但没有任何东西对我有用 因为我需要它工作 我只是想设置 导航栏高度 导航栏背景颜色 RGB 导航栏居中徽标 我正在使用 iOS8 Xcode 6 和 Swift 非常感谢您的明确答复 这
  • Tmux:如何使用选择树过滤当前会话窗口并格式化输出以显示不带主机名的窗口名称

    我想配置tmux choose tree to 仅显示我当前会话的窗口 但与此同时我想保留我当前使用的格式 不带主机名的窗口名称 我当前的设置是 bind key w choose tree F window name 看起来像这样 我发现
  • 将删除导航栏边框转换为 swift

    我正在尝试快速删除导航栏边框 这是通过在 Objective C 中使用以下代码来完成的 UINavigationBar appearance setShadowImage UIImage alloc init UINavigationBa
  • 使用超类静态方法获取子类的实例

    我有一个超类 我想转发一个名为的静态方法getInstance 到所有子类 创建子类的实例时 我然后在超类中注册该实例 可能使用哈希表 其中键基于getClass 然后 我希望使用前面提到的静态方法 getInstance 其中超类方法将返
  • PHP 中使用特殊字符对数组进行排序

    我有一个包含西班牙语语言名称的数组 lang ko coreano korean lang ar rabe arabic lang es espa ol spanish lang fr franc s french 我需要对数组进行排序并维
  • 跳过配置文件“main/binary-i386/Packages”的获取

    下午好 请告诉我我做错了什么 我刚在电脑上安装了Linux Ubuntu 但仍然对它一无所知 我尝试安装 PostreSQL 和 pgAdmin 我按照这个视频教程安装的https www youtube com watch v Vdzb7
  • Perl:打印传递给子例程的数组名称

    我将一个数组和一个标量传递给一个函数 以检查该值是否属于数组的一部分 如果它不是数组的一部分 则将其推送到数组 出于参考目的 它必须显示的是在推动它时必须显示数组的名称 这是我的代码 use v5 10 1 use strict use w
  • Angular2 Rxjs 404错误

    尝试启动 Angular2 应用程序时出现以下错误 Failed to load resource the server responded with a status of 404 Not Found angular2 polyfills
  • 文件写入在程序流程中应该发生时却没有发生

    这对我来说不是一个新问题 从 C 到 PERL 再到 Windows Mobile Windows XP 和其他 Windows 版本上的 Python 这个问题一直存在 让我心烦意乱 现在 在我最新的脚本中 这种情况再次发生 更具体地说
  • 使用 Expo 时如何忽略 fetch() 调用中的 SSL 证书问题?

    似乎反应原生无法在 fetch 调用期间禁用 SSL 验证 有人提到here https stackoverflow com questions 51130878 how to disable ssl check in react nati
  • 使用小数分隔符和可选的千位分隔符匹配数字的正则表达式

    我需要使用小数分隔符和千位分隔符 可选 来验证数字是否有效 我需要一个正则表达式 因为当前的代码不是由我完成的 使用的正则表达式无法正常工作 我的目标是修复它 因此以下组合是合法的 使用 作为小数点分隔符和 作为千位分隔符 10000 10
  • 如何在 Spring DM 中获取 BundleContext?

    我刚刚接触 Spring DM 我想访问 Bundlecontext 我的问题是我有一个包含 Activator 的捆绑包 但它没有 xml 配置文件 我无法触及这个捆绑包 那么我需要访问 BundleContext 和 serviceRe
  • CSS/Flexbox:仅显示容器中容纳的尽可能多的项目

    我的目标是构建一个面包屑样式组件 其中 显示项目的水平列表 每个项目都有最大宽度 如果宽度不足以显示项目 则从列表开头省略项目 优先考虑last列表中的项目 所有布局仅通过 CSS 实现 没有 JS 调整大小观察器等 Flexbox 似乎是