
本文介绍了如何在使用 Bootstrap 4 构建响应式布局时,使两列在移动设备上折叠成一列后,其高度能够根据内容自适应。通过使用 `@media` 查询和 `display: block!important` 样式,可以有效地解决在没有滚动条时,列高度平均分配的问题,同时保留原有的滚动条功能。
在使用 Bootstrap 4 构建响应式布局时,经常会遇到需要在不同屏幕尺寸下调整列的排列方式和高度的问题。一个常见的场景是,在桌面端,两列并排显示,各自具有滚动条;而在移动端,这两列折叠成一列,垂直排列。在某些情况下,当内容较少,没有滚动条时,这些列可能会平均分配剩余的高度,而不是根据内容自适应。本文将介绍如何解决这个问题,确保在各种情况下列的高度都能正确显示。
假设我们有一个包含 Header、两列内容区域和 Footer 的布局。在桌面端,两列内容区域并排显示,并且可以独立滚动。在移动端,我们希望这两列内容区域折叠成一列,垂直排列,并且高度能够自适应内容。
以下是一个基本的 HTML 结构示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 4 Responsive Columns</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<style>
html,
body {
height: 100%;
}
</style>
</head>
<body>
<div class="container-fluid d-flex flex-column vh-100">
<div class="row border flex-shrink-0">
Header
</div>
<div class="row flex-grow-1 overflow-hidden">
<div class="col-6 mh-100 overflow-auto">
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
</div>
<div class='col-6 mh-100 overflow-auto'>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
</div>
</div>
<div class="row border flex-shrink-0">
Footer
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>在移动端,我们通常会使用 @media 查询来改变列的宽度和溢出属性,使其折叠成一列:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 4 Responsive Columns</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<style>
html,
body {
height: 100%;
}
</style>
</head>
<body>
<div class="container-fluid d-flex flex-column vh-100">
<div class="row border flex-shrink-0">
Header
</div>
<div class="row flex-grow-1 mh-100 overflow-auto">
<div class="col-12 overflow-visible">
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
</div>
<div class='col-12 overflow-visible'>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
</div>
</div>
<div class="row border flex-shrink-0">
Footer
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>然而,当内容不足以产生滚动条时,两列的高度会平均分配,这可能不是我们想要的结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 4 Responsive Columns</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<style>
html,
body {
height: 100%;
}
</style>
</head>
<body>
<div class="container-fluid d-flex flex-column vh-100">
<div class="row border flex-shrink-0">
Header
</div>
<div class="row flex-grow-1 mh-100 overflow-auto">
<div class="col-12 overflow-visible">
Hello
</div>
<div class='col-12 overflow-visible'>
World
</div>
</div>
<div class="row border flex-shrink-0">
Footer
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>为了解决这个问题,我们可以使用 @media 查询在移动端为包含列的 row 元素添加 display: block!important 样式。这将覆盖 Bootstrap 默认的 flexbox 行为,使得列的高度能够根据内容自适应。
以下是修改后的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 4 Responsive Columns</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<style>
html,
body {
height: 100%;
}
@media (max-width: 768px) {
.row.flex-grow-1 {
display: block !important;
}
}
</style>
</head>
<body>
<div class="container-fluid d-flex flex-column vh-100">
<div class="row border flex-shrink-0">
Header
</div>
<div class="row flex-grow-1 mh-100 overflow-auto">
<div class="col-12 overflow-visible">
Hello
</div>
<div class='col-12 overflow-visible'>
World
</div>
</div>
<div class="row border flex-shrink-0">
Footer
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>通过添加以下 CSS 规则,我们可以在屏幕宽度小于或等于 768px 时,将 row 元素的 display 属性设置为 block:
@media (max-width: 768px) {
.row.flex-grow-1 {
display: block !important;
}
}!important 确保这个样式能够覆盖 Bootstrap 默认的样式。
以下是包含滚动条和没有滚动条的完整示例代码,展示了如何使用上述方法来解决问题:
包含滚动条的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 4 Responsive Columns</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<style>
html,
body {
height: 100%;
}
@media (max-width: 768px) {
.row.flex-grow-1 {
display: block !important;
}
}
</style>
</head>
<body>
<div class="container-fluid d-flex flex-column vh-100">
<div class="row border flex-shrink-0">
Header
</div>
<div class="row flex-grow-1 mh-100 overflow-auto">
<div class="col-12 overflow-visible">
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
</div>
<div class='col-12 overflow-visible'>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
World<br>World<br>World<br>World<br>World<br>World<br>World<br>
</div>
</div>
<div class="row border flex-shrink-0">
Footer
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>没有滚动条的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 4 Responsive Columns</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<style>
html,
body {
height: 100%;
}
@media (max-width: 768px) {
.row.flex-grow-1 {
display: block !important;
}
}
</style>
</head>
<body>
<div class="container-fluid d-flex flex-column vh-100">
<div class="row border flex-shrink-0">
Header
</div>
<div class="row flex-grow-1 mh-100 overflow-auto">
<div class="col-12 overflow-visible">
Hello
</div>
<div class='col-12 overflow-visible'>
World
</div>
</div>
<div class="row border flex-shrink-0">
Footer
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>通过使用 @media 查询和 display: block!important 样式,我们可以有效地解决在使用 Bootstrap 4 构建响应式布局时,列高度自适应内容的问题。这种方法既能保证在移动端列的高度根据内容自适应,又能保留原有的滚动条功能。在实际开发中,可以根据具体需求调整 @media 查询的断点值,以适应不同的屏幕尺寸。
以上就是Bootstrap 4:响应式布局中使列高度自适应内容的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号