导航栏
一个功能强大、响应式的导航标题,即导航栏。包括对品牌、导航等的支持。
概述
在开始使用导航栏之前,您需要了解以下内容
- 使用
expand
属性来允许在较低断点处折叠Navbar
。 Navbar
及其内容默认情况下是流动的。使用可选的 容器 来限制其水平宽度。- 使用间距和 flex 实用程序来调整内容的大小和位置
一个响应式导航头部,包括对品牌、导航等的支持。以下是一个响应式浅色主题导航栏的示例,它在 lg(大)断点处自动折叠,其中包含所有子组件。
import Container from 'react-bootstrap/Container';import Nav from 'react-bootstrap/Nav';import Navbar from 'react-bootstrap/Navbar';import NavDropdown from 'react-bootstrap/NavDropdown';function BasicExample() {return (<Navbar expand="lg" className="bg-body-tertiary"><Container><Navbar.Brand href="#home">React-Bootstrap</Navbar.Brand><Navbar.Toggle aria-controls="basic-navbar-nav" /><Navbar.Collapse id="basic-navbar-nav"><Nav className="me-auto"><Nav.Link href="#home">Home</Nav.Link><Nav.Link href="#link">Link</Nav.Link><NavDropdown title="Dropdown" id="basic-nav-dropdown"><NavDropdown.Item href="#action/3.1">Action</NavDropdown.Item><NavDropdown.Item href="#action/3.2">Another action</NavDropdown.Item><NavDropdown.Item href="#action/3.3">Something</NavDropdown.Item><NavDropdown.Divider /><NavDropdown.Item href="#action/3.4">Separated link</NavDropdown.Item></NavDropdown></Nav></Navbar.Collapse></Container></Navbar>);}export default BasicExample;
品牌
一个简单的灵活品牌组件。支持图像,但可能需要自定义样式才能正常工作。
import Container from 'react-bootstrap/Container';import Navbar from 'react-bootstrap/Navbar';function BrandExample() {return (<><Navbar className="bg-body-tertiary"><Container><Navbar.Brand href="#home">Brand link</Navbar.Brand></Container></Navbar><br /><Navbar className="bg-body-tertiary"><Container><Navbar.Brand>Brand text</Navbar.Brand></Container></Navbar><br /><Navbar className="bg-body-tertiary"><Container><Navbar.Brand href="#home"><imgsrc="/img/logo.svg"width="30"height="30"className="d-inline-block align-top"alt="React Bootstrap logo"/></Navbar.Brand></Container></Navbar><br /><Navbar className="bg-body-tertiary"><Container><Navbar.Brand href="#home"><imgalt=""src="/img/logo.svg"width="30"height="30"className="d-inline-block align-top"/>{' '}React Bootstrap</Navbar.Brand></Container></Navbar></>);}export default BrandExample;
表单
在导航栏中使用 <Form inline>
和各种表单控件。使用实用程序类根据需要对齐内容。
import Navbar from 'react-bootstrap/Navbar';import Form from 'react-bootstrap/Form';import Button from 'react-bootstrap/Button';import InputGroup from 'react-bootstrap/InputGroup';import Row from 'react-bootstrap/Row';import Col from 'react-bootstrap/Col';function FormExample() {return (<Navbar className="bg-body-tertiary justify-content-between"><Form inline><InputGroup><InputGroup.Text id="basic-addon1">@</InputGroup.Text><Form.Controlplaceholder="Username"aria-label="Username"aria-describedby="basic-addon1"/></InputGroup></Form><Form inline><Row><Col xs="auto"><Form.Controltype="text"placeholder="Search"className=" mr-sm-2"/></Col><Col xs="auto"><Button type="submit">Submit</Button></Col></Row></Form></Navbar>);}export default FormExample;
文本和非导航链接
松散的文本和链接可以包装在 Navbar.Text
中,以便正确垂直对齐。
import Container from 'react-bootstrap/Container';import Navbar from 'react-bootstrap/Navbar';function TextLinkExample() {return (<Navbar className="bg-body-tertiary"><Container><Navbar.Brand href="#home">Navbar with text</Navbar.Brand><Navbar.Toggle /><Navbar.Collapse className="justify-content-end"><Navbar.Text>Signed in as: <a href="#login">Mark Otto</a></Navbar.Text></Navbar.Collapse></Container></Navbar>);}export default TextLinkExample;
配色方案
主题导航栏从未如此简单,这得益于主题类和背景颜色实用程序的结合。从 variant="light"
(用于浅色背景)或 variant="dark"
(用于深色背景)中选择。然后,使用 bg
属性或任何自定义 css 进行自定义!
Bootstrap v5.3.0 中引入了颜色模式,组件的深色变体已弃用。不要添加 variant="dark"
,而是在 Navbar
上设置 data-bs-theme="dark"
。
import Container from 'react-bootstrap/Container';import Nav from 'react-bootstrap/Nav';import Navbar from 'react-bootstrap/Navbar';function ColorSchemesExample() {return (<><Navbar bg="dark" data-bs-theme="dark"><Container><Navbar.Brand href="#home">Navbar</Navbar.Brand><Nav className="me-auto"><Nav.Link href="#home">Home</Nav.Link><Nav.Link href="#features">Features</Nav.Link><Nav.Link href="#pricing">Pricing</Nav.Link></Nav></Container></Navbar><br /><Navbar bg="primary" data-bs-theme="dark"><Container><Navbar.Brand href="#home">Navbar</Navbar.Brand><Nav className="me-auto"><Nav.Link href="#home">Home</Nav.Link><Nav.Link href="#features">Features</Nav.Link><Nav.Link href="#pricing">Pricing</Nav.Link></Nav></Container></Navbar><br /><Navbar bg="light" data-bs-theme="light"><Container><Navbar.Brand href="#home">Navbar</Navbar.Brand><Nav className="me-auto"><Nav.Link href="#home">Home</Nav.Link><Nav.Link href="#features">Features</Nav.Link><Nav.Link href="#pricing">Pricing</Nav.Link></Nav></Container></Navbar></>);}export default ColorSchemesExample;
容器
虽然不是必需的,但你可以将导航栏包装在 <Container>
组件中,以将其居中在页面上,或者在其中添加一个,以仅将 固定或静态顶部导航栏 的内容居中。
import Container from 'react-bootstrap/Container';import Navbar from 'react-bootstrap/Navbar';function ContainerOutsideExample() {return (<Container><Navbar expand="lg" className="bg-body-tertiary"><Container><Navbar.Brand href="#">Navbar</Navbar.Brand></Container></Navbar></Container>);}export default ContainerOutsideExample;
当容器位于导航栏内时,其水平填充将在低于指定 expand={'sm' | 'md' | 'lg' | 'xl' | 'xxl'}
属性的断点处移除。这确保在导航栏折叠时,我们不会在较低的视窗上不必要地重复填充。
import Container from 'react-bootstrap/Container';import Navbar from 'react-bootstrap/Navbar';function ContainerInsideExample() {return (<Navbar expand="lg" className="bg-body-tertiary"><Container><Navbar.Brand href="#">Navbar</Navbar.Brand></Container></Navbar>);}export default ContainerInsideExample;
位置
您可以使用 Bootstrap 的 定位实用程序 将导航栏放置在非静态位置。可以选择固定到顶部、固定到底部,或粘贴到顶部(与页面一起滚动,直到到达顶部,然后保持在那里),或粘贴到底部(与页面一起滚动,直到到达底部,然后保持在那里)。
固定导航栏使用 position: fixed
,这意味着它们从 DOM 的正常流程中拉出,可能需要自定义 CSS(例如,<body>
上的 padding-top
)以防止与其他元素重叠。
由于这些定位需求对于导航栏来说非常常见,因此我们为它们添加了便利道具。
固定顶部
<Navbar fixed="top" />
固定底部
<Navbar fixed="bottom" />
粘贴顶部
<Navbar sticky="top" />
粘贴底部
<Navbar sticky="bottom" />
滚动
您可以在 <Nav>
中使用 navbarScroll
道具来启用折叠导航栏的可切换内容内的垂直滚动。有关更多信息,请参阅 Bootstrap 文档。
import Button from 'react-bootstrap/Button';import Container from 'react-bootstrap/Container';import Form from 'react-bootstrap/Form';import Nav from 'react-bootstrap/Nav';import Navbar from 'react-bootstrap/Navbar';import NavDropdown from 'react-bootstrap/NavDropdown';function NavScrollExample() {return (<Navbar expand="lg" className="bg-body-tertiary"><Container fluid><Navbar.Brand href="#">Navbar scroll</Navbar.Brand><Navbar.Toggle aria-controls="navbarScroll" /><Navbar.Collapse id="navbarScroll"><NavclassName="me-auto my-2 my-lg-0"style={{ maxHeight: '100px' }}navbarScroll><Nav.Link href="#action1">Home</Nav.Link><Nav.Link href="#action2">Link</Nav.Link><NavDropdown title="Link" id="navbarScrollingDropdown"><NavDropdown.Item href="#action3">Action</NavDropdown.Item><NavDropdown.Item href="#action4">Another action</NavDropdown.Item><NavDropdown.Divider /><NavDropdown.Item href="#action5">Something else here</NavDropdown.Item></NavDropdown><Nav.Link href="#" disabled>Link</Nav.Link></Nav><Form className="d-flex"><Form.Controltype="search"placeholder="Search"className="me-2"aria-label="Search"/><Button variant="outline-success">Search</Button></Form></Navbar.Collapse></Container></Navbar>);}export default NavScrollExample;
响应式行为
使用 expand
道具以及 Navbar.Toggle
和 Navbar.Collapse
组件来控制内容何时在按钮后面折叠。
设置 defaultExpanded
道具以使导航栏从展开状态开始。设置 collapseOnSelect
以使导航栏在用户选择项目时自动折叠。您还可以使用 expanded
和 onToggle
道具来精细控制折叠行为。
注意!您 **需要** 为 expand
提供一个断点值,以便导航栏能够折叠。
import Container from 'react-bootstrap/Container';import Nav from 'react-bootstrap/Nav';import Navbar from 'react-bootstrap/Navbar';import NavDropdown from 'react-bootstrap/NavDropdown';function CollapsibleExample() {return (<Navbar collapseOnSelect expand="lg" className="bg-body-tertiary"><Container><Navbar.Brand href="#home">React-Bootstrap</Navbar.Brand><Navbar.Toggle aria-controls="responsive-navbar-nav" /><Navbar.Collapse id="responsive-navbar-nav"><Nav className="me-auto"><Nav.Link href="#features">Features</Nav.Link><Nav.Link href="#pricing">Pricing</Nav.Link><NavDropdown title="Dropdown" id="collapsible-nav-dropdown"><NavDropdown.Item href="#action/3.1">Action</NavDropdown.Item><NavDropdown.Item href="#action/3.2">Another action</NavDropdown.Item><NavDropdown.Item href="#action/3.3">Something</NavDropdown.Item><NavDropdown.Divider /><NavDropdown.Item href="#action/3.4">Separated link</NavDropdown.Item></NavDropdown></Nav><Nav><Nav.Link href="#deets">More deets</Nav.Link><Nav.Link eventKey={2} href="#memes">Dank memes</Nav.Link></Nav></Navbar.Collapse></Container></Navbar>);}export default CollapsibleExample;
画布
使用 offcanvas 组件将您扩展和折叠的导航栏转换为一个 offcanvas 抽屉。我们扩展了 offcanvas 的默认样式,并使用 expand
属性来创建一个动态且灵活的导航侧边栏。
在下面的示例中,要创建一个在所有断点处始终折叠的 offcanvas 导航栏,请将 expand
属性设置为 false
。
import Button from 'react-bootstrap/Button';import Container from 'react-bootstrap/Container';import Form from 'react-bootstrap/Form';import Nav from 'react-bootstrap/Nav';import Navbar from 'react-bootstrap/Navbar';import NavDropdown from 'react-bootstrap/NavDropdown';import Offcanvas from 'react-bootstrap/Offcanvas';function OffcanvasExample() {return (<>{[false, 'sm', 'md', 'lg', 'xl', 'xxl'].map((expand) => (<Navbar key={expand} expand={expand} className="bg-body-tertiary mb-3"><Container fluid><Navbar.Brand href="#">Navbar Offcanvas</Navbar.Brand><Navbar.Toggle aria-controls={`offcanvasNavbar-expand-${expand}`} /><Navbar.Offcanvasid={`offcanvasNavbar-expand-${expand}`}aria-labelledby={`offcanvasNavbarLabel-expand-${expand}`}placement="end"><Offcanvas.Header closeButton><Offcanvas.Title id={`offcanvasNavbarLabel-expand-${expand}`}>Offcanvas</Offcanvas.Title></Offcanvas.Header><Offcanvas.Body><Nav className="justify-content-end flex-grow-1 pe-3"><Nav.Link href="#action1">Home</Nav.Link><Nav.Link href="#action2">Link</Nav.Link><NavDropdowntitle="Dropdown"id={`offcanvasNavbarDropdown-expand-${expand}`}><NavDropdown.Item href="#action3">Action</NavDropdown.Item><NavDropdown.Item href="#action4">Another action</NavDropdown.Item><NavDropdown.Divider /><NavDropdown.Item href="#action5">Something else here</NavDropdown.Item></NavDropdown></Nav><Form className="d-flex"><Form.Controltype="search"placeholder="Search"className="me-2"aria-label="Search"/><Button variant="outline-success">Search</Button></Form></Offcanvas.Body></Navbar.Offcanvas></Container></Navbar>))}</>);}export default OffcanvasExample;