html - 如何让外部 div 不会导致内部 div 的换行
问题描述
我正在尝试在 css 和 html 中创建一个具有水平和垂直滚动的数据网格。每行都是一个 div,我的 5 个单元格中的每一个都是一个宽度为 100 像素的 div。
当我将网格大小调整为小于 500 像素时,单元格会换行,而不是滚动。
唯一可行的解决方案是使行 div 宽度为 500px - 但我不喜欢它。
如何在不专门设置的情况下让行 div 匹配其子项的宽度。
.myGrid{
max-width:300px;
max-height:200px;
overflow:scroll;
display:block;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
/* width:500px; this solves my problem but I don't want it*/
}
<div class="myGrid">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
解决方案
就是这样float
工作的。只有当它有足够的空间时才会占据一席之地。
我的建议是使用flex
.
float
将ingdiv
s (.tr
)的父对象定义为display: flex
。- 为确保子项具有
100px
宽度,因此网格水平可滚动,请将它们设置为flex: 0 0 100px
.
.myGrid {
max-width: 300px;
max-height: 200px;
overflow: scroll;
display: block;
}
.td,
.th {
background-color: antiquewhite;
flex: 0 0 100px;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: flex;
clear: both;
/* width:500px; this solves my problem but I don't want it*/
}
<div class="myGrid">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
有关 flex 的更多信息,这里有一个很棒的教程:https ://css-tricks.com/snippets/css/a-guide-to-flexbox/
推荐阅读
- javascript - 使用 jQuery 操作 EasyMDE 字段的内容
- node.js - 如何使用 AWS SDK 解析来自 getThingShadow 的 json 结果
- excel - 如何应用 SearchDirection 来查找第一次出现?
- docker - Hello world with gitlab ce docker 容器在本地 ubuntu 上运行
- python - Python 从文件中读取与直接分配文字
- python - 在回归中使用 gurobi python 的荒谬解决方案
- r - 模块服务器在 R Shiny 中不工作,callmodule 根本不工作
- gcloud - 错误:(gcloud.app.deploy)[/home/sarthis7/app.yaml] 不存在
- python - 如何在python中按多列分组
- apache-beam - 使用 TableProvider 生成表并在 Apache Beam 中运行 SQL 查询