css - 如果包含长文本并弄乱响应隐藏,则 Bootstrap 4 固定列崩溃
问题描述
我为此发疯了,我似乎无法找出为什么会发生这种情况。我对引导程序并不那么先进,但我认为没关系,我已经尝试了很多不同的方法。
所以我在卡片内有一个聊天框,有一列应该尝试占据整个卡片宽度,右侧是 col-2,其中包含在较小屏幕上消失的用户列表(d-none d-lg-block
) -user 块,就像在 Discord 中一样。每个消息块由一个 col-xs-1 组成,其中包含用户头像,然后是一个用于实际消息的全宽列。
虽然一切似乎都很好,但当其中一条消息很长时,消息列会以某种方式折叠在较小屏幕上的头像列下方。它还会导致响应式用户列出现问题,在到达 d-none 断点之前,它会被推到另一个固定宽度的列下。当一条消息很长时,它无论如何都会在所有屏幕尺寸上被推送到那里。我尝试了断字、溢出等,但没有任何运气。这个词被分解成碎片,但它仍然会引起问题。
您可以在 bootply 上查看代码:https ://www.bootply.com/KmwTGY86yu 或作为片段
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<div class="container">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
Card header
</div>
<div class="card-body">
<div class="row">
<div class="col">
<!-- full-width column for message box -->
<div class="container-fluid" style="overflow-y: auto; overflow-x: hidden">
<!-- start of messages box -->
<div class="row">
<!-- message block -->
<div class="col-xs-1">
<div style="height: 40px; width: 40px; border-radius: 100%; background-color: black"></div>
</div>
<div class="col">
<h5 class="text-danger float-left">Username</h5>
<small class="text-muted float-right">timestamp</small>
<div class="clearfix"></div>
<div>
This is a single message
</div>
<div>
This is another single message
</div>
</div>
<hr class="w-100">
</div>
<div class="row">
<div class="col-xs-1">
<div style="height: 40px; width: 40px; border-radius: 100%; background-color: black"></div>
</div>
<div class="col">
<h5 class="text-danger float-left">Username 2</h5>
<small class="text-muted float-right">timestamp</small>
<div class="clearfix"></div>
<div>
This is a third message
</div>
<div>
ASNDJKASJDAJDKLAJLADSAJLKASDJLAKSJDKLSAJDLKAJKALDJKLJDLADJLASJDLKSAJDASJDLASDASDASDASDASA
</div>
</div>
<hr class="w-100">
</div>
<div class="row">
<!-- message block -->
<div class="col-xs-1">
<div style="height: 40px; width: 40px; border-radius: 100%; background-color: black"></div>
</div>
<div class="col">
<h5 class="text-danger float-left">Username</h5>
<small class="text-muted float-right">timestamp</small>
<div class="clearfix"></div>
<div>
This is a single message
</div>
<div>
This is another single message
</div>
</div>
<hr class="w-100">
</div>
</div>
<!-- end messages box -->
</div>
<div class="col-2 d-none d-lg-block">
Users bar, gets pushed under first column before disappearing when one of messages is too long
</div>
</div>
</div>
</div>
</div>
</div>
</div>
只需在另一个窗口中打开它并将其调整为更小的尺寸。
解决方案
如我所见,您使用 Bootstrap 4。而不是col-xs-1
使用col-1
,而不是col
,使用col-11
(或col-10
offset-1
在头像和消息之间拉开距离)
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<div class="container">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
Card header
</div>
<div class="card-body">
<div class="row">
<div class="col">
<!-- full-width column for message box -->
<div class="container-fluid" style="overflow-y: auto; overflow-x: hidden">
<!-- start of messages box -->
<div class="row">
<!-- message block -->
<div class="col-1">
<div style="height: 40px; width: 40px; border-radius: 100%; background-color: black"></div>
</div>
<div class="col-10 offset-1">
<h5 class="text-danger float-left">Username</h5>
<small class="text-muted float-right">timestamp</small>
<div class="clearfix"></div>
<div>
This is a single message
</div>
<div>
This is another single message
</div>
</div>
<hr class="w-100">
</div>
<div class="row">
<div class="col-1">
<div style="height: 40px; width: 40px; border-radius: 100%; background-color: black"></div>
</div>
<div class="col-10 offset-1">
<h5 class="text-danger float-left">Username 2</h5>
<small class="text-muted float-right">timestamp</small>
<div class="clearfix"></div>
<div>
This is a third message
</div>
<div>
ASNDJKASJDAJDKLAJLADSAJLKASDJLAKSJDKLSAJDLKAJKALDJKLJDLADJLASJDLKSAJDASJDLASDASDASDASDASA
</div>
</div>
<hr class="w-100">
</div>
<div class="row">
<!-- message block -->
<div class="col-1">
<div style="height: 40px; width: 40px; border-radius: 100%; background-color: black"></div>
</div>
<div class="col-10 offset-1">
<h5 class="text-danger float-left">Username</h5>
<small class="text-muted float-right">timestamp</small>
<div class="clearfix"></div>
<div>
This is a single message
</div>
<div>
This is another single message
</div>
</div>
<hr class="w-100">
</div>
</div>
<!-- end messages box -->
</div>
<div class="col-2 d-none d-lg-block">
Users bar, gets pushed under first column before disappearing when one of messages is too long
</div>
</div>
</div>
</div>
</div>
</div>
</div>
推荐阅读
- bash - 使用文本文件中的列表重命名目录中的文件
- android - 检查房间中是否已经存在对象
- c# - 是否可以在非静态类中进行扩展?
- node.js - 将 zip 文件从 reactjs 上传到 nodejs
- bash - 如何正确组合“xargs”、“bash -c”和环境变量?
- asp.net-core - 如何通过 Moq 验证扩展方法
- ios - self 何时保留闭包?
- asp.net - 将数据从一个视图传输到另一个视图
- javascript - textarea 值更新而不删除之前的 Javascript
- r - 为什么这个命令在手写时有效,但从 data.table 中提取相同的输入时无效