Bootstrap 4 - 显示一个 div 并使用单个按钮操作隐藏另一个
Bootstrap 4 - Show one div and hide another one with single button action
我的目的是 display:none "DIV1" 并显示 "display:flex;" "DIV2",只需在按钮上执行一个操作。
我认为最好的方法是使用这个:https://getbootstrap.com/docs/4.0/components/collapse/#multiple-targets
但我不知道该怎么做。
目前,我编写了这段代码,但我认为当我们使用 Bootstrap 时,这不是最佳实践:
CSS
@media (max-width: 576px)
DIV1.openFrame {
display:flex;
}
@media (max-width: 576px)
DIV1.closeFrame {
display:none;
}
@media (max-width: 576px)
DIV2.openFrame {
display:flex;
}
@media (max-width: 576px)
DIV2.closeFrame {
display:none;
}
JAVASCRIPT(类似这样)
function toggleMenu() {
// Something in JQuery
$(".DIV1").toggleClass("openFrame")
$(".DIV2").toggleClass("closeFrame")
// OR
$(".DIV1").toggleClass("closeFrame")
$(".DIV2").toggleClass("openFrame")
}
HTML
<div class="container">
<div class="row">
<div class="col d-flex DIV1">
1 of 2
</div>
<div class="col d-flex DIV2">
2 of 2
</div>
</div>
</div>
<button class="btn" type="button" onClick="toggleMenu()">
>
</button>
编辑:
我对多目标解决方案的尝试:
<p>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse show" id="multiCollapseExample1">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample2">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
</div>
</div>
问题是第一个方块即使有 display:none 也不会消失(我不想要左边的空闲 space)。
非常重要的是,我希望在到达 "md" 断点时所有块都可见。这就是为什么我在 CSS @media (max-width: 576px) 中为 DIV1 和 DIV2 使用媒体查询。
起初你的 CSS
类 有问题。应该是这样的:
.DIV1.openFrame {
display:flex;
}
...
note the dot infront if DIV1
. This is needed since DIV1
is a class, instead of a HTML-Tag (for example: <DIV1></DIV1>
).
下一个问题是,您在函数的每一行都缺少 ;
function toggleMenu() {
$(".DIV1").toggleClass("openFrame");
...
最后但同样重要的是,不需要创建新的 类,因为您可以 d-flex
您也可以使用 d-none
使用 bootstrap4。
you give d-flex
to the div you want to show initially, and d-none
to the div you want to hide. After that you could toggle both classes inside your function.
这是一个工作示例:
function toggleMenu() {
$(".DIV1").toggleClass("d-none");
$(".DIV2").toggleClass("d-flex");
$(".DIV1").toggleClass("d-flex");
$(".DIV2").toggleClass("d-none");
}
.row {
background: #f8f9fa;
margin-top: 20px;
}
.col {
border: solid 1px #6c757d;
padding: 10px;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="container">
<div class="row">
<div class="col d-none DIV1">
1 of 2
</div>
<div class="col d-flex DIV2">
2 of 2
</div>
</div>
</div>
<button class="btn" type="button" onClick="toggleMenu()">
>
</button>
我的目的是 display:none "DIV1" 并显示 "display:flex;" "DIV2",只需在按钮上执行一个操作。 我认为最好的方法是使用这个:https://getbootstrap.com/docs/4.0/components/collapse/#multiple-targets 但我不知道该怎么做。
目前,我编写了这段代码,但我认为当我们使用 Bootstrap 时,这不是最佳实践:
CSS
@media (max-width: 576px)
DIV1.openFrame {
display:flex;
}
@media (max-width: 576px)
DIV1.closeFrame {
display:none;
}
@media (max-width: 576px)
DIV2.openFrame {
display:flex;
}
@media (max-width: 576px)
DIV2.closeFrame {
display:none;
}
JAVASCRIPT(类似这样)
function toggleMenu() {
// Something in JQuery
$(".DIV1").toggleClass("openFrame")
$(".DIV2").toggleClass("closeFrame")
// OR
$(".DIV1").toggleClass("closeFrame")
$(".DIV2").toggleClass("openFrame")
}
HTML
<div class="container">
<div class="row">
<div class="col d-flex DIV1">
1 of 2
</div>
<div class="col d-flex DIV2">
2 of 2
</div>
</div>
</div>
<button class="btn" type="button" onClick="toggleMenu()">
>
</button>
编辑:
我对多目标解决方案的尝试:
<p>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse show" id="multiCollapseExample1">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample2">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
</div>
</div>
问题是第一个方块即使有 display:none 也不会消失(我不想要左边的空闲 space)。 非常重要的是,我希望在到达 "md" 断点时所有块都可见。这就是为什么我在 CSS @media (max-width: 576px) 中为 DIV1 和 DIV2 使用媒体查询。
起初你的 CSS
类 有问题。应该是这样的:
.DIV1.openFrame {
display:flex;
}
...
note the dot infront if
DIV1
. This is needed sinceDIV1
is a class, instead of a HTML-Tag (for example:<DIV1></DIV1>
).
下一个问题是,您在函数的每一行都缺少 ;
function toggleMenu() {
$(".DIV1").toggleClass("openFrame");
...
最后但同样重要的是,不需要创建新的 类,因为您可以 d-flex
您也可以使用 d-none
使用 bootstrap4。
you give
d-flex
to the div you want to show initially, andd-none
to the div you want to hide. After that you could toggle both classes inside your function.
这是一个工作示例:
function toggleMenu() {
$(".DIV1").toggleClass("d-none");
$(".DIV2").toggleClass("d-flex");
$(".DIV1").toggleClass("d-flex");
$(".DIV2").toggleClass("d-none");
}
.row {
background: #f8f9fa;
margin-top: 20px;
}
.col {
border: solid 1px #6c757d;
padding: 10px;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="container">
<div class="row">
<div class="col d-none DIV1">
1 of 2
</div>
<div class="col d-flex DIV2">
2 of 2
</div>
</div>
</div>
<button class="btn" type="button" onClick="toggleMenu()">
>
</button>