前端组件库——Bulma知识点大全(二)

简介: 教程来源 https://unbgv.cn/category/shengxiaoyunshi.html Bulma是基于Flexbox的纯CSS响应式框架,其栅格系统以`columns`/`column`为核心,支持12列布局、多断点响应式控制、列间距与对齐修饰符;同时提供按钮、表单、卡片、导航栏等语义化UI组件,零JS依赖,轻量易用。

三、栅格系统

3.1 Columns布局基础
Bulma的栅格系统基于Flexbox构建,核心概念是columns(列容器)和column(单个列)。

<!-- 基础栅格:自动等宽 -->
<div class="columns">
  <div class="column">第一列</div>
  <div class="column">第二列</div>
  <div class="column">第三列</div>
  <div class="column">第四列</div>
</div>

在这个例子中,四个列会自动平分父容器的宽度。columns容器在移动端默认垂直堆叠(每个column占满整行),在平板及以上设备自动变为水平排列。

列宽控制:
Bulma使用12列网格系统,通过is-*类控制列宽:

<div class="columns">
  <div class="column is-4">占4列(1/3宽度)</div>
  <div class="column is-8">占8列(2/3宽度)</div>
</div>

3.2 响应式列宽
Bulma提供了丰富的响应式列宽类,可以在不同断点设置不同的列宽:
image.png

<div class="columns">
  <!-- 移动端占12列(全宽),平板端占6列(半宽),桌面端占4列(1/3) -->
  <div class="column is-12-mobile is-6-tablet is-4-desktop">
    响应式卡片
  </div>
</div>

3.3 栅格修饰符
列间距(gap)控制:

<!-- 无间距 -->
<div class="columns is-gapless">
  <div class="column">无间距列</div>
  <div class="column">无间距列</div>
</div>

<!-- 自定义间距(0-8) -->
<div class="columns is-variable is-4">
  <!-- is-4 表示间距为1rem -->
  <div class="column">有间距列</div>
  <div class="column">有间距列</div>
</div>

垂直对齐:

<!-- 垂直居中 -->
<div class="columns is-vcentered">
  <div class="column">内容会自动垂直居中</div>
  <div class="column">即使高度不同也会对齐</div>
</div>

多行布局:

<!-- 列数超过12时自动换行 -->
<div class="columns is-multiline">
  <div class="column is-3">占3列</div>
  <div class="column is-3">占3列</div>
  <div class="column is-3">占3列</div>
  <div class="column is-3">占3列</div>
  <!-- 以下列会换到下一行 -->
  <div class="column is-3">占3列</div>
</div>

移动端强制水平排列:

默认情况下,columns在移动端垂直堆叠。如需移动端也保持水平排列,添加is-mobile类:

<div class="columns is-mobile">
  <div class="column">移动端也水平排列</div>
  <div class="column">移动端也水平排列</div>
</div>

四、核心组件

4.1 按钮组件 Button
Bulma的按钮组件使用.button基类,配合语义化修饰符实现不同样式。

<!-- 按钮颜色变体 -->
<button class="button">默认按钮</button>
<button class="button is-primary">主要按钮</button>
<button class="button is-link">链接按钮</button>
<button class="button is-info">信息按钮</button>
<button class="button is-success">成功按钮</button>
<button class="button is-warning">警告按钮</button>
<button class="button is-danger">危险按钮</button>

<!-- 按钮尺寸 -->
<button class="button is-small">小按钮</button>
<button class="button is-normal">正常按钮</button>
<button class="button is-medium">中等按钮</button>
<button class="button is-large">大按钮</button>

<!-- 其他按钮样式 -->
<button class="button is-outlined">镂空按钮</button>
<button class="button is-inverted">反色按钮</button>
<button class="button is-rounded">圆角按钮</button>
<button class="button is-loading">加载中</button>
<button class="button" disabled>禁用按钮</button>

<!-- 按钮组 -->
<div class="buttons">
  <button class="button is-primary">保存</button>
  <button class="button is-light">取消</button>
