当网格项与末端/底部对齐时,滚动不起作用

2024-03-30

我想使用创建聊天CSS grid并遇到了我无法合并的问题align-self: end; and overflow-y: auto;.

The ul包含所有消息并且应该与底部对齐,这样即使只有一条消息,它也会出现在底部。

聊天的页眉和页脚是固定的,您只需滚动浏览消息(如 Whats App 和类似的应用程序)。

我创建this pen https://codepen.io/MichaelZ_dev/pen/oqdoRQ有一些消息。消息通过标题,它永远不允许我滚动。

html,
body {
  margin: 0;
  height: 100%;
}

#chat {
  display: grid;
  height: inherit;
  grid-template-rows: 50px auto 50px;
}

header,
footer {
  background: #4081ff;
}

ul {
  overflow-y: auto;
  align-self: end;
}
<section id="chat">
  <header>header</header>
  <ul>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>last message</li>
  </ul>
  <footer>footer</footer>
</section>

这似乎是一个错误。

Analysis

您正在使用align-self: end固定中间网格项目(ul) 到行的底部。这无法呈现垂直滚动条。

我尝试了各种替代方案:

  1. 我做了ul网格项目是一个弹性容器flex-direction: column and justify-content: flex-end.

  2. 我做了ul网格项目是一个弹性容器flex-direction: column并应用了margin-top: auto到第一个li弹性项目。

  3. 我尝试从

    grid-template-rows: 50px auto 50px
    

    to

    grid-template-rows: 50px 1fr 50px
    

什么都没起作用。在所有情况下,浏览器都无法生成垂直滚动条。

但是,在所有情况下,当没有“结束”对齐时(换句话说,网格项与默认的“开始”位置对齐),垂直滚动效果很好。

因为滚动条在“开始”时有效,但在“结束”时失败,所以我认为将其称为错误是公平的。

Flexbox 中也存在同样的问题:无法使用 justify-content: flex-end 获得垂直滚动条 https://stackoverflow.com/q/41863033/3597276


解决方案#1:仅限 Chrome

如果您使ul网格项(嵌套)网格容器align-content: end,这似乎适用于 Chrome,但不适用于 Firefox 和 Edge。我没有在Safari、IE11或其他浏览器中进行测试。

#chat {
  display: grid;
  height: 100vh;
  grid-template-rows: 50px 1fr 50px;
}

ul {
  overflow-y: auto;
  display: grid;
  align-content: end;
}

header,
footer {
  background: #4081ff;
}

body {
  margin: 0;
}
<section id="chat">
  <header>header</header>
  <ul>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>last message</li>
  </ul>
  <footer>footer</footer>
</section>

修改后的代码笔 https://codepen.io/anon/pen/rdKJdE?editors=1100


解决方案#2:所有浏览器

该解决方案利用了垂直滚动可以很好地处理项目中的事实start位置。您可以插入另一个li或者,更好的是,伪元素(因为它们在应用于网格容器时被视为网格项)。这li将为空并设置为占据所有可用空间,这会将实际项目固定在底部。

#chat {
  display: grid;
  height: 100vh;
  grid-template-rows: 50px auto 50px;
}

ul {
  overflow-y: auto;
  display: grid;
  grid-template-rows: 1fr; /* applies to the first row, the only explicit row;
                              all subsequent rows, which are implicit rows, will
                              take `grid-auto-rows: auto` by default */
}

ul::before {
  content: "";
  border: 1px dashed red; /* demo only */
}

header,
footer {
  background: #4081ff;
}

body {
  margin: 0;
}
<section id="chat">
  <header>header</header>
  <ul>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>Message 1</li>
    <li>last message</li>
  </ul>
  <footer>footer</footer>
</section>

修改后的代码笔 https://codepen.io/anon/pen/RMJQvZ

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

