编辑
@zim answer使用2020 CSS轻松解决问题,更好地应用于Bootstrap 4。
原始问题和选择的答案仍然有效,信息量很大。
原始问题
在移动的视图中,我希望菜单图标(在 Bootstrap 基本导航栏示例中使用类icon-bar定义)更改为X形状(类似于此处所发生的情况:https://www.mint.com但不那么花哨(我只想用一个X来替换3条)。
目前我使用的是自定义id:#更改切换
<button id="ChangeToggle" type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
沿着下面的javascript函数(我知道这是基本的,但我是新手):
<script>
$('#ChangeToggle').click(function () {
if($('#ChangeToggle span').hasClass('ToggleButton')) {
$('#ChangeToggle').html('<span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>');
}
else {
$('#ChangeToggle').html('<span class="ToggleButton glyphicon glyphicon-remove"></span>');
}
});
</script>
一切正常,唯一的问题是,当我点击X图标时,菜单不会关闭。它只会在我点击它之外(按钮中的任何其他地方)时关闭。点击X图标时,它所做的唯一事情就是回到原来的3条条纹。
有人知道我做错了什么吗?
9条答案
按热度按时间i5desfxk1#
JavaScript替换了
#ChangeToggle
元素的内部html以显示X或汉堡包图标。准确地单击X或汉堡包菜单而不是#ChangeToggle
将删除被单击的元素,我认为这会阻止它冒泡。由于Bootstrap的collapse插件使用文档上的事件处理程序来确定是否单击了某个元素,折叠插件将永远不会得到通知。我已经创建了一个小例子,其中粉红色
.outer
区域上的click处理程序替换了绿色.inner
区域。注意,单击粉红色区域(您的#ChangeToggle
)将导致两个事件,而单击绿色区域(您的X图标)将导致一个事件。第一个
解决这个问题最简单的方法是隐藏/显示X或汉堡包图标,而不是替换。在下面的例子中,X和汉堡包图标都在html中,切换类
.hidden
用于显示正确的图标。第一个
除了在Bootstrap的collapse插件旁边添加一个jQuery点击处理程序之外,还可以使用collapse插件触发的事件来隐藏或显示正确的图标。使用
shown.bs.collapse
事件来显示X图标,使用hidden.bs.collapse
事件来显示汉堡包图标。第一个
2wnc66cl2#
这对我很有效
理论
CSS提供了所有必要的动画工具。基本上是这样的:
X将比汉堡包线更高更窄,因此:
应用
第一个
是什么让它工作
具体来说,由于顶线和底线旋转45度形成X,它们的中心线占宽度的70%,因此它们必须移动15%,这可以用勾股定理计算。
碰巧的是,我们的汉堡菜单是26 x21像素,或者说比它的高度宽24%,但是当你把线条移动到位并考虑到线条的高度(这里定义为3 px)时,X最终是20 x20平方。
在这个特定的实现中,我们将每一行的旋转点定义为中心左侧,这会影响我们将行向上移动的程度,因为这些行的高度大约为3 px,它们每一行都将X的高度增加大约(2.1/2)=1.05px,或者大约为X高度的33%。
因此,33%是它们必须垂直向外移动的量,这样两条线在X的中心相遇,形成一个20 x20 px的正方形。
自定义
X总是会形成一个正方形,所以要想知道它们移动了多少,你只需要知道你的
<span>
条的宽度和高度以及最终得到的汉堡图标的高度。将这些数字代入以下等式:
或者在代码中:
iqjalb3h3#
你不需要Javascript,CSS就可以了
vc9ivgsu4#
自Bootstrap 4.1起,“汉堡包”切换器不再是
<span>
标记,而现在是单个SVG图标背景图像。因此,最简单的方法就是用一点CSS来替换它。然后你可以使用另一个字体图标(比如FontAwesome)或者一个简单的""字符...
Demo
另一个选择是这个动画汉堡:
https://codeply.com/p/L9HT5GaUtt
vxqlmq5t5#
Smart decision helped me in codepen
HTML格式
CSS格式
JS
omhiaaxx6#
不需要通过css使用javascript,你也可以做,请按照下面的代码。
HTML格式
CSS(在css中使用
:not
,它将比javascript执行更快的动画)xmd2e60i7#
下面的代码可以帮助您解决这个问题。
HTML:
CSS:
Java脚本
此代码段用于在单击按钮时将移动的图标更改为关闭图标。
ej83mcc08#
我尝试了@Zim的解决方案,效果很好,谢谢分享。我做了两个小调整:
1.我将border-0更改为border-1,以便在汉堡包图像周围保留边框。
1.我在div上添加了一个背景颜色,因为X最终与我现有的背景颜色相似。
ippsafx79#
** Bootstrap 5.2版:**
于飞:
CSS:
在我的例子中,我使用Bootstrap Icons来显示关闭图标,所以一定要下载或者至少包含图标字体样式表。