</div>

<!-- 带图标的按钮 -->
<button class="button is-primary">
  <span class="icon">
    <i class="fas fa-download"></i>
  </span>
  <span>下载</span>
</button>

按钮组件要点:

基础按钮必须带is-primary、is-link等语义类,光有.button只是重置默认样式,不提供主题色

禁用状态需同时添加is-disabled类和disabled属性
https://unbgv.cn/category/shengxiaopeidui.html
自定义颜色时,不要只改background-color,Bulma的悬停效果依赖CSS变量,需在:root中覆盖整套变量
4.2 表单组件 Form
Bulma的表单组件使用.field(表单字段容器)、.label(标签)、.control(控件容器)三层结构。

<div class="field">
  <label class="label">用户名</label>
  <div class="control">
    <input class="input" type="text" placeholder="请输入用户名">
  </div>
</div>

<div class="field">
  <label class="label">邮箱</label>
  <div class="control has-icons-left">
    <input class="input" type="email" placeholder="请输入邮箱">
    <span class="icon is-left">
      <i class="fas fa-envelope"></i>
    </span>
  </div>
</div>

<div class="field">
  <label class="label">密码</label>
  <div class="control">
    <input class="input" type="password" placeholder="请输入密码">
  </div>
</div>

<!-- 文本域 -->
<div class="field">
  <label class="label">个人简介</label>
  <div class="control">
    <textarea class="textarea" placeholder="介绍一下自己..."></textarea>
  </div>
</div>

<!-- 选择框 -->
<div class="field">
  <label class="label">角色</label>
  <div class="control">
    <div class="select">
      <select>
        <option>请选择</option>
        <option>管理员</option>
        <option>普通用户</option>
      </select>
    </div>
  </div>
</div>

<!-- 单选框组 -->
<div class="field">
  <div class="control radios">
    <label class="radio">
      <input type="radio" name="option"> 选项一
    </label>
    <label class="radio">
      <input type="radio" name="option"> 选项二
    </label>
  </div>
</div>

<!-- 复选框组 -->
<div class="field">
  <div class="control checkboxes">
    <label class="checkbox">
      <input type="checkbox"> 同意用户协议
    </label>
  </div>
</div>

表单组件要点:

.field是表单字段容器,内部通常包含.label和.control

.control是控件容器,支持添加图标(.has-icons-left/.has-icons-right)

.input、.textarea、.select是实际输入控件类

表单字段可通过添加is-loading、is-danger等状态类显示验证状态

4.3 卡片组件 Card
卡片是Bulma中最常用的内容容器组件。

<div class="card">
  <div class="card-image">
    <figure class="image is-4by3">
      <img src="image.jpg" alt="卡片图片">
    </figure>
  </div>
  <div class="card-content">
    <div class="media">
      <div class="media-left">
        <figure class="image is-48x48">
          <img src="avatar.jpg" alt="头像">
        </figure>
      </div>
      <div class="media-content">
        <p class="title is-4">张三</p>
        <p class="subtitle is-6">@zhangsan</p>
      </div>
    </div>

    <div class="content">
      这是一段卡片内容描述。Bulma的卡片组件非常灵活,
      可以包含图片、媒体对象、标题、内容和页脚。
      <br>
      <time datetime="2024-01-01">2024年1月1日</time>
    </div>
  </div>
  <div class="card-footer">
    <a href="#" class="card-footer-item">点赞</a>
    <a href="#" class="card-footer-item">评论</a>
    <a href="#" class="card-footer-item">分享</a>
  </div>
</div>

image.png
4.4 导航栏组件 Navbar
Bulma的导航栏组件需要手动控制移动端汉堡菜单的展开/收起行为(框架不提供JS)。

