设置溢出:在带有显示的表格上滚动:flex

2023-12-04

我有一张桌子display: flex属性,其单元格将垂直居中。当单元格数量超过表格所能显示的数量时,overflow: scrollproperty 不考虑顶级的。

在下面的示例代码中,滚动在字母 K 处停止,而实际上它应该一直滚动到字母 A。是什么原因造成的?

#container {
  height: 180px;
  display: flex;
  flex-flow: row;
  align-items: stretch;
  border: 1px dashed gray;
}

table {
  display: flex;
  flex-flow: row;
  align-items: center;
  margin: 10px;
  overflow: scroll;
  border: 1px dashed blue;
}

td {
  height: 10px;
  width: 100px;
  border: 1px solid red;
}

#container div {
  flex: 1;
  margin: 10px;
  border: 1px dashed red;
}
<div id="container">
  <table>
    <tr><td>A</td></tr>
    <tr><td>B</td></tr>
    <tr><td>C</td></tr>
    <tr><td>D</td></tr>
    <tr><td>E</td></tr>
    <tr><td>F</td></tr>
    <tr><td>G</td></tr>
    <tr><td>H</td></tr>
    <tr><td>I</td></tr>
    <tr><td>J</td></tr>
    <tr><td>K</td></tr>
    <tr><td>L</td></tr>
    <tr><td>M</td></tr>
    <tr><td>N</td></tr>
    <tr><td>O</td></tr>
    <tr><td>P</td></tr>
    <tr><td>Q</td></tr>
    <tr><td>R</td></tr>
    <tr><td>S</td></tr>
    <tr><td>T</td></tr>
    <tr><td>U</td></tr>
    <tr><td>V</td></tr>
    <tr><td>W</td></tr>
    <tr><td>X</td></tr>
    <tr><td>Y</td></tr>
    <tr><td>Z</td></tr>
  </table>
  <table>
    <tr><td>A</td></tr>
    <tr><td>B</td></tr>
    <tr><td>C</td></tr>
  </table>
  <div></div>
</div>

根据HTML 规范,浏览器必须包装<tr>a 内的元素<tbody>元素(如果没有):

