我正在使用Bootstrap,并且希望实现以下安排:
数字表示我希望如何在移动设备上的单列中对这些div进行排序。我尝试过的HTML在这里:
<div class="col-xs-12">
<div class="flex-row">
<div class="col-md-6">
<div class="order-1">
<!-- TITLE SUBTITLE -->
</div>
<div class="order-md-3">
<!-- FILM META AND CONTENT -->
</div>
</div>
<div class="col-md-6">
<div class="order-md-2">
<!-- FILM POSTER -->
</div>
<div class="order-md-4">
<!-- UNDER POSTER. -->
</div>
</div>
</div>
有人可以告诉我我在做什么错吗?
答案 0 :(得分:2)
您可以使用3种方法:
column-count
最简单的解决方案是将#2和#4复制到左列。在移动设备上的单列模式下,您将显示#2和#4的副本,并使用d-none
隐藏右列。在更大的屏幕上,您用d-md-none
隐藏#2和#4的副本,但用d-md-block
显示右列。
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="card section-1">
<div class="card-body">
<h6 class="card-title">
TITLE SUBTITLE
</h6>
<p>1</p>
</div>
</div>
<div class="card section-2 d-md-none">
<div class="card-body">
<h6 class="card-title">
COPY OF FILM POSTER
</h6>
<p>COPY OF 2</p>
</div>
</div>
<div class="card section-3">
<div class="card-body">
<h6 class="card-title">
FILM META AND CONTENT
</h6>
<p>3</p>
</div>
</div>
<div class="card section-4 d-md-none">
<div class="card-body">
<h6 class="card-title">
COPY OF UNDER POSTER
</h6>
<p>COPY OF 4</p>
</div>
</div>
</div>
<div class="col-md-6 d-none d-md-block">
<div class="card section-2">
<div class="card-body">
<h6 class="card-title">
FILM POSTER
</h6>
<p>2</p>
</div>
</div>
<div class="card section-4">
<div class="card-body">
<h6 class="card-title">
UNDER POSTER
</h6>
<p>4</p>
</div>
</div>
</div>
</div>
</div>
https://jsfiddle.net/davidliang2008/L2cwf4z3/11/
如果项目不在同一行/同一列中,则不能使用order
。这就是为什么您的方法不起作用的原因。但这就是导致此选择#2的原因。
在这里,我将容器设置为在大屏幕上显示为d-md-flex
和flex-md-column
,并确保将其包装为flex-md-wrap
!由于它显示为flex列,因此要对其进行包装,我们需要在容器上设置固定高度。
<div class="container d-md-flex flex-md-column flex-md-wrap">
<div class="card section-1">
<div class="card-body">
<h6 class="card-title">
TITLE SUBTITLE
</h6>
<p>1</p>
</div>
</div>
<div class="card section-2">
<div class="card-body">
<h6 class="card-title">
FILM POSTER
</h6>
<p>2</p>
</div>
</div>
<div class="card section-3">
<div class="card-body">
<h6 class="card-title">
FILM META AND CONTENT
</h6>
<p>3</p>
</div>
</div>
<div class="card section-4">
<div class="card-body">
<h6 class="card-title">
UNDER POSTER
</h6>
<p>4</p>
</div>
</div>
</div>
@media (min-width: 768px) {
.container {
height: 40rem;
}
.card {
width: 45%;
}
.section-3 {
order: 2;
}
.section-2 {
order: 3;
}
.section-4 {
order: 4;
}
}
https://jsfiddle.net/davidliang2008/ypvngd7w/32/
虽然我笑了,但这个选项对我来说就像是骇客
您可以利用CSS3 column-count
功能!我认为这是最干净的方法!
由于使用column-count
,您无法更改项目的顺序,因此您必须先预先安排项目。因此,#3必须排在#2之前。
在较小的屏幕上,您将必须将它们显示为flex-column
,因为您想使用Order
将项目排列为1,2,3,4。
<div class="container">
<div class="card section-1">
<div class="card-body">
<h6 class="card-title">
TITLE SUBTITLE
</h6>
<p>1</p>
</div>
</div>
<div class="card section-3">
<div class="card-body">
<h6 class="card-title">
FILM META AND CONTENT
</h6>
<p>3</p>
</div>
</div>
<div class="card section-2">
<div class="card-body">
<h6 class="card-title">
FILM POSTER
</h6>
<p>2</p>
</div>
</div>
<div class="card section-4">
<div class="card-body">
<h6 class="card-title">
UNDER POSTER
</h6>
<p>4</p>
</div>
</div>
</div>
.card {
text-align: center;
margin-bottom: 1rem;
}
.container {
display: flex;
flex-direction: column;
}
.section-2 {
height: 20rem;
order: 2;
}
.section-3 {
height: 18rem;
order: 3;
}
.section-4 {
order:4;
}
@media (min-width: 768px) {
.container {
display: block;
column-count: 2;
}
.card {
display: inline-block;
width: 100%;
}
}
答案 1 :(得分:1)
最简单解决方案(没有额外的CSS或重复的标记)是在Bootstrap 4中使用“浮点数”。使用d-md-block
类“禁用”在更大的屏幕上,然后在float-*
中定位列。在移动设备上,列将遵循其自然顺序...
<div class="row d-md-block d-flex">
<div class="col-md-6 float-left py-2">
<div class="border">
1
</div>
</div>
<div class="col-md-6 float-right py-2">
<div class="border taller">
2 FILM POSTER
</div>
</div>
<div class="col-md-6 float-left py-2">
<div class="border taller">
3 FILM META AND CONTENT
</div>
</div>
<div class="col-md-6 float-left py-2">
<div class="border">
4
</div>
</div>
</div>
答案 2 :(得分:0)
如果保留相同的html,则可以将显示方式灵活显示为父级,然后设置子级的顺序。使用媒体查询在特定的断点设置顺序即可完成工作。