Чтобы получить отзывчивое покрытие для тела, вы можете использовать sth. как это (например ES6):
import ReactDOM from 'react-dom';
import React from 'react';
import { Navbar, Nav, NavItem } from 'react-bootstrap';
export default class Template extends React.Component {
constructor(props) {
super(props);
this.state = { navHeight: 50 };
this.handleResize = this.handleResize.bind(this);
}
handleResize(e = null) {
this.setState({ navHeight: ReactDOM.findDOMNode(this._navbar).offsetHeight });
}
componentDidMount() {
window.addEventListener('resize', this.handleResize);
this.handleResize();
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize);
}
render() {
return (
<body style={{paddingTop: this.state.navHeight}}>
<Navbar ref={(e) => this._navbar = e} fixedTop>
<Navbar.Header>
<Navbar.Brand>
<Link to="/">Some title</Link>
</Navbar.Brand>
</Navbar.Header>
<Nav>
<NavItem eventKey={1} href="/link1">Link1</NavItem>
<NavItem eventKey={2} href="/link2">Link2</NavItem>
</Nav>
</Navbar>
<main>
{this.props.children}
</main>
</body>
);
}
}
Template.propTypes = {
navHeight: React.PropTypes.number,
children: React.PropTypes.object,
};
Таким образом, ваш <body>
обивка-топ всегда будет соответствовать вашей высоте NavBar даже после добавления новых ссылок в мобильном режиме. Я также предполагаю, что высота основания 50px (см. Конструктор), но это не имеет значения, если вы звоните this.handleResize()
в componentDidMount()
.
Это приятно, если вам не нужна отзывчивость. Для гибкого дизайна вы должны динамически определять высоту Navbar и настраивать «padding-top» в соответствии с текущим значением высоты Navbar. – jmarceli