Bulma导航菜单通过navbar组件实现,核心是利用navbar-brand、navbar-menu及is-active类配合JavaScript控制响应式折叠;下拉菜单使用has-dropdown和is-hoverable类构建;自定义样式推荐通过SASS变量覆盖实现主题调整。

Bulma框架实现导航菜单,核心在于其
navbar
要用Bulma构建一个导航菜单,我们通常会从一个
nav
navbar
navbar-brand
navbar-menu
navbar-item
navbar-link
首先,
navbar-brand
navbar-burger
<nav class="navbar is-primary" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="https://bulma.io">
<img src="https://bulma.io/images/bulma-logo.png" width="112" height="28">
</a>
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item">
首页
</a>
<a class="navbar-item">
产品
</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
更多
</a>
<div class="navbar-dropdown">
<a class="navbar-item">
关于我们
</a>
<a class="navbar-item">
联系我们
</a>
<hr class="navbar-divider">
<a class="navbar-item">
报告问题
</a>
</div>
</div>
</div>
<div class="navbar-end">
<div class="navbar-item">
<div class="buttons">
<a class="button is-primary">
<strong>注册</strong>
</a>
<a class="button is-light">
登录
</a>
</div>
</div>
</div>
</div>
</nav>这段HTML骨架搭建了一个基本的导航栏。其中,
navbar-burger
data-target
navbar-menu
id
navbar-menu
navbar-burger
is-active
立即学习“前端免费学习笔记(深入)”;
为了让这个“汉堡”按钮能实际工作,我们需要一点点JavaScript。Bulma本身是“CSS-only”框架,这意味着它不包含JavaScript组件,这是为了让开发者有更大的自由度选择自己喜欢的JS库或原生JS。通常,我们会这样来激活它:
document.addEventListener('DOMContentLoaded', () => {
const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
if ($navbarBurgers.length > 0) {
$navbarBurgers.forEach( el => {
el.addEventListener('click', () => {
const target = el.dataset.target;
const $target = document.getElementById(target);
el.classList.toggle('is-active');
$target.classList.toggle('is-active');
});
});
}
});这段JS代码会在DOM加载完成后,找到所有的
navbar-burger
navbar-burger
navbar-menu
is-active
实现响应式折叠效果是现代导航菜单的标配,Bulma在这方面提供了一套非常优雅的CSS方案,但如前所述,它需要一点JavaScript来“激活”这个机制。在我看来,Bulma这种分离关注点的做法很聪明,因为它让开发者可以完全掌控交互逻辑,而不是被框架的JS所束缚。
核心思路是利用
navbar-burger
navbar-menu
is-active
HTML结构准备:
navbar-brand
navbar-burger
span
navbar-burger
data-target
navbar-menu
id
navbar-menu
id
data-target
<div class="navbar-brand">
<!-- 品牌Logo等 -->
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="myNavbarMenu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div id="myNavbarMenu" class="navbar-menu">
<!-- 菜单项 -->
</div>JavaScript激活逻辑:
navbar-burger
navbar-burger
navbar-burger
data-target
id
id
navbar-menu
navbar-burger
navbar-menu
is-active
is-active
is-active
document.addEventListener('DOMContentLoaded', () => {
const burger = document.querySelector('.navbar-burger'); // 假设只有一个
if (burger) {
burger.addEventListener('click', () => {
const targetId = burger.dataset.target;
const targetMenu = document.getElementById(targetId);
burger.classList.toggle('is-active');
targetMenu.classList.toggle('is-active');
});
}
});这个JS片段是响应式折叠功能的核心,它弥补了Bulma纯CSS的“最后一公里”。Bulma的CSS会根据
is-active
navbar-menu
display: none
display: flex
block
下拉菜单在导航栏中非常常见,用于组织更多的内容或提供二级导航。Bulma的下拉菜单实现同样是基于CSS类,非常直观。我个人觉得,Bulma的
is-hoverable
确定下拉菜单的位置: 下拉菜单通常是
navbar-item
navbar-start
navbar-end
navbar-item
添加has-dropdown
is-hoverable
navbar-item
has-dropdown
is-hoverable
is-hoverable
navbar-item
is-active
<div class="navbar-item has-dropdown is-hoverable"> <!-- ... 下拉菜单内容 ... --> </div>
创建navbar-link
has-dropdown
navbar-item
navbar-link
<a class="navbar-link"> 服务 </a>
构建navbar-dropdown
navbar-link
div
navbar-dropdown
div
<div class="navbar-dropdown"> <!-- ... 下拉菜单项 ... --> </div>
添加下拉菜单项: 在
navbar-dropdown
navbar-item
hr
navbar-divider
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
产品分类
</a>
<div class="navbar-dropdown">
<a class="navbar-item">
电子产品
</a>
<a class="navbar-item">
服饰鞋包
</a>
<hr class="navbar-divider">
<a class="navbar-item">
所有产品
</a>
</div>
</div>通过这样的结构,一个功能完善的下拉菜单就创建好了。
is-hoverable
is-active
Bulma的强大之处在于其高度模块化和基于SASS的设计,这让自定义样式和布局变得相对容易。我个人在使用Bulma时,最喜欢的就是可以通过覆盖SASS变量来快速调整主题,而不需要写大量的自定义CSS。这不仅效率高,也保持了代码的一致性。
通过SASS变量进行主题定制(推荐方式): Bulma几乎所有的颜色、字体、间距、边框等样式都由SASS变量控制。要自定义导航菜单,最有效的方式就是覆盖这些变量。
node-sass
sass
_variables.scss
_custom.scss
main.scss
// _custom.scss (或 _variables.scss) $navbar-background-color: #363636; // 深灰色背景 $navbar-item-color: #f5f5f5; // 亮白色文字 $navbar-item-hover-color: #00d1b2; // 悬停时的青绿色 $navbar-height: 4.5rem; // 增加导航栏高度 // main.scss @import "bulma/sass/utilities/_all.sass"; // Bulma的工具函数 @import "bulma/sass/base/_all.sass"; // Bulma的基础样式 @import "bulma/sass/components/navbar.sass"; // 只导入navbar组件 // ... 导入其他你需要的Bulma组件 ...
通过这种方式,你可以轻松调整导航栏的背景色、文字颜色、悬停效果、高度等几乎所有视觉属性。这种方法比直接写覆盖CSS权重更高,也更符合Bulma的设计哲学。
使用Bulma的辅助类: Bulma提供了大量的辅助类来调整布局和样式,例如:
is-primary
is-link
is-info
is-success
is-warning
is-danger
navbar
<nav class="navbar is-danger">
m-x
p-y
navbar-item
navbar
has-text-centered
has-text-right
has-shadow
编写自定义CSS(当SASS变量不足时): 有时候,SASS变量可能无法满足所有复杂的定制需求,或者你只是想对某个特定元素进行微调。这时,你可以编写自己的CSS来覆盖Bulma的默认样式。
/* custom.css */
.navbar-item img {
max-height: 2.5rem; /* 调整Logo图片的最大高度 */
}
.navbar-menu.is-active {
background-color: rgba(54, 54, 54, 0.95); /* 移动端展开菜单的半透明背景 */
}
@media screen and (max-width: 768px) {
.navbar-item.has-dropdown.is-hoverable .navbar-dropdown {
position: static; /* 在移动端,下拉菜单不再浮动 */
box-shadow: none;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
}在编写自定义CSS时,要注意CSS的特异性(specificity)。你可能需要使用更具体的选择器(例如
.navbar.is-primary .navbar-item
!important
!important
通过这三种方法结合使用,你几乎可以实现任何你想要的导航菜单样式和布局。我的经验是,从SASS变量开始,然后根据需要逐步引入辅助类和自定义CSS,这样能保持代码的整洁和可维护性。
以上就是如何用css框架Bulma实现导航菜单的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号