<nav class="navbar" role="navigation" aria-label="主导航">
  <div class="navbar-brand">
    <a class="navbar-item" href="/">
      <img src="logo.png" alt="Logo">
    </a>

    <!-- 汉堡菜单按钮(移动端显示) -->
    <a role="button" class="navbar-burger" aria-label="菜单" 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" href="/">首页</a>
      <a class="navbar-item" href="/docs">文档</a>

      <div class="navbar-item has-dropdown is-hoverable">
        <a class="navbar-link" href="/more">更多</a>
        <div class="navbar-dropdown">
          <a class="navbar-item" href="/about">关于</a>
          <a class="navbar-item" href="/contact">联系</a>
          <hr class="navbar-divider">
          <a class="navbar-item" href="/report">问题反馈</a>
        </div>
      </div>
    </div>

    <div class="navbar-end">
      <div class="navbar-item">
        <div class="buttons">
          <a class="button is-primary" href="/register">注册</a>
          <a class="button is-light" href="/login">登录</a>
        </div>
      </div>
    </div>
  </div>
</nav>

<script>
  // 汉堡菜单的JavaScript控制(必须自己实现)
  document.addEventListener('DOMContentLoaded', () => {
    const burger = document.querySelector('.navbar-burger');
    const menu = document.querySelector(`#${burger.dataset.target}`);

    burger.addEventListener('click', () => {
      burger.classList.toggle('is-active');
      menu.classList.toggle('is-active');
    });
  });
</script>

导航栏组件要点:

必须给navbar-burger加data-target属性,值为对应navbar-menu的id

收起逻辑需要自己写JS:监听click事件,切换is-active类到两个元素

下拉菜单使用.has-dropdown和.navbar-dropdown结构

默认下拉菜单在hover时展开,移动端需点击

4.5 消息框组件 Message
消息框用于显示提示信息。

<article class="message">
  <div class="message-header">
    <p>消息标题</p>
    <button class="delete" aria-label="删除"></button>
  </div>
  <div class="message-body">
    这是一条提示消息。可以包含任意HTML内容。
  </div>
</article>

<!-- 不同颜色的消息框 -->
<article class="message is-primary">...</article>
<article class="message is-link">...</article>
<article class="message is-info">...</article>
<article class="message is-success">...</article>
<article class="message is-warning">...</article>
<article class="message is-danger">...</article>

4.6 平铺布局组件 Tile
Tile是Bulma中最强大但常被低估的组件,专门用于构建复杂的二维网格布局,如仪表盘、拼贴墙等。

<!-- 基本结构:祖先 → 父级 → 子级 → 内容 -->
<div class="tile is-ancestor">
  <div class="tile is-vertical is-8">
    <div class="tile">
      <div class="tile is-parent">
        <article class="tile is-child notification is-primary">
          <p class="title">顶部区域</p>
        </article>
      </div>
      <div class="tile is-parent">
        <article class="tile is-child notification is-info">
          <p class="title">右侧区域</p>
        </article>
      </div>
    </div>
    <div class="tile is-parent">
      <article class="tile is-child notification is-warning">
        <p class="title">底部宽区域</p>
      </article>
    </div>
  </div>
  <div class="tile is-parent">
    <article class="tile is-child notification is-danger">
      <p class="title">侧边栏</p>
      <p class="subtitle">自动拉伸以匹配高度</p>
    </article>
  </div>
</div>

Tile组件核心类:
image.png
Tile的优势:子元素会自动拉伸以匹配同级元素的高度,无需手动计算。默认情况下,.tile元素在移动端垂直堆叠,桌面端水平排列。
来源:
https://unbgv.cn/