<tbody> is inserted inside <table> (http://jsfiddle.net/ed9msnfp/)

那个的高度<tbody>将是所有行的高度。然而,其高度<table>可以更小。这在表格布局中不会成为问题,因为表格的高度将被视为最小高度。

但是,那<table>现在参与弹性布局,而不是表格布局。自从<tbody> is a table-row-group其父元素既不是 a 的元素table nor inline-table(它是flex), an 匿名的 table父级已生成。

The <tbody> is wrapped in an anonymous table (http://jsfiddle.net/1wf1hu0d/)

所以现在我们有一个<table>这是一个具有单个 Flex 行的 Flex 容器,并且包含单个 Flex 项目(匿名table).

柔性线的高度将是柔性容器的高度(spec):

如果弹性容器是单线并且有明确的十字 size,柔性线的交叉尺寸是柔性容器的内部尺寸 十字尺寸。

然后你使用align-items: center。这将垂直对齐匿名table(连同<tbody>) 位于柔性线的中间,即使它溢出到上方或下方。

问题是滚动条允许滚动看到下面溢出的内容,但看不到上面溢出的内容。

因此,代替align-items: center, 我建议与自动边距对齐:

对齐之前通过justify-content and align-self, 任何正的可用空间都分配给自动边距,因为 方面。

请注意区别:自动边距仅分配positive自由空间,而不是负空间。

因此,我们只需使用以下方式设置 Flex 项目的样式

margin: auto 0; /* Push to the center (vertically) */

但有一个问题:如上所述,flex 项是匿名生成的元素,因此我们无法使用 CSS 选择器选择它。

为了解决这个问题,我们可以添加display: block to the <tbody>。然后,它不会被任何匿名包裹table元素,因此它将是一个弹性项目并且对齐将起作用。

请注意,这不会破坏桌子,因为一堆<tr>s,分别是table-rows,将生成一个匿名table父级,但现在在<tbody>:

An anonymous table is generated inside <tbody> (http://jsfiddle.net/bvjvd30u/)

所以你可以使用这段代码:

tbody {
  display: block; /* Disable tabular layout, and make <tbody> a flex item */
  margin: auto 0; /* Push to the center (vertically) */
}

#container {
  height: 180px;
  display: flex;
  flex-flow: row;
  align-items: stretch;
  border: 1px dashed gray;
}
table {
  display: flex;
  flex-flow: row;
  margin: 10px;
  overflow: scroll;
  border: 1px dashed blue;
}
tbody {
  display: block; /* Disable tabular layout, and make <tbody> a flex item */
  margin: auto 0; /* Push to the center (vertically) */
}
td {
  height: 10px;
  width: 100px;
  border: 1px solid red;
}
#container div {
  flex: 1;
  margin: 10px;
  border: 1px dashed red;
}
<div id="container">
  <table>
    <tbody>
      <tr><td>A</td></tr>
      <tr><td>B</td></tr>
      <tr><td>C</td></tr>
      <tr><td>D</td></tr>
      <tr><td>E</td></tr>
      <tr><td>F</td></tr>
      <tr><td>G</td></tr>
      <tr><td>H</td></tr>
      <tr><td>I</td></tr>
      <tr><td>J</td></tr>
      <tr><td>K</td></tr>
      <tr><td>L</td></tr>
      <tr><td>M</td></tr>
      <tr><td>N</td></tr>
      <tr><td>O</td></tr>
      <tr><td>P</td></tr>
      <tr><td>Q</td></tr>
      <tr><td>R</td></tr>
      <tr><td>S</td></tr>
      <tr><td>T</td></tr>
      <tr><td>U</td></tr>
      <tr><td>V</td></tr>
      <tr><td>W</td></tr>
      <tr><td>X</td></tr>
      <tr><td>Y</td></tr>
      <tr><td>Z</td></tr>
    </tbody>
  </table>
  <table>
    <tbody>
      <tr><td>A</td></tr>
      <tr><td>B</td></tr>
      <tr><td>C</td></tr>
    </tbody>
  </table>
  <div></div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置溢出:在带有显示的表格上滚动:flex 的相关文章

  • 电子邮件链接在 Android 上不起作用

    我有 HTML 格式的点击电子邮件链接的代码 它在我的电脑上运行良好 但在移动设备上不起作用 我只有 Android 所以我不知道问题是否仅在 Android 上或所有移动设备上 当我按下链接时 浏览器显示 网页无法显示 邮寄至 电子邮件受
  • jQuery 变量在定义时声称它是未定义的

    我试图在同一页面上有两个自动填充文本框 一个用于手机型号 input1 一个用于固件 input2 当两者都填充时 我希望显示一个带有ID input1input2 的div 但是当在input1 中输入值时 它声称phone 的变量未定义
  • 重新加载更新的 javascript> 代码而不完全重新加载 html 页面

    我正在开发一个单页 Web 应用程序 它具有许多不同的功能和形式 当开发一个深度 我的意思是主页上没有的 功能时 我会经历这个循环 开发代码 编辑类和函数 刷新整个页面 一路点击 直到到达我需要测试的部分 有时加起来大约一分钟 测试新代码
  • html5 canvas 上的错误显示 lineWidth=1

    I have example https developer mozilla org samples canvas tutorial 4 5 canvas linewidth html https developer mozilla org
  • 使用内联样式有哪些风险?

    A 内容安全政策 https developer mozilla org en US docs Web HTTP CSP with a default src or style src指令将阻止内联样式应用于
  • 编辑类名中带有空格的元素的 css 样式

    我正在创建一个 tumblr 我必须编写一个外部 CSS 文件 但我在编辑 post 元素的 css 样式时遇到问题 这是它的结构 li class post quote other code li 问题是类名中有空格 我如何创建一个 CS
  • 未捕获的 TypeMismatchError:无法在“CanvasRenderingContext2D”上执行“drawImage”

    我对以下代码片段有疑问 var o inserted motive find span contains document documentElement o 0 b fillText m i h b drawImage d i h e f
  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • CSS3变换:悬停时翻译,带有过渡[重复]

    这个问题在这里已经有答案了 这应该很简单 我的 HTML 中有一堆锚点 如下所示 a href Link 1 a a href Link 2 a a href Link 3 a a href Link 4 a a href Link 5 a
  • 如何去掉单词末尾多余的连字符

    我有句话我已经放了 shy 里面 它可以使用连字符 直到我达到足够小的屏幕尺寸 然后它在末尾添加一个额外的连字符 编辑 无法在 jsfiddle 中重现它 因为它似乎对 html 的解释不同 不过我可以展示问题的图片 h3 Flu shy
  • 如何覆盖 bootstrap 表 td 样式?

    我正在使用 Bootstrap 3 3我有一个 HTML 代码如下 div table class table table striped tr td 03 td td 04 td td 05 td td 06 td td 07 td td
  • HTML5 支持命名空间吗?

    我们是否可以使用新标签来扩展 HTML5 例如
  • 用于渲染 html 子集的 Django templatetag

    我有一些 html 在本例中是通过 TinyMCE 创建的 我想将其添加到页面中 但是 出于安全原因 我不想只打印用户输入的所有内容 有谁知道模板标签 最好是过滤器 只允许呈现 html 的安全子集 我意识到 Markdown 和其他人就是
  • 可以使用带有 HTML5 播放器的 Amazon S3/CloudFront 流式传输视频吗?

    我想使用 HTML5 视频播放器并流式传输视频 S3 CloudFront 可以实现这一点吗 我了解 Amazon 使用 RTMP 流媒体协议和 HTML5video标签不支持 RTMP 有没有办法用 HTML5 播放器播放视频 Wayne
  • 没有类的 CSS 选择器

    我正在使用选择器来选择不具有一个类的所有元素 list th not foo some rules 我怎样才能将其应用到多个班级 list th not foo list th not bar some rules 上面的 CSS 当然不会
  • PHP 共享标头而不使用服务器端脚本?

    到目前为止我总是通过 PHP 解决简单的问题 您有一个包含页眉 菜单 页脚和内容字段的网站 每个页面的页眉 菜单和页脚通常是相同的 在没有 PHP 或任何其他服务器端语言的情况下 如何使页眉 菜单和页脚数据仅存在于一个文件中 例如 您不会有
  • 弹出窗口的动态高度取决于内容,可能吗?

    是否有可能获得一个宽度始终为 400px 的弹出窗口 但根据弹出窗口中的内容动态高度 我已经看到了这个 但不知道如何将其应用到弹出窗口 调整 iframe 的宽度高度以适应其中的内容 https stackoverflow com ques
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 在具有多级分组的 HTML 表格中显示数据

    我必须通过使用 rowspan 进行分组来显示 HTML 表中的一些数据 下面是预期的 GUI 我有如下所示的 JSON 数据 JSON数据here https jsoneditoronline org id 1014438e5489485
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐

  • jQuery UI 对话框 - 关闭事件时出现问题

    当我关闭 jQuery UI 对话框时 我尝试执行特定操作 这是我的代码的简化版本 a open trigger click function var test hello dialog dialog bgiframe true dialo
  • 法师注册表项“_singleton/VladimirPopov_WebForms_Model_Observer”已存在

    我已经从扩展中卸载了 web 并再次安装了它 因为当我尝试打开管理时收到此错误 前端工作正常 请帮忙 清除编译器缓存并在 Magento 后端将其打开非常重要 清除缓存 SSH find var cache type f delete FT
  • 插入图像sqlite

    我有一些图片 我想将其存储在 sqlite 中 我需要做什么 有两种思想流派 将它们放入目录中 然后将路径存储在文本字段中 将图像数据存储在 blob 字段中 如果数据库很大并且图像也很大 那么文件系统方式的性能更高 如果您只想快速完成某件
  • 获取此实例的名称

    这可能吗 我正在尝试创建一组模拟许多不同类型事物的类 这些东西的属性随着时间的推移而改变 我希望我的代码易于维护 所以我想做如下的事情 public class Cat public string CatName get set publi
  • 如何在android中获取指针/光标位置

    在Android中 当我单击屏幕上的任意位置时 我想获取 返回光标位置 纬度和经度 我不知道你想要获取什么纬度和经度 但我确信你可以获得坐标的位置X and Y当用户触摸屏幕时 实施OnTouchListener在你的Activity并设置
  • 如何安装libpq-fe.h?

    我一生都无法弄清楚这一点 When I pip install django tenant schemas它尝试安装依赖项psycopg2这需要 Python 头文件和 gcc 我已经安装了所有这些 但仍然收到此错误 psycopg psy
  • 获取一年中每一天的所有完整小时数

    我需要在给定年份的每一天的每个整小时在命令行上获取 打印 例如2011 年 但我正在努力用 Java 编写它 有人编码过这个问题吗 这应该有效 final DateFormat df DateFormat getDateTimeInstan
  • 具有不同限制的轴的方形主/副网格

    我有一个带有背景网格的图 我需要网格单元是方形的 主要网格单元和次网格单元 即使 X 轴和 Y 轴的限制不同 我当前的代码如下 import matplotlib pyplot as plt import matplotlib ticker
  • 我可以将新的 spring 3.2 与旧的 spring-security 3.0 一起使用吗

    我想升级Spring框架从 3 0 到 3 2 但想跳过升级弹簧安全一阵子 我可以将新的 spring 3 2 与旧的 spring security 3 0 一起使用吗 使用的 Spring 模块有 spring core spring
  • 在 Chrome 中使用 Array.prototype.sort 时数组的奇怪排序

    我在使用时发现了一个奇怪的现象Array prototype sort 在一系列数字上 我不确定是什么原因造成的 我的目标是使用反转数组sort 不使用reverse 所以我可以像这样链接它 const shouldReverse Math
  • 如何从 javascript 获取 cookie 过期日期/创建日期? [复制]

    这个问题在这里已经有答案了 是否可以从 javascript 检索现有 cookie 的创建或过期日期 如果是这样怎么办 不可能 document cookie包含这样的字符串信息 key1 value1 key2 value2 所以没有任
  • 打印所有已加载的 Spring bean

    有没有办法打印启动时加载的所有 spring bean 我正在使用 Spring 2 0 是的 抓住ApplicationContext并打电话 getBeanDefinitionNames 您可以通过以下方式获取上下文 实施Applica
  • 计算pandas中列中第n个元素的平均值

    我有以下数据框 df1 index year week a b c 10 2017 10 45 26 19 9 2017 11 37 23 14 8 2017 12 21 66 19 7 2017 13 47 36 92 6 2017 14
  • 如何在不更改编码的情况下将命令的输出传输到文件?

    我想将命令的输出通过管道传输到文件 PS C Temp gt create png gt binary png 我注意到 Powershell 更改了编码 并且我可以手动给出编码 PS C Temp gt create png Out Fi
  • 如何使用**日期对象**从**领域数据库**获取数据?

    我尝试了一些领域查询 但没有得到我想要的结果 让我们以下表为例 领域表 id Name DateTimeStamp 1 A 2017 01 01 08 00 00 2 B 2017 01 01 15 00 00 3 C 2017 01 02
  • 如何根据换行符分割Python数据框?

    我有 pandas 数据框 其中一列包含文本段落 我想通过将文本段落拆分为换行符来将数据框分解为单独的列 文本段落可能包含多个新行 示例数据框 Current output A foo bar foo bar nfoo bar foo ba
  • 有没有办法将 std::tuple 移动到结构中?

    假设我有一个具有相同字段的结构体和元组 struct foo int x std string y some big type z std tuple
  • 如何从数据框中选择并绘制每小时平均值?

    我有一个如下所示的 CSV 文件 其中 时间 是 UNIX 时间戳 time count 1300162432 5 1299849832 0 1300006132 1 1300245532 4 1299932932 1 1300089232
  • PHP header() 使用 POST 变量重定向 [重复]

    这个问题在这里已经有答案了 我正在使用 PHP 并且正在制作一个表单发布到的操作页面 该页面检查错误 如果一切正常 它将它们重定向到已发布数据的页面 如果没有 我需要将它们重定向回他们所在的页面 并显示错误和 POST 变量 这是它如何工作
  • 设置溢出:在带有显示的表格上滚动:flex

    我有一张桌子display flex属性 其单元格将垂直居中 当单元格数量超过表格所能显示的数量时 overflow scrollproperty 不考虑顶级的 在下面的示例代码中 滚动在字母 K 处停止 而实际上它应该一直滚动到字母 A