当网格项与末端/底部对齐时,滚动不起作用 的相关文章

  • 使用 CSS 定位文本节点

    我正在研究容器对象的 CSS 我大部分时间都在工作 具体来说 我正在查看测试用例 1 2 和 3 它们都有文本节点 有没有办法像对待任何子元素一样对待文本节点 有什么方法可以调整 CSS 以使文本节点及其兄弟节点正常工作吗 除非有一个 CS
  • 如何使用CSS使整个div在悬停时改变颜色?

    我有以下内容 div class sidebar nav span2 div class sidebar link span Link 1 span div div class sidebar link span Link 2 span d
  • CSS/Javascript 将单词与特定字符对齐

    我如何使用 CSS Javascript 将 html 中的单词与该单词中的任意字符对齐 更改对齐字符的样式 例如使其粗体 以与其他字符形成对比 如本例中所示 对齐和粗体 k e t 和 f stack overflow stack ove
  • Javascript-CSS 显示和隐藏表单元素

    通过使用 Javascript 如何显示和隐藏表格的某些部分 例如 TR 或 TD 这应该取决于从数据库获取的数据 我在我的应用程序中使用 CakePHP 框架 并使用单个视图文件进行添加和编辑 在编辑模式下 根据获取的数据 我需要显示和隐
  • 为什么我的 CSS3 媒体查询无法在移动设备上运行?

    在 styles css 中 我使用媒体查询 两者都使用以下变体 Normal CSS styles media only screen and max width 767px Mobile styles go here 当我缩小窗口时 网
  • 如何让图片在div中居中?

    我的 HTML 代码如下所示 div class ctn img src some img jpg div The ctn应该是固定大小 例如 150 150 但 IMG 的尺寸可能更大或更小 200 50 50 200 50 50 等 如
  • LessCSS 中的 @media 和 @font-face 支持

    你好 有谁知道如何使用 LessCSS 进行媒体查询吗 media screen and max width 600px container width 480px 给我以下错误 Syntax Error on line 23 expect
  • 在多个 Compass 项目中加载全局 SASS 文件

    我想创建一个多个 Compass 项目将访问的 SASS 文件目录 该目录将包含许多具有相似样式 表单元素 clearfixes 重置等 的常见元素的 SASS 文件 我希望在多个项目中访问和使用这些元素 如何在多个项目中包含这个全局 SA
  • SVG 视图框显示屏幕外项目

    我正在使用 HTML5 制作游戏svg标签为图形提供多分辨率显示 游戏的大部分内容已经完成 但在测试中我刚刚遇到了一个主要错误 其中涉及 SVG 对象可见 尽管在非本机分辨率下位于视图框之外 我不确定这是否是我的代码或浏览器本身的缺陷 Go
  • CSS 使文本框填充所有可用宽度

    我的网页中有以下 行 div style width 100 Some Text div
  • CSS:变换:翻译(-50%,-50%)使文本模糊[重复]

    这个问题在这里已经有答案了 我想将我的div我使用这种方法 但它使我的文本在div blurry div top 50 left 50 webkit transform translate 50 50 transform translate
  • 使用 CSS3 计算值

    CSS3有没有办法实现这一点 height 100 110px 我的背景 你不能用纯 CSS 来计算它 正如 Litek 提到的 它不适用于所有浏览器 但是有一种组织方法可以处理这个问题 但是您需要将元素包装在另一个浏览器中 body he
  • 使用 JavaScript 在空闲时隐藏鼠标光标

    是否可以使用JavaScript来设置cursor属性的属性none如果鼠标在一定时间内处于非活动状态 例如五秒 请将其设置回auto当它再次活跃时 EDIT 我意识到none不是有效值cursor财产 尽管如此 许多网络浏览器似乎都支持它
  • Bootstrap 4 navbar-inverse 没有颜色

    最近我决定尝试新的引导程序版本 4 我对文件做了所有正确的事情 下面是我的html
  • 选项卡式导航

    我真的很难弄清楚如何执行以下操作 我想要有两个选项卡 水平相邻 一个用于搜索 并如此标记 另一个用于帖子 如此标记 当选择搜索选项卡时 我希望出现一个搜索框 当选择帖子选项卡时 我希望出现另一个搜索框 我不想隐藏搜索框 我猜它本质上是使用
  • 如何在列表中使用 CSS 计数器而不重置计数器?

    我想要有多个 ol 列表 其中计数器值not在列表之间重置 另一种说法是 我希望第二个列表中第一个 li 的计数器比前一个列表最后一个元素的计数器值高一个 有什么 CSS 魔法可以做到这一点吗 While 苏的回答 https stacko
  • 在 CSS 中设置 TableView 样式 (JavaFX)

    如何在 TableView 中设置 THIS 点的样式 我的 CSS 代码如下所示 Empty Stylesheet file root fx background color 262626 table view fx background
  • 当鼠标悬停在选择下拉列表上时,包含 div 会失去焦点

    我有一个 div 当您将鼠标悬停在其容器上时 该 div 会出现 并且该 div 是绝对定位的 因此它会出现在其容器之外 它里面有多个选择下拉菜单 当我尝试更改其中任何一个的值时 焦点就会丢失 它会触发容器上的鼠标移出 我在这里设置了这个问
  • 如何防止图像被裁剪

    我正在尝试创建一个包含很多图层的动画图片 为了在不同的屏幕上获得正确比例的图像 我使用covercss 属性值 我已经尝试过object fit对于图像和background size用于背景图像 这就是为什么我的宽屏幕图像被浏览器裁剪的原
  • Three.js - 将 WebGL 和 CSS3D 与 iFrame 混合

    我准备了一个混合的工作页面WebGL and CSS3D 在SO的一点帮助下here https stackoverflow com questions 24681170 three js properly blending css3d a