相关文章
|
数据可视化 定位技术
ArcGIS应用基础3 属性表的操作-以人口密度分布图为例
😀在本文中,作者以人口密度分布图为例,详细讲解了属性表的连接、字段添加和计算等功能,最终将人口密度可视化到地图上进行了底图整饰输出。
1351 0
|
3月前
|
人工智能 监控 API
阿里云及Windows本地部署OpenClaw skill:AI Agent全自动炒股票,重构量化交易逻辑实战指南
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助多模型深度推理,交叉验证多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
1266 1
|
27天前
|
NoSQL IDE MongoDB
Studio 3T 2026.7 发布 - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2026.7 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
115 0
Studio 3T 2026.7 发布 - MongoDB 的终极 GUI、IDE 和 客户端
|
21天前
|
移动开发 自然语言处理 小程序
前端组件库——Wot Design Uni知识点大全(三)
教程来源 https://rvtst.cn Wot Design Uni 是基于 Vue3 的跨平台 UI 组件库,支持微信/支付宝小程序、H5、App 等多端兼容;提供样式隔离修复、virtualHost 渲染优化、虚拟列表、按需引入、国际化(15+语言)等完整解决方案。
|
22天前
|
移动开发 前端开发 JavaScript
前端组件库——Wot Design Uni知识点大全(二)
教程来源 http://unbgv.cn Wot Design Uni 是基于 Vue3+TS 的跨平台 uni-app 组件库,提供 70+ 高质量组件。涵盖按钮、单元格、表单(支持链式校验)、弹窗、Toast、虚拟列表及带徽标的 Tabs 等,全面适配小程序/H5/APP,支持暗黑模式与国际化。
|
27天前
|
资源调度 前端开发 JavaScript
前端组件库——Tailwind CSS知识点大全(一)
教程来源 https://xcfsr.cn/category/software-dev.html Tailwind CSS是2017年开源的工具优先(utility-first)CSS框架,提供数百个细粒度工具类,让开发者直接在HTML中组合样式,无需写自定义CSS。v4.0引入Oxide引擎与CSS优先配置,性能与体验全面升级,现为全球最流行的CSS框架。
|
27天前
|
人工智能 缓存 监控
阿里云大模型服务平台百炼新人免费额度如何申请?申请与使用免费额度教程及常见问题解答
阿里云百炼是一站式大模型开发平台,集成千问及第三方模型,提供OpenAI兼容API及全链路服务,支持快速构建智能体等AI应用。平台为新人提供专属免费额度,自2025年9月8日起有效期为90天,仅限中国内地版模型实时推理费用抵扣,主账号与RAM子账号共享。用户可通过控制台查看剩余额度及过期时间,启用“免费额度用完即停”功能可避免超额扣费。此外,平台还提供免费额度消耗记录、账单查询及消费预警设置,助力开发者高效管理成本。
|
5月前
|
安全 Java API
Java日期处理完全指南(新手也能轻松掌握的Java时间格式化与日期API教程)
教程来源https://www.vpshk.cn/本文介绍Java 8引入的java.time包,详解LocalDateTime、LocalDate等类的使用,涵盖获取当前时间、格式化、解析字符串及日期运算,助你轻松掌握现代Java日期处理方法,适合初学者快速上手。
|
23天前
|
数据采集 弹性计算 人工智能
续费不涨价!阿里云99元服务器:2核vCPU、2GB内存、3Mbps固定带宽、40GiB系统盘(真香机)
阿里云推年度“真香机”:ECS经济型e实例(2核2G+3M固定带宽+40G ESSD系统盘),仅99元/年,官网活动链接:https://t.aliyun.com/U/FzmsXA 新老用户同享,续费不涨价!适用建站、开发、轻量AI等场景,活动延至2027年3月31日。
213 0
|
12月前
|
机器学习/深度学习 数据采集 人工智能
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
随着Web技术发展,动态加载数据的网站(如今日头条)对传统爬虫提出新挑战:初始HTML无完整数据、请求路径动态生成且易触发反爬策略。本文以爬取“AI”相关新闻为例,探讨了通过浏览器自动化、抓包分析和静态逆向接口等方法采集数据的局限性,并提出借助机器学习智能识别AJAX触发点的解决方案。通过特征提取与模型训练,爬虫可自动推测数据接口路径并高效采集。代码实现展示了如何模拟AJAX请求获取新闻标题、简介、作者和时间,并分类存储。未来,智能化将成为采集技术的发展趋势。
330 1
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用