当设置为在特定像素处显示切换按钮时,导航栏切换按钮打开然后立即关闭
Navbar toggle button opens then immediately closes when set to display toggle button at specific pixels
最近几天我一直在学习 bootstrap 3 和 sass。无论如何,我正在尝试制作一个在屏幕尺寸低于 1000 像素时折叠的导航栏。它可以工作,但是当我单击切换按钮以显示菜单下拉菜单时,它会打开,然后立即关闭。
代码如下:http://jsbin.com/zahatekisa/edit?html,css,output
.navbar {
background-color: #202C39;
}
div.navbar-header a.navbar-brand {
font-family: "Caveat Brush";
margin-right: 20px;
font-size: 23px;
color: #F29559;
}
div.navbar-header a.navbar-brand:hover {
color: #ffb36b;
}
ul.nav.navbar-nav li a {
font-family: "PT Sans", "cursive";
color: #e6e6e6;
}
ul.nav.navbar-nav li a:hover {
color: #ffffff;
background-color: #2a394a;
}
ul.navbar-right li p.navbar-text {
display: block;
}
@media (max-width: 1050px) {
ul.navbar-right li a {
float: left;
}
ul.navbar-right li p.navbar-text {
margin-left: 15px;
position: relative;
top: -4px;
}
}
@media (max-width: 1000px) {
.navbar-header {
float: none;
}
.navbar-toggle {
display: block;
}
.navbar-collapse {
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.navbar-collapse.collapse {
display: none !important;
}
.navbar-nav {
float: none !important;
margin: 7.5px -15px;
}
.navbar-nav > li {
float: none;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!--Making the toggle button-->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--Logo-->
<a href="#" class="navbar-brand">Lorem ipsum dolor.</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<p class="navbar-text">Contact Me:</p>
</li>
<li><a href="#"><i class="fa fa-facebook-official" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-twitter-square" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-skype" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-envelope" aria-hidden="true"></i></a>
</li>
</ul>
</div>
</div>
</nav>
这里的问题是你的这种特殊风格,无论它是打开还是关闭,它都会强制隐藏导航栏:
@media (max-width: 1000px) {
.navbar-collapse.collapse {
display: none !important;
}
}
我可以看到你在这里做什么 - 你正在尝试将 Bootstrap 的 .collapse
class 与你自己的导航栏自定义添加结合起来。但是,您的逻辑存在问题:我怀疑您是在 Bootstrap 切换 .collapse
以隐藏或显示折叠内容的假设下编写样式的。这是不正确的。事实上,Bootstrap 为此切换 .in
- 因此如果元素具有 class .in
,则不应隐藏内容。只需将您的选择器更改为:
@media (max-width: 1000px) {
.navbar-collapse.collapse:not(.in) {
display: none !important;
}
}
这是上下文中的修复:
.navbar {
background-color: #202C39;
}
div.navbar-header a.navbar-brand {
font-family: "Caveat Brush";
margin-right: 20px;
font-size: 23px;
color: #F29559;
}
div.navbar-header a.navbar-brand:hover {
color: #ffb36b;
}
ul.nav.navbar-nav li a {
font-family: "PT Sans", "cursive";
color: #e6e6e6;
}
ul.nav.navbar-nav li a:hover {
color: #ffffff;
background-color: #2a394a;
}
ul.navbar-right li p.navbar-text {
display: block;
}
@media (max-width: 1050px) {
ul.navbar-right li a {
float: left;
}
ul.navbar-right li p.navbar-text {
margin-left: 15px;
position: relative;
top: -4px;
}
}
@media (max-width: 1000px) {
.navbar-header {
float: none;
}
.navbar-toggle {
display: block;
}
.navbar-collapse {
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.navbar-collapse.collapse:not(.in) {
display: none !important;
}
.navbar-nav {
float: none !important;
margin: 7.5px -15px;
}
.navbar-nav > li {
float: none;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!--Making the toggle button-->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--Logo-->
<a href="#" class="navbar-brand">Lorem ipsum dolor.</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<p class="navbar-text">Contact Me:</p>
</li>
<li><a href="#"><i class="fa fa-facebook-official" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-twitter-square" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-skype" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-envelope" aria-hidden="true"></i></a>
</li>
</ul>
</div>
</div>
</nav>
(另外值得注意的是,您可能希望对媒体查询使用 max-width: 768px
而不是 max-width: 1000px
,因为这是“平板电脑”大小设备的 Bootstrap 断点。 )
最近几天我一直在学习 bootstrap 3 和 sass。无论如何,我正在尝试制作一个在屏幕尺寸低于 1000 像素时折叠的导航栏。它可以工作,但是当我单击切换按钮以显示菜单下拉菜单时,它会打开,然后立即关闭。
代码如下:http://jsbin.com/zahatekisa/edit?html,css,output
.navbar {
background-color: #202C39;
}
div.navbar-header a.navbar-brand {
font-family: "Caveat Brush";
margin-right: 20px;
font-size: 23px;
color: #F29559;
}
div.navbar-header a.navbar-brand:hover {
color: #ffb36b;
}
ul.nav.navbar-nav li a {
font-family: "PT Sans", "cursive";
color: #e6e6e6;
}
ul.nav.navbar-nav li a:hover {
color: #ffffff;
background-color: #2a394a;
}
ul.navbar-right li p.navbar-text {
display: block;
}
@media (max-width: 1050px) {
ul.navbar-right li a {
float: left;
}
ul.navbar-right li p.navbar-text {
margin-left: 15px;
position: relative;
top: -4px;
}
}
@media (max-width: 1000px) {
.navbar-header {
float: none;
}
.navbar-toggle {
display: block;
}
.navbar-collapse {
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.navbar-collapse.collapse {
display: none !important;
}
.navbar-nav {
float: none !important;
margin: 7.5px -15px;
}
.navbar-nav > li {
float: none;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!--Making the toggle button-->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--Logo-->
<a href="#" class="navbar-brand">Lorem ipsum dolor.</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<p class="navbar-text">Contact Me:</p>
</li>
<li><a href="#"><i class="fa fa-facebook-official" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-twitter-square" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-skype" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-envelope" aria-hidden="true"></i></a>
</li>
</ul>
</div>
</div>
</nav>
这里的问题是你的这种特殊风格,无论它是打开还是关闭,它都会强制隐藏导航栏:
@media (max-width: 1000px) {
.navbar-collapse.collapse {
display: none !important;
}
}
我可以看到你在这里做什么 - 你正在尝试将 Bootstrap 的 .collapse
class 与你自己的导航栏自定义添加结合起来。但是,您的逻辑存在问题:我怀疑您是在 Bootstrap 切换 .collapse
以隐藏或显示折叠内容的假设下编写样式的。这是不正确的。事实上,Bootstrap 为此切换 .in
- 因此如果元素具有 class .in
,则不应隐藏内容。只需将您的选择器更改为:
@media (max-width: 1000px) {
.navbar-collapse.collapse:not(.in) {
display: none !important;
}
}
这是上下文中的修复:
.navbar {
background-color: #202C39;
}
div.navbar-header a.navbar-brand {
font-family: "Caveat Brush";
margin-right: 20px;
font-size: 23px;
color: #F29559;
}
div.navbar-header a.navbar-brand:hover {
color: #ffb36b;
}
ul.nav.navbar-nav li a {
font-family: "PT Sans", "cursive";
color: #e6e6e6;
}
ul.nav.navbar-nav li a:hover {
color: #ffffff;
background-color: #2a394a;
}
ul.navbar-right li p.navbar-text {
display: block;
}
@media (max-width: 1050px) {
ul.navbar-right li a {
float: left;
}
ul.navbar-right li p.navbar-text {
margin-left: 15px;
position: relative;
top: -4px;
}
}
@media (max-width: 1000px) {
.navbar-header {
float: none;
}
.navbar-toggle {
display: block;
}
.navbar-collapse {
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.navbar-collapse.collapse:not(.in) {
display: none !important;
}
.navbar-nav {
float: none !important;
margin: 7.5px -15px;
}
.navbar-nav > li {
float: none;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!--Making the toggle button-->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--Logo-->
<a href="#" class="navbar-brand">Lorem ipsum dolor.</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
<li><a href="#">Lorem</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<p class="navbar-text">Contact Me:</p>
</li>
<li><a href="#"><i class="fa fa-facebook-official" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-twitter-square" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-skype" aria-hidden="true"></i></a>
</li>
<li><a href="#"><i class="fa fa-envelope" aria-hidden="true"></i></a>
</li>
</ul>
</div>
</div>
</nav>
(另外值得注意的是,您可能希望对媒体查询使用 max-width: 768px
而不是 max-width: 1000px
,因为这是“平板电脑”大小设备的 Bootstrap 断点。 )