前端组件库——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/

相关文章
|
20天前
|
资源调度 前端开发 JavaScript
前端组件库——Tailwind CSS知识点大全(一)
教程来源 https://xcfsr.cn/category/software-dev.html Tailwind CSS是2017年开源的工具优先(utility-first)CSS框架,提供数百个细粒度工具类,让开发者直接在HTML中组合样式,无需写自定义CSS。v4.0引入Oxide引擎与CSS优先配置,性能与体验全面升级,现为全球最流行的CSS框架。
|
3月前
|
人工智能 监控 API
阿里云及Windows本地部署OpenClaw skill:AI Agent全自动炒股票,重构量化交易逻辑实战指南
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助多模型深度推理,交叉验证多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
1212 1
|
14天前
|
移动开发 自然语言处理 小程序
前端组件库——Wot Design Uni知识点大全(三)
教程来源 https://rvtst.cn Wot Design Uni 是基于 Vue3 的跨平台 UI 组件库,支持微信/支付宝小程序、H5、App 等多端兼容;提供样式隔离修复、virtualHost 渲染优化、虚拟列表、按需引入、国际化(15+语言)等完整解决方案。
|
9天前
|
弹性计算 开发框架 前端开发
前端组件库 ——A-Frame 知识点大全(一)
教程来源 https://zlpow.cn A-Frame 是 Mozilla 开源的 WebXR 框架,以声明式 HTML(如 `&lt;a-scene&gt;` `&lt;a-box&gt;`)降低 VR/AR 开发门槛。基于 Three.js 与 WebGL,支持跨平台运行,让 Web 开发者零基础快速构建沉浸式 3D 体验。
|
9天前
|
前端开发 大数据 API
前端组件 ——MUI X Data Grid 知识点大全(四)
教程来源 http://xcfsr.cn Data Grid 高度重视可访问性,支持键盘导航、完整 ARIA 属性及屏幕阅读器;性能优化涵盖稳定行 ID、Pro 版虚拟化、避免匿名函数、列/服务端分页等;并提供常见问题的精准解决方案。
|
9天前
|
前端开发 JavaScript
前端组件库 ——A-Frame 知识点大全(三)
教程来源 https://tmywi.cn A-Frame自定义组件支持schema定义、init/update/tick/remove生命周期,可访问Three.js对象、实现组件通信;结合第三方组件、模型加载、粒子系统及性能优化(资产预载、glTF压缩、LOD等),高效构建高性能WebXR应用。
|
14天前
|
资源调度 前端开发 Android开发
前端组件库——NativeBase知识点大全
教程来源 https://yyvgt.cn NativeBase是2016年推出的React Native跨平台UI库,支持Android、iOS与Web,以统一设计系统为核心。v3版强化可访问性、响应式布局、主题定制与多端一致性,新项目推荐使用;追求极致性能可关注其演进产物gluestack-ui。
|
9天前
|
前端开发 JavaScript API
前端组件 ——MUI X Data Grid 知识点大全(一)
教程来源 http://oplhc.cn MUI X Data Grid 是高性能React数据表格组件,支持虚拟滚动、排序筛选、分页编辑等企业级功能。提供免费社区版、Pro版和Premium版三档选择,兼顾轻量需求与百万级数据处理能力,开箱即用,API直观,深度集成MUI生态。
|
9天前
|
弹性计算 前端开发 JavaScript
前端组件库 ——A-Frame 知识点大全(二)
教程来源 https://bncne.cn A-Frame核心采用声明式ECS架构:实体(`&lt;a-entity&gt;`)为容器,组件(如`position`、`material`)提供可复用功能,系统实现全局管理。该模式解耦灵活、易于扩展,让Web开发者用HTML语法高效构建VR/3D场景。
|
14天前
|
前端开发 容器
前端组件库——NativeBase知识点大全(二)
教程来源 http://uklgy.cn NativeBase 提供近40个高质量跨平台组件,涵盖Box、Text、Stack、Input、Button、Modal、Toast、Avatar等核心类别,并支持通过`extendTheme`深度定制主题、颜色与组件样式,助力高效构建一致、可访问的移动及Web应用。