【发布时间】:2021-08-14 05:08:24
【问题描述】:
我有一个引导程序navbar,它在折叠时会显示它之外的项目。折叠时,我有一个div,它作为覆盖整个页面的覆盖层,因此navbar 菜单不会停留在页面的任何内容之上。当我隐藏菜单时会出现问题:div 立即消失,并且在菜单的隐藏过渡期间它停留在页面内容的顶部。
我想保留菜单过渡,那么如何在 div 隐藏时应用过渡?我尝试了很多方法,但它们都只在 div 显示时应用过渡,而不是在隐藏时应用。
请查看此演示:https://codesandbox.io/s/d31eo
反应(演示):
import React, { Component } from "react";
import { Container, Nav, Navbar } from "react-bootstrap";
import "./styles.css";
import "bootstrap/dist/css/bootstrap.min.css";
export default class NavBar extends Component {
constructor(props) {
super(props);
this.state = {
open: false,
data: []
};
}
componentDidMount() {
this.setState({
data: [
{ name: "Test1" },
{ name: "Test2" },
{ name: "Test3" },
{ name: "Test4" }
]
});
}
onClick = () => {
this.setState({ open: !this.state.open });
};
render() {
return (
<>
<Navbar
className={`nav ${this.state.open ? "open" : ""}`}
expand="lg"
sticky="top"
>
<Container>
<Navbar.Toggle aria-controls="navbar-menu" onClick={this.onClick} />
<Navbar.Collapse id="navbar-menu">
<Nav className="ml-auto">
{this.state.data.map((category) => (
<Nav.Link href="#" key={`category-${category.name}`}>
<span className="link">{category.name}</span>
</Nav.Link>
))}
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>
<div className={`overlay ${this.state.open ? "open" : ""}`} />
<img src="https://images.unsplash.com/reserve/bOvf94dPRxWu0u3QsPjF_tree.jpg?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MXwxMjA3fDB8MXxzZWFyY2h8Nnx8bmF0dXJhbHx8MHx8fA&ixlib=rb-1.2.1&q=80&w=1080" />
</>
);
}
}
CSS(演示):
.nav {
min-height: 55px;
width: 100%;
background-color: white;
border-bottom: 1px solid #979797;
}
.link {
font-size: 14px;
color: #3e433e;
line-height: 17px;
padding: 5px;
text-transform: uppercase;
}
.link:hover {
color: #000000;
text-decoration: none;
}
.overlay {
position: fixed;
}
@media (max-width: 1170px) {
.collapsing {
position: absolute !important;
z-index: 3;
width: 100%;
top: 75px;
}
.collapse.show {
display: block;
position: absolute;
z-index: 3;
width: 100%;
top: 75px;
}
.overlay.open {
height: 100%;
width: 100%;
position: fixed;
z-index: 2;
top: 55px; /* navbar min-heigth */
left: 0;
background-color: white;
}
}
【问题讨论】:
-
引导页面上的第一个演示是否与您想要的输出不同? getbootstrap.com/docs/4.0/components/navbar
-
是的!我想在导航栏之外显示可折叠的内容。您可以查看演示以了解我在说什么:)
-
好的!我想你可以从上面复制演示代码
-
如果答案不起作用,则不确定问题是否清楚。你能试着更简洁地总结一下吗?为什么导航栏项目显示在外面?为什么会有 div 覆盖?你能对你想要达到的目标给出一个简单的非技术解释吗?
-
我不知道如何更简洁,真诚。我只想修复 CSS 过渡。简明扼要。导航栏项目显示在外部,因为这是设计的先决条件。 div 覆盖只是我的一个想法,我想应该有一种方法来实现我想要的没有它。我能想到的最简单的解释:添加一个过渡,以便在我切换菜单时导航栏项目不会与页面内容重叠。
标签: css reactjs bootstrap-4