我正在试着用flexbox做一个导航栏。在我的代码中,我用flex- direction:"row“包装了实际的导航栏,以对齐徽标和按钮。现在我想让导航栏(应该是100vw宽)下的导航内侧(米色的div),但实际上它位于导航栏旁边。我试图在我的导航菜单div中将伸缩方向改为“列”,但是汉堡按钮从屏幕上消失了。我做错了什么吗?
body {
margin: 0;
overflow: hidden;
}
/* defaults */
.safe-view {
display: flex;
height: 100vh;
}
.hamburger {
height: 30px;
width: 30px;
}
/**/
/* navbar */
.navbar {
position: sticky;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 30px;
width: 100vw;
font-size: 1.2em;
height: 100px;
}
.nav-menu {
width: 100%;
display: flex;
flex-direction:row;
/*flex-direction:column;*/
position: absolute;
height: 100%;
overflow: hidden;
background-color: white;
}
.nav-inner {
height: 100%;
width: 100%;
background-color: blanchedalmond;
}
/**/<div class="safe-view">
<div class="nav-menu">
<div class="navbar">
<h1>logo</h1>
<button class="hamburger"></button>
</div>
<div class="nav-inner"></div>
</div>
</div>
发布于 2020-05-16 04:29:01
这是一个CSS盒子模型的问题。您需要添加box-sizing: border-box。这将确保在宽度计算中包括填充。
*{
box-sizing: border-box;
}默认情况下,框大小设置为content-box。这将只关心元素的内容以及元素外部的移位填充和边框。这就是为什么你看到按钮向右推的原因!This还可以帮助你进一步理解。
此外,需要将.nav-menu的flex-direction设置为column,才能将.nav-inner定位在下面。
这是另一种选择。我删除了填充,只使用calc()函数来创建填充。但一定要在CSS中包含box-sizing:border-box :)
*{
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
overflow: hidden;
}
.safe-view {
display: flex;
height: 100vh;
}
.navbar {
position: sticky;
display: flex;
flex-direction:row;
align-items: center;
justify-content: space-between;
width: calc(100vw - 60px);
margin: 0 auto;
font-size: 1.2em;
height: 100px;
}
.nav-menu {
width: 100%;
display: flex;
flex-direction:column;
position: absolute;
height: 100%;
overflow: hidden;
background-color: white;
}
.nav-inner {
height: 50px;
width: 100%;
background-color: blanchedalmond;
}<div class="safe-view">
<div class="nav-menu">
<div class="navbar">
<h1 class="logo">logo</h1>
<button class="hamburger">button</button>
</div>
<div class="nav-inner"></div>
</div>
</div>
https://stackoverflow.com/questions/61827489
复制相似问题