像 StackOverflow 一样的响应式导航栏
Responsive NavBar like StackOverflow
我正在尝试创建一个响应式导航栏,类似于 Stack Overflow 上的导航栏。我附上了我要实现的布局的图片。
为简单起见,我添加了一些值以使其更易于理解。有封装整个页面的外部 div outer-wrapper
和封装主要内容(导航栏、主要内容和页脚)的主要 div main-wrapper
。
现在假设outer-wrapper
为1000px宽,main-wrapper
为800px宽,则左右各有100px的缓冲区。当 window 缩小时,我希望缓冲区在任何主要内容更改之前用完。
CSS
.outer-wrapper {
width: 100%;
}
.main-wrapper {
width: 800px;
display: flex;
flex-direction: column;
margin-left: auto;
margin-right: auto;
position: relative;
}
.nav-home {
position: fixed;
top: -30px;
left: -30px;
height: 60px;
width: 100%;
padding: 20px 20px 0px 20px;
display: flex;
justify-content: space-around;
}
}
HTML
<div class='outer-wrapper'>
<div class='main-wrapper'>
<div class='nav-bar'>...</div>
<div class='main-content'>...</div>
<div class='footer'>...</div>
</div>
</div>
问题是,当 window 缩小到与 main-wrapper
的宽度相匹配的 800px 时,导航栏中仍然存在左右边距。当左右边距缩小为0时,如何确保导航栏的宽度与主要内容和页脚的宽度匹配?
谢谢。
我从 .nav-bar
class 中删除了您的一些样式,它似乎按照您的要求执行 - 我错过了什么吗?
我添加了颜色以帮助可视化调整大小。
.outer-wrapper {
background-color: yellow;
width: 100%;
}
.main-wrapper {
background-color: blue;
width: 800px;
display: flex;
flex-direction: column;
margin-left: auto;
margin-right: auto;
position: relative;
}
.nav-bar {
background-color: red;
justify-content: space-around;
}
.main-content {
background-color: green;
}
.footer {
background-color: purple;
}
<div class='outer-wrapper'>
<div class='main-wrapper'>
<div class='nav-bar'>Nav Bar</div>
<div class='main-content'>Main Content</div>
<div class='footer'>Footer</div>
</div>
</div>
.outer-wrapper {
width: 100%;
}
.main-wrapper {
width: 800px;
display: flex;
flex-flow: row wrap;
font-weight: bold;
text-align: center;
margin: 0 auto;
}
.main-wrapper > * {
padding: 10px;
flex: 1 100%;
}
.nav-bar {
background: tomato;
}
.footer {
background: lightgreen;
}
.main-content {
background: deepskyblue;
}
.aside-1 {
background: gold;
}
.aside-2 {
background: hotpink;
}
@media all and (min-width: 600px) {
.aside {
flex: 1 0 0;
}
}
@media all and (min-width: 800px) {
.main-content {
flex: 3 0px;
}
.aside-1 {
order: 1;
}
.main-content {
order: 2;
}
.aside-2 {
order: 3;
}
.footer {
order: 4;
}
}
body {
padding: 2em;
}
<div class="outer-wrapper">
<div class="main-wrapper">
<nav class="nav-bar">Navbar</nav>
<main class="main-content">content</main>
<aside class="aside aside-1">aside 1</aside>
<aside class="aside aside-2">aside 2</aside>
<footer class="footer">footer</footer>
</div>
</div>
这是我编写的代码,希望它能对您和您所期望的有所帮助
我正在尝试创建一个响应式导航栏,类似于 Stack Overflow 上的导航栏。我附上了我要实现的布局的图片。
为简单起见,我添加了一些值以使其更易于理解。有封装整个页面的外部 div outer-wrapper
和封装主要内容(导航栏、主要内容和页脚)的主要 div main-wrapper
。
现在假设outer-wrapper
为1000px宽,main-wrapper
为800px宽,则左右各有100px的缓冲区。当 window 缩小时,我希望缓冲区在任何主要内容更改之前用完。
CSS
.outer-wrapper {
width: 100%;
}
.main-wrapper {
width: 800px;
display: flex;
flex-direction: column;
margin-left: auto;
margin-right: auto;
position: relative;
}
.nav-home {
position: fixed;
top: -30px;
left: -30px;
height: 60px;
width: 100%;
padding: 20px 20px 0px 20px;
display: flex;
justify-content: space-around;
}
}
HTML
<div class='outer-wrapper'>
<div class='main-wrapper'>
<div class='nav-bar'>...</div>
<div class='main-content'>...</div>
<div class='footer'>...</div>
</div>
</div>
问题是,当 window 缩小到与 main-wrapper
的宽度相匹配的 800px 时,导航栏中仍然存在左右边距。当左右边距缩小为0时,如何确保导航栏的宽度与主要内容和页脚的宽度匹配?
谢谢。
我从 .nav-bar
class 中删除了您的一些样式,它似乎按照您的要求执行 - 我错过了什么吗?
我添加了颜色以帮助可视化调整大小。
.outer-wrapper {
background-color: yellow;
width: 100%;
}
.main-wrapper {
background-color: blue;
width: 800px;
display: flex;
flex-direction: column;
margin-left: auto;
margin-right: auto;
position: relative;
}
.nav-bar {
background-color: red;
justify-content: space-around;
}
.main-content {
background-color: green;
}
.footer {
background-color: purple;
}
<div class='outer-wrapper'>
<div class='main-wrapper'>
<div class='nav-bar'>Nav Bar</div>
<div class='main-content'>Main Content</div>
<div class='footer'>Footer</div>
</div>
</div>
.outer-wrapper {
width: 100%;
}
.main-wrapper {
width: 800px;
display: flex;
flex-flow: row wrap;
font-weight: bold;
text-align: center;
margin: 0 auto;
}
.main-wrapper > * {
padding: 10px;
flex: 1 100%;
}
.nav-bar {
background: tomato;
}
.footer {
background: lightgreen;
}
.main-content {
background: deepskyblue;
}
.aside-1 {
background: gold;
}
.aside-2 {
background: hotpink;
}
@media all and (min-width: 600px) {
.aside {
flex: 1 0 0;
}
}
@media all and (min-width: 800px) {
.main-content {
flex: 3 0px;
}
.aside-1 {
order: 1;
}
.main-content {
order: 2;
}
.aside-2 {
order: 3;
}
.footer {
order: 4;
}
}
body {
padding: 2em;
}
<div class="outer-wrapper">
<div class="main-wrapper">
<nav class="nav-bar">Navbar</nav>
<main class="main-content">content</main>
<aside class="aside aside-1">aside 1</aside>
<aside class="aside aside-2">aside 2</aside>
<footer class="footer">footer</footer>
</div>
</div>
这是我编写的代码,希望它能对您和您所期望的有所帮助