提问人:mdolnik 提问时间:11/18/2023 最后编辑:Xab Ionmdolnik 更新时间:11/21/2023 访问量:67
如何在移动设备的中央内容列之间移动侧边栏列?
How can I move a sidebar column between central content columns for mobile?
问:
我希望有一种情况,即我具有以下元素:
- 左侧边栏
- 事由
- 右侧边栏
- 额外内容
我想要完成的是:
- 在较大的屏幕上展开时:将“额外内容”排在主内容的正下方,并共享相同的宽度,主要内容和额外内容之间没有间隙。
- 在小屏幕上折叠时:让所有元素以全宽垂直堆叠,但右侧边栏应位于“主要内容”和“额外内容”之间。
到目前为止,我的尝试:
.row {
background: #dfdfdf;
}
.col {
background: #f8f9fa;
border: solid 1px #6c757d;
padding: 10px;
}
.tall {
height: 100px;
}
.xtall {
height: 200px;
}
.container.my-size .row {
margin-top: 30px;
}
.container.my-size .row .col {
background: #cdceff;
}
#sidebar-right {
float: right;
}
#main {
background: #ffeecd;
}
#extra {
background: #ffeecd;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
<div class="container my-grids">
<div class="row flex-column flex-sm-row">
<div id="sidebar-left" class="col col-sm-3 order-sm-1 align-self-baseline">
<div class="tall">Left Sidebar</div>
</div>
<div id="main" class="col col-sm-6 order-sm-2 align-self-baseline">
<div class="">Main Content</div>
</div>
<div id="sidebar-right" class="col col-sm-3 order-sm-3 align-self-baseline">
<div class="tall">Right Sidebar</div>
</div>
<div id="extra" class="col col-sm-6 order-sm-4 align-self-baseline">
<div class="">Extra Content</div>
</div>
</div>
</div>
<!-- Have a row which displays the current screen size -->
<div class="container my-size">
<div class="row">
<div class="col col-md-12 d-xs-block d-sm-none">Screen is <b>xs</b></div>
<div class="col col-md-12 d-none d-sm-block d-md-none">Screen is <b>sm</b></div>
<div class="col col-md-12 d-none d-md-block d-lg-none">Screen is <b>md</b></div>
<div class="col col-md-12 d-none d-lg-block d-xl-none">Screen is <b>lg</b></div>
<div class="col col-md-12 d-none d-xl-block d-xxl-none">Screen is <b>xl</b></div>
<div class="col col-md-12 d-none d-xxl-block">Screen is <b>xxl</b></div>
</div>
</div>
目前正在发生的事情:
我想发生的事情:
我目前正在使用 Bootstrap 3,在 Bootstrap 3 中有一个解决方案是理想的,但如果这是唯一的方法,我愿意有一个 Bootstrap 4/5 解决方案。
答:
0赞
Arleigh Hix
11/18/2023
#1
使其正常工作的最简单方法是在另一个元素中复制内容,并显示/隐藏断点的相应内容。#extra
<div class="container my-grids">
<div class="row">
<div id="sidebar-left" class="col-sm-3 align-self-baseline">
<div class="tall">Left Sidebar</div>
</div>
<div class="col-sm-6 align-self-baseline py-0">
<div class="row">
<div id="main" class="col-12 align-self-baseline">
<div class="">Main Content</div>
</div>
<div id="extra" class="col-12 d-none d-sm-block">
<div class="">Extra Content</div>
</div>
</div>
</div>
<div id="sidebar-right" class="col-sm-3 align-self-baseline">
<div class="tall">Right Sidebar</div>
</div>
<div id="extra-extra" class="col-12 d-block d-sm-none">
<!-- repeat extra content here or use js to copy -->
</div>
</div>
</div>
你可以只使用一点jQuery来复制内容:
(注意不要使用内部,因为它会创建一个无效的重复项)id
#extra
$(document).ready(() => {
$('#extra-extra').html($('#extra').html())
})
https://jsfiddle.net/chan_omega/rkqz81bc/
https://getbootstrap.com/docs/3.4/css/#grid-example-basic https://getbootstrap.com/docs/3.4/css/#grid-nesting
评论
0赞
mdolnik
11/19/2023
感谢您的回复,我确实认为这是一个想法,但由于您指出的一些潜在问题(例如重复的 ID,需要确保两个元素都动态更新,如果页面加载后发生任何变化,请避免使用任何重复的元素等)。
0赞
mdolnik
11/20/2023
#2
想出了如何做到这一点。
所做的更改:
- 移动 、 并进入新的“内部容器”
Main Content
Extra Content
Right Sidebar
- 将此内部容器设置为在较大屏幕上占据除“第一列”之外的其余列,在较小的屏幕上占据全宽。
- 将内部容器中的元素设置为使用浮点数和列样式来确定其宽度,但禁用弹性框。
.row {
background: #dfdfdf;
}
.col {
background: #f8f9fa;
border: solid 1px #6c757d;
padding: 10px;
}
.tall {
height: 100px;
}
.xtall {
height: 200px;
}
.container.my-size .row {
margin-top: 30px;
}
.container.my-size .row .col {
background: #cdceff;
}
#sidebar-right {
float: right;
}
#main {
background: #ffeecd;
float: left;
}
#extra {
background: #ffeecd;
float: left;
}
#inner-container {
padding: 0;
}
#inner-container .col {
flex: none;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet" />
<div class="container my-grids">
<div class="row flex-column flex-sm-row">
<div id="sidebar-left" class="col col-sm-3 align-self-baseline">
<div class="tall">Left Sidebar</div>
</div>
<div id="inner-container" class="col col-sm-9">
<div id="main" class="col col-sm-8">
<div class="xtall">Main Content</div>
</div>
<div id="sidebar-right" class="col col-sm-4">
<div class="tall">Right Sidebar</div>
</div>
<div id="extra" class="col col-sm-8">
<div class="">Extra Content</div>
</div>
</div>
</div>
</div>
<!-- Have a row which displays the current screen size -->
<div class="container my-size">
<div class="row">
<div class="col col-md-12 d-xs-block d-sm-none">Screen is <b>xs</b></div>
<div class="col col-md-12 d-none d-sm-block d-md-none">Screen is <b>sm</b></div>
<div class="col col-md-12 d-none d-md-block d-lg-none">Screen is <b>md</b></div>
<div class="col col-md-12 d-none d-lg-block d-xl-none">Screen is <b>lg</b></div>
<div class="col col-md-12 d-none d-xl-block d-xxl-none">Screen is <b>xl</b></div>
<div class="col col-md-12 d-none d-xxl-block">Screen is <b>xxl</b></div>
</div>
</div>
评论