随机推荐

  • 数据集和渲染器不应为空,并且在 AChartEngine 中应具有相同数量的系列

    我使用多 Y 轴图来绘制点 我有 1 X 轴 2 Y1 轴 3 Y2 轴 a 最初我用来在Y1轴 高度 上绘制5系列线 在Y2轴上绘制相同的5系列线 重量 两者都相对于x轴 这里不存在问题 这些系列线是标准线 用于每次计算 b 现在 如果用
  • 从打字稿接口生成 swagger 文档

    我在用着swager jsdoc https github com Surnet swagger jsdoc记录应用程序的所有 DTO 我想知道是否有任何方法可以从打字稿接口自动生成 swagger 文档 我的项目中有很多这样的东西 还有很
  • C# 锁定 SQL Server 表的方法

    我有一个 C 程序 需要对 SQL Server 表执行一组批量更新 20k 由于其他用户可以通过内联网网站一次更新一条记录 因此我们需要构建具有锁定表功能的C 程序 一旦表被锁定以防止其他用户进行任何更改 搜索 我们将需要执行请求的更新
  • 除了早期的 .NET 框架版本之外,Visual Studio 还可以定位早期的 C# 语法吗?

    简单的部分 使用下拉列表将 Visual Studio 2010 项目中的 NET 2 0 框架作为目标 困难的部分 是否可以针对特定的语法版本 例如var s hello world 在 VS2008 及以上版本中是有效的语法糖 但在 V
  • HTTP 请求从 Web 服务器分派到 CGI/FastCGI 进程

    为了更好地了解 Web 应用程序中 HTTP 请求的处理方式 Apache 等 Web 服务器如何将请求分派到其虚拟主机之一 无论框架 Rails PHP Java 如何 最初执行的程序是什么 如果有人能列出以 Rails 为例的步骤 据我
  • Android 和 SQLite:何时使用分号结束语句?

    如果您正在使用rawQuery or execSQL Android 上的 SQLite 方法 什么时候应该使用分号来结束语句 On 本教程 http www vogella com articles AndroidSQLite artic
  • 您可以从多个线程访问单个 std::unique_lock 吗?

    我在概念化如何unique lock应该是跨线程操作 我尝试制作一个快速示例来重新创建我通常会使用的东西condition variable for include
  • 使用 ng-repeat 时默认选中单选按钮

    我一直想使用 ng repeat 从屏幕上显示的单选按钮列表中签出一个单选按钮 但我的代码不起作用 这就是我正在做的 div class clubRole div div div
  • CI for Qt 应用程序:使用不同的 Qt 版本进行构建

    我使用 Travis CI 为我的简单 Qt 应用程序进行持续集成 我的 travis yml 文件看起来像这样 基于这个要点 https gist github com jreese 6207161 language cpp before
  • 如何在 C# 中获取应用程序设置的名称?

    在Visual C 的应用程序设置中 我们可以创建一系列具有特定Name Type Scope和Value的设置 我可以通过代码访问该值 string color Myproject Properties Settings Default
  • 比较 Go 模板中的两个变量

    在我传递给模板的数据中 我有两个变量Type and Res Type我想比较为我的选择字段预先选择一个选项 为了说明我的问题 我创建了这个简化版本 package main import bufio bytes html template
  • python 中的交互式输入

    以下是我需要执行的操作的说明 你要编写一个完整的程序 获取三段数据 然后对它们进行处理 这三条信息是布尔值 字符串和整数 程序的逻辑是这样的 如果布尔值为 True 则打印字符串两次 一次带双引号 一次不带 否则打印两倍的数字 这是我到目前
  • 动态 HTML 到 PDF [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要能够将动态 HTML 通过 javascript 在页面加载时呈现的 html 转换为 PDF 我
  • 从 WiX 提升的安装程序运行未提升的自定义操作

    我正在尝试弄清楚如何从提升的 WiX 安装设置程序运行自定义操作 WiX 生成的 msi 文件由 DotNetInstaller 执行 在 WiX 中 我有一个 Package 部分 其中 InstallScope 设置为 perMachi
  • Ajax 调用在 IE8 中不起作用

    我正在阅读几篇关于此的文章 并对我的代码进行了一些更改 但没有成功 任何人都可以调查一下 看看这里发生了什么 或者也许是另一种方法来完成我需要的事情 使用 ziptastic 通过邮政编码检索城市 州 该代码在 Chrome 中运行良好 h
  • __del__ 在程序结束时

    假设有一个程序 在运行时其中有几个对象 程序结束时是否调用每个对象的 del 方法 如果是的话 我可以做这样的事情 class Client del self disconnect from server 有许多潜在的困难 http doc
  • 从非托管 C++ 创建 DLL

    我目前有一个用非托管 C 编写的控制台应用程序 源代码由一个入口点组成main以及其他一些功能 我需要从此代码创建一个 DLL 以便我可以从其他项目 特别是托管 C 使用它 另一个问题 我是否必须为此目的编写一个包装类 由于我对托管 非托管
  • 如何使用 FastAPI 返回 HTMLResponse

    是否可以在端点显示 HTML 文件 例如用户正在访问的主页 是的 FastAPI 可能有HTMLResponse 您可以返回一个HTMLResponse from fastapi import FastAPI from fastapi re
  • 无法修改函数以独立工作而不是依赖于返回的结果

    我用 python 编写了一个脚本 在向某些链接发送请求时使用代理 以便从那里解析产品名称 我目前的尝试完美地完成了这项工作 这个功能parse product 完全依赖于返回的结果 代理 以便以正确的方式重用相同的代理 我正在尝试修改pa
  • 当网格项与末端/底部对齐时,滚动不起作用

    我想使用创建聊天CSS grid并遇到了我无法合并的问题align self end and overflow y auto The ul包含所有消息并且应该与底部对齐 这样即使只有一条消息 它也会出现在底部 聊天的页眉和页脚是固定的 您只