- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是构建一个面包屑样式组件:
Flexbox 似乎是一个不错的起点,但是当涉及到要求 3 和 4 时,我不确定最好的方法是什么。
到目前为止,这是我的思考过程:
a) 首先,我可以用这样的元素创建一个 flexbox,每个 100 像素宽:
https://codepen.io/mattwilson1024/pen/LLvMzB
b) 现在假设容器只有 300px。我可以让所有元素都可收缩(flex: 0 1 100px
)。这对于少量元素来说没问题,但如果我有很多元素,它们都会变得太小。
https://codepen.io/mattwilson1024/pen/pwBqdN
我真正想要的是它只显示适合容器的元素。在这种情况下,这将是元素 7-9。
c) 启用 flex-wrap: wrap
意味着每一行只显示尽可能多的元素。这更接近我所追求的,除了我只想要最后一行。
https://codepen.io/mattwilson1024/pen/YQMdEB
d) 媒体查询可能会有帮助。例如,我可以使用媒体查询在小屏幕上隐藏除最后 3 个元素之外的所有元素,以及在大屏幕上隐藏除最后 6 个元素之外的所有元素等。但是,我需要知道组件的确切位置使用并相应地调整数字。我宁愿找到一个基于容器大小</em>而不是视口(viewport)大小的解决方案。
最佳答案
您需要进行 3 次调整(在上一个示例中)才能满足您的要求:
关于 flex 容器items
flex-wrap: wrap
justify-content: flex-end
在 flex items item
last child
margin-right: auto
它的工作原理是这样的,其中 flex-end
将 右对齐 使最后的元素成为可见的元素。
当填充容器的元素较少时,margin-right: auto
将使元素左对齐。
Update codepen ,其中我还为 flex 元素提供了 max-width
并将 flex 更改为 flex: 0 0 auto
,因此它们会根据内容进行调整并在超过最大宽度时获得省略号。
在下面的 Stack 片段中,我将 flex: 0 0 100px
中的 flex-shrink
从 1 更改为 0,因此它清楚地显示了它的行为方式:
.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>
已更新
根据评论,如果元素不能被截断,可以使用row-reverse
、flex-end
和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>
关于CSS/flexbox : Only show as many items as will fit in container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142609/
这里我试图在 FlatList 中显示一个名为“posts”的数组。 render() { console.log(this.props.posts); return (
这是我的代码: {{day(list)}} {{list.weather[0].description}}
我是 Mahout 的新手,并且仍在使用它。 我的问题是,将 Item-Item 和 User-Item 结合起来是否合适? 我的用例是,一个社交网络应用会尝试根据用户历史数据(优先级较高)为当前用户
下午好, 我按数据库搜索以测试特定类测试,当我放置一个新项目时,如果列表包含该项目。 @Test public void insertAndDeleteTask() throws Interrupte
我有一个关于 ionic 框架的问题,我希望有人能帮助我...我有一个带有“ion-item-right”的 ionic 列表。这一切都可以,按钮在右边。现在我需要其他三个居中的图标,这样我就有了:文
我经常遇到类似下面的代码: if ( items != null) { foreach(T item in items) { //... } } 基本上,if 条件确
我最近问了a question about LocalStorage .使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我最近问了a question about LocalStorage .使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
这个问题已经有答案了: Type mismatch: cannot convert from Item to Item (1 个回答) 已关闭 7 年前。 我很困惑。我无法将外部类的实例变量 Node
我目前正在使用 MUI Grid(但我对替代解决方案持开放态度)并且我想要并排放置两个组件:最右边的组件占 400px宽度和左侧组件占据其余部分。 || || || 当页面宽度缩小时: | | ||
我最近问过a question about LocalStorage 。使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
public class Document extends Model { ... @ManyToMany public Set accessors; ... } 我想选择访问者包含某个用户的所有文档
我正在使用 selenium webdriver 为单页 Web 应用程序开发一个 Java 框架,使用以下模式:PageObject、SlowLoadableComponent(责任链)、PageF
最近在学习C,在网上发现了一个问题。问题是: What is the problem with this function in terms of memory allocation? What is
我有这个代码 ( -1 ? true : false} /> {genre.item.name}
在ASP.Net中使用DataGrid时真的没有快捷方法吗 (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.A
我正在使用工作流程根据数据和一组要求将大量 pdf 从一个位置复制到其他大坝位置。我正在使用以下代码 Assets damAsset = manager.createAsset(path, is, m
我是 PowerShell 的新手。 我正在尝试自动将 dll 组件从源服务器上的文件夹部署到目标服务器上的多个文件夹。这看起来应该很简单:将组件从源服务器上的源(部署)文件夹复制到目标服务器上的文件
我的代码: for column_name, column_data in summary_words.iteritems(): if column_name != "summary" and
我的代码: for column_name, column_data in summary_words.iteritems(): if column_name != "summary" and
我是一名优秀的程序员,十分优秀!