Bulma简介
一、简介
1、简介
Bulma是一个免费的开源CSS框架,它提供了易于使用的前端组件,可以轻松地组合这些组件来构建响应式Web界面。
2、安装
Bulma是一个CSS库,这意味着它提供了用于美化HTML的样式。要使用Bulma,可以直接使用它的.css
文件或者使用预编译的.sass
文件:
- CSS文件
引入CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css">
或下载Bulma CSS文件后引入:
<link rel="stylesheet" href="../bulma.css">
- Sass文件
使用npm:
npm install bulma
或者在GitHub上下载。
3、使用
为了让Bulma正常工作,需要构建响应式网页:
- 使用HTML5文档类型
<!DOCTYPE html>
- 添加响应式窗口meta标签
<meta name="viewport" content="width=device-width, initial-scale=1">
- Hello World
Starter模板:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello Bulma!</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css">
</head>
<body>
<section class="section">
<div class="container">
<h1 class="title">Hello World</h1>
<p class="subtitle">
My first website with <strong>Bulma</strong>!
</p>
</div>
</section>
</body>
</html>
二、概述
1、颜色
大多数Bulma元素和组件的颜色样式如下:
2、修饰符语法
大多数Bulma元素都有可选的样式,如果要应用这些样式只需要添加以is-
或has-
开头的修饰符类即可;修饰符也可以组合使用。
以按钮为例:
<a class="button is-small">Button</a>
<a class="button is-primary">Button</a>
<a class="button is-loading">Button</a>
<a class="button" disabled>Button</a>
<a class="button is-info is-loading">Button</a>
<a class="button is-danger is-outlined">Button</a>
- 字体颜色
<a class="has-text-primary">Hello Bulma</a>
<a class="has-text-link">Hello Bulma</a>
<a class="has-text-warning">Hello Bulma</a>
<a class="has-text-danger">Hello Bulma</a>
- 背景颜色
has-background-white
、has-background-black
、has-background-primary
、has-background-link
、has-background-info
、has-background-success
、has-background-warning
、has-background-danger
…
<a class="has-background-primary mr-1 p-1 has-text-white">Hello Bulma</a>
<a class="has-background-link mr-1 p-1 has-text-white">Hello Bulma</a>
<a class="has-background-warning mr-1 p-1 has-text-white">Hello Bulma</a>
<a class="has-background-info mr-1 p-1 has-text-white">Hello Bulma</a>
has-background-primary-light
、has-background-info-light
、has-background-success-light
、has-background-warning-light
、has-background-link-dark
、has-background-primary-dark
…
<a class="has-background-primary-light mr-1 p-1 has-text-grey">Hello Bulma</a>
<a class="has-background-success-light mr-1 p-1 has-text-dark">Hello Bulma</a>
<a class="has-background-danger-light mr-1 p-1 has-text-success">Hello Bulma</a>
<a class="has-background-primary-dark mr-1 p-1 has-text-white">Hello Bulma</a>
- 字体大小
is-size-1
、is-size-2
、is-size-3
、is-size-4
、is-size-5
、is-size-6
、is-size-7
- 文本转换
is-capitalized
、is-lowercase
、is-uppercase
、is-italic
- 文本粗细
has-text-weight-light
、has-text-weight-normal
、has-text-weight-medium
、has-text-weight-semibold
、has-text-weight-bold
- 对齐方式
has-text-centered
、has-text-justified
、has-text-left
、has-text-right
has-text-left-mobile
、has-text-left-desktop
、has-text-left-widescreen-only
、has-text-left-fullhd
…
-
可见性
is-block
、is-flex
、is-inline
、is-inline-block
、is-inline-flex
;也有响应式的修饰符:
is-flex-mobile
、is-flex-desktop-only
、is-flex-widescreen
…is-hidden
、is-invisible
、is-hidden-mobile
、is-hidden-fullhd
… -
Bulma在所有方向上提供边距
m*
(margin)和填充p*
(padding)修饰符:-
*t
:top,例如:mt-*
表示margin-top
-
*r
:right -
*b
:bottom -
*l
:left -
*x
:水平方向:left和right,例如:mx=*
表示margin-left
和margin-right
-
*y
:垂直方向:top和bottom
共有6种大小可调节:
Suffix *-0
*-1
*-2
*-3
*-4
*-5
*-6
Value 0
0.25rem
0.5rem
0.75rem
1rem
1.5rem
3rem
例如:
m-1
表示margin: 0.25rem
;mt-2
表示:margin-top: 0.5rem
;px-4
表示:padding-left: 1rem; padding-right: 1rem;
。 -
-
与
is-flex
结合使用时,所有Flexbox CSS属性都可以作为Bulma修饰符:- flex-direction
Class Property: Value is-flex-direction-row
flex-direction: row
is-flex-direction-column
flex-direction: column
is-flex-direction-row-reverse
flex-direction: row-reverse
is-flex-direction-column-reverse
flex-direction: column-reverse
- flex-wrap
与
flex-direction
类似,对应的修饰符为:is-flex-wrap-nowrap
、is-flex-wrap-wrap
、is-flex-wrap-wrap-reverse
;后面的属性同理。- justify-content
is-justify-content-start
、is-justify-content-center
、is-justify-content-space-between
…- align-content
is-align-content-center
、is-align-content-stretch
、is-align-content-flex-end
…- align-items
is-align-items-center
、is-align-items-stretch
、is-align-items-flex-end
…- align-self
is-align-self-auto
、is-align-self-center
、is-align-self-stretch
…- flex-grow
is-flex-grow-0
相当于:flex-grow: 0
,is-flex-grow-1
相当于:flex-grow: 1
;- flex-shrink
与
flex-grow
类似:is-flex-shrink-0
、is-flex-shrink-1
、is-flex-shrink-3
…
is-clearfix
、is-pulled-left
、is-clipped
、is-clickable
、is-radiusless
、is-relative
…
3、模块化
Bulma由39个.sass
文件组成,可以根据需要单独导入。例如,只导入按钮样式:
@import "bulma/sass/utilities/_all.sass"
@import "bulma/sass/elements/button.sass"
之后即可使用.is-active
、.is-primary
、.is-info
、.is-success
、.is-small
、.is-medium
、.is-large
、.is-outlined
、.is-inverted
、.is-link
、.is-loading
、[disabled]
修饰符。
4、响应式
-
默认垂直
Bulma是一个移动优先的框架,它的每个元素都是移动优先,并对垂直阅读(vertical reading)做了优化,因此在mobile上有以下默认状态:
-
columns
垂直堆叠 -
level
组件将垂直堆叠其子组件 -
nav
菜单会被隐藏
不过也可以对
columns
和level
组件通过附加is-mobile
来强制执行水平布局。 -
-
分隔点(Breakpoints)
Bulma有5个分隔点:
-
mobile:小于
768px
-
tablet:从
769px
开始到1023px
-
desktop:从
1024px
开始到1215px
-
widescreen:从
1216px
开始到1407px
-
fullhd:
1408px
及以上
-
5、函数
Bulma提供自定义函数来帮助动态定义值和颜色,具体参考:Functions
node_modules\bulma\sass\utilities\functions.sass
6、混入
混入(Mixins)功能用于自定义元素和响应式,具体参考:Mixins
node_modules\bulma\sass\utilities\mixins.sass
三、容器
1、Section
section
是一个简单的容器,可将页面分为多个部分;section最好被用做body的直接子元素。
样例:
<section class="section">
<h1 class="title">Section</h1>
<h2 class="subtitle">
A simple container to divide your page into <strong>sections</strong>, like the one you're currently reading.
</h2>
</section>
可以通过is-medium
和is-large
来更改section的间距。
2、Container
container
是一个简单的工具元素,可以让内容在视口中居中。它可以在任何上下文中使用,但主要用作navbar
、hero
、section
、footer
的直接子元素。
样例:
<div class="container">
<div class="notification is-primary">
This container is <strong>centered</strong> on desktop and larger viewports.
</div>
</div>
3、Level
level
是一个多功能水平层级,几乎可以包含所有其他元素;层级的结构如下:
-
level
:主容器-
level-left
:左侧容器 -
level-right
:右侧容器level-item
:容器中的元素
-
在level-item
中几乎可以插入任何元素:标题、按钮、文本等,无论放入什么元素,它们都将始终垂直居中。
样例:
<nav class="level">
<div class="level-left">
<div class="level-item">
<div class="field has-addons">
<p class="control"><input class="input" type="text" placeholder="Find a post"></p>
<p class="control"><button class="button">Search</button></p>
</div>
</div>
</div>
<div class="level-right">
<div class="level-item">
<p class="level-item"><strong>All</strong></p>
<p class="level-item"><a>Published</a></p>
<p class="level-item"><a>Drafts</a></p>
<p class="level-item"><a class="button is-success">New</a></p>
</div>
</div>
</nav>
- 居中Level
如果要水平居中,可以使用任意多个level-item
,只要它们是容器的直接子元素即可。
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Following</p>
<p class="title">123</p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Followers</p>
<p class="title">456K</p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Likes</p>
<p class="title">789</p>
</div>
</div>
</nav>
默认情况下在移动设备上是垂直的,如果需要水平显示,需要在level上添加is-mobile
:
<nav class="level is-mobile">
4、Media Object
媒体对象普遍存在于社交媒体界面中,它是一个UI元素,非常适合可重复和可嵌套的内容。
样例:
<article class="media">
<figure class="media-left">
<p class="image is-64x64"><img src="https://bulma.io/images/placeholders/128x128.png"></p>
</figure>
<div class="media-content">
<div class="field">
<p class="control"><textarea class="textarea" placeholder="Add a comment..."></textarea></p>
</div>
<nav class="level">
<div class="level-left">
<div class="level-item">
<a class="button is-info">Submit</a>
</div>
</div>
<div class="level-right">
<div class="level-item">
<label class="checkbox"><input type="checkbox"> Press enter to submit</label>
</div>
</div>
</nav>
</div>
</article>
5、Hero
使用hero组件可以在网页上添加全角横幅,该横幅也可以选择覆盖页面的整个高度。该组件的结构如下:
-
hero
:主容器hero-body
:hero的直接子元素,可以放置所有内容
如果要使用全高hero,还需要一个hero-head
和一个hero-foot
。
样例:
可以使用is-primary
、is-warning
等来设置不同的颜色:
<section class="hero is-primary">
<div class="hero-body">
<p class="title">Primary hero</p>
<p class="subtitle">Primary subtitle</p>
</div>
</section>
也可以使用is-small
、is-medium
、is-large
、is-halfheight
、is-fullheight
来设置不同尺寸。
6、Footer
footer
是一个简单的响应式页脚,可以包含标题、列、图标、按钮等任何内容,它的底部填充很多,非常适合作为网页的最后一个元素。
样例:
<footer class="footer">
<div class="content has-text-centered">
<p>
<strong>Bulma</strong> by <a href="https://jgthms.com">Jeremy Thomas</a>. The source code is licensed
<a href="http://opensource.org/licenses/mit-license.php">MIT</a>. The website content
is licensed <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY NC SA 4.0</a>.
</p>
</div>
</footer>
四、列
使用Bulma构建列布局非常简单,只需要:
-
添加一个
columns
容器 -
根据需要添加任意数量的
column
元素
默认情况下,移动设备上列使用垂直布局,如果需要水平显示,则需在columns上添加is-mobile
。
1、大小
可以使用is-three-quarters
、is-two-thirds
、is-half
、is-one-third
、is-one-quarter
、is-full
来更改单个列的大小,其他列将自动填补剩余的空间。
<div class="columns">
<div class="column is-half">First column</div>
<div class="column">Second column</div>
<div class="column">Third column</div>
</div>
- 12列
使用is-1
、is-2
、is-3
、is-4
、is-5
、is-6
、is-7
、is-8
、is-9
、is-10
、is-11
、is-12
来表示12等分下列的大小。
- Offset
可以使用空列在column
元素周围创建水平空白,也可以使用偏移量修饰符.is-offset-x
:
<div class="columns">
<div class="column is-8"></div>
<div class="column notification is-primary">Bulma Column</div>
</div>
或
<div class="columns">
<div class="column is-4 is-offset-8 notification is-primary">Bulma Column</div>
</div>
- Narrow
如果希望某一列仅占用其所需的空间,则可以使用is-narrow
修饰符,其他列将填满剩余空间。
2、嵌套
嵌套列的结构如下:
-
columns
:顶级列容器-
column
-
columns
:嵌套列column
-
-
样例:
<div class="columns has-text-centered">
<div class="column">
<p>First column</p>
<div class="columns">
<div class="column">First nested column</div>
<div class="column">Second nested column</div>
</div>
</div>
<div class="column">
<p>Second column</p>
<div class="columns">
<div class="column">Alpha</div>
<div class="column">Bravo</div>
<div class="column">Charlie</div>
</div>
</div>
</div>
3、间隙
- 默认间隙
列的默认间距为0.75rem
,由于间隙位于列的每一侧,因此两个相邻列之间的间隙将是1.5rem
。
- 无间隙
如果要删除列之间的间隙,只需要在columns容器上添加is-gapless
修饰符即可。
<div class="columns is-gapless">
- 可变间隙
可以在columns容器上添加is-0
、is-1
…is-8
等9个修饰符之一来指定自定义列间距;is-0
相当于is-gapless
;is-3
是默认值;is-8
是最大值2rem
。
除此之外,还要在columns容器上添加is-variable
:
<div class="columns is-variable is-8">
4、配置
- 垂直对齐
在columns容器上添加is-vcentered
可以垂直对齐列:
<div class="columns is-vcentered">
<div class="column is-8">
<p class="bd-notification is-primary">First column</p>
</div>
<div class="column">
<p class="bd-notification is-primary">Second column with more content. This is so you can see the vertical alignment.</p>
</div>
</div>
- 多行
使用is-multiline
修饰符可以添加比单行更多的列:
<div class="columns is-multiline">
<div class="column is-4"><p class="notification is-primary">One third</p></div>
<div class="column is-4"><p class="notification is-primary">One third</p></div>
<div class="column is-4"><p class="notification is-primary">One third</p></div>
<div class="column is-half"><p class="notification is-primary">Half</p></div>
<div class="column is-one-quarter"><p class="notification is-primary">Quarter</p></div>
<div class="column is-one-quarter"><p class="notification is-primary">Quarter</p></div>
<div class="column is-one-quarter"><p class="notification is-primary">Quarter</p></div>
<div class="column"><p class="notification is-primary">Auto</p></div>
</div>
五、元素
1、块
block
元素是Bulma最基本的间隔块,它会使同级HTML元素之间保持一致的边距。block
的CSS样式非常简单:
.block:not(:last-child) {
margin-bottom: 1.5rem;
}
样例:
<div class="block">This text is within a <strong>block</strong>.</div>
<div class="block">This text is within a <strong>second block</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean efficitur sit amet massa fringilla egestas. Nullam condimentum luctus turpis.</div>
<div class="block">This text is within a <strong>third block</strong>. This block has no margin at the bottom.</div>
2、盒子
box
元素是一个简单的容器,带有白色背景,一些填充(padding)和阴影(box shadow):
<div class="box">I'm in a box.</div>
3、按钮
button
是任何设计中的基本元素,此样式可以用在<a>
、<button>
以及类型为submit和reset的<input>
标签上。详细介绍参考:Button
<div class="buttons">
<button class="button is-primary is-light">Primary</button>
<button class="button is-danger">Danger</button>
<button class="button is-link is-outlined">Outlined</button>
<button class="button is-success is-rounded">Rounded</button>
<button class="button is-warning is-loading">Loading</button>
<button class="button is-primary" title="Disabled button" disabled>Disabled</button>
<button class="button">
<span class="icon is-small"><i class="fas fa-home"></i></span>
<span>Home</span>
</button>
</div>
上面使用了图标fa-home
,需要下载引入fontawesome.css
及相关字体文件。
4、内容
content
是用来处理WYSIWYG(所见即所得)生成内容的样式类,其中只有HTML标记可用,几乎可以包含<p>
、<ul>
、<h1>
等所有HTML标签。
当找不到想要的样式类或者想直接使用HTML标签时,可使用content
作为容器。
样例:
<div class="content">
<h1>Hello World</h1>
<ol type="A">
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ol>
</div>
<div class="content is-small">
<blockquote>Hello Bulma</blockquote>
<figure>
<img src="https://bulma.io/images/placeholders/128x128.png">
<img src="https://bulma.io/images/placeholders/128x128.png">
<figcaption>Figure 1: Some beautiful placeholders</figcaption>
</figure>
</div>
5、删除
delete
元素一个带有x
号的圆圈,它是一个独立的元素,可以在不同的上下文中使用。
样例:
<div class="block">
<span class="tag is-success">Hello World<button class="delete is-small"></button></span>
</div>
<article class="message is-info">
<div class="message-header">Info<button class="delete"></button></div>
<div class="message-body">This is a message.</div>
</article>
6、图标
Bulma兼容所有的图标字体库:Font Awesome
、 Ionicons
等。iocn
元素是任何类型的图标字体的容器。
<span>
<span class="icon"><i class="fas fa-book"></i></span>
<span>Book</span>
</span>
<span>
<span class="icon has-text-info"><i class="fas fa-info-circle"></i></span>
<span>Information</span>
</span>
7、图像
由于加载图像可能需要几秒钟的时间或者根本不加载,因此可以使用image
容器指定图像大小,以免布局由于图像加载或图像错误而被破坏。
有7种尺寸可供选择:is-16x16
、is-24x24
、is-32x32
、is-48x48
、is-64x64
、is-96x96
、is-128x128
;
还可以通过添加is-rounded
样式类生成圆形图像;
如果不知道图像准确的尺寸,而是知道比率,则可以使用is-square
、is-1by1
、is-3by2
等比率修饰符。
样例:
<figure class="image is-128x128">
<img class="is-rounded" src="https://bulma.io/images/placeholders/128x128.png">
</figure>
8、通知栏
notification
是一个简单的彩色块,旨在引起用户对某些事物的注意;它可以用作视口中的固定通知。
<div class="notification is-danger">
<button class="delete"></button>
This is an <strong>important</strong> notice.
</div>
<div class="notification is-success is-light">
<button class="delete"></button>
I love you not because of who you are, but because of who I am when I am with you.
</div>
9、进度条
Bulma进度条是一个简单的CSS类,用于设置<progress>
HTML标签的样式。
<progress class="progress is-success" value="60" max="100">60%</progress>
10、表格
只需要在具有以下结构的HTML<table>
元素上附加一个table
样式类即可创建Bulma表格:
-
<table class="table">
:主容器-
thead
:表头,可选 -
tfoot
:表格底部页脚,可选 -
tbody
:内容-
tr
: 表格行-
th
:单元格标题 -
td
:单元格
-
-
-
可以使用is-bordered
样式为所有单元格添加边框;使用is-hoverable
样式为每行添加悬停效果;使用is-fullwidth
样式使用拥有全屏宽度。
如果要选中行,可以在<tr>
上添加is-selected
样式类。
样例:
<table class="table is-hoverable is-bordered is-fullwidth">
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Description</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<th>1</th>
<td>Javascript</td>
<td>Hello World</td>
<td>55</td>
</tr>
<tr class="is-selected">
<th>2</th>
<td><strong>CSS</strong> Framework</td>
<td>Hello Bulma</td>
<td>100</td>
</tr>
</tbody>
</table>
11、标签
Bulma标签是一个很小但用途广泛的元素,可以将信息附加块或其他组件;默认情况下,标签的高度是1.5rem
。
样例:
<div class="block">
<span class="tag is-warning">Warning</span>
<span class="tag is-primary is-light">Primary</span>
<span class="tag is-link is-rounded">Rounded</span>
<span class="tag is-success">Bar<button class="delete is-small"></button></span>
</div>
<div class="tags has-addons">
<span class="tag is-dark">npm</span>
<span class="tag is-info">0.9.1</span>
</div>
12、标题
有两种标题:title
和subtitle
;当组合使用标题和副标题时,它们会相互靠近;如果要保持正常间距,可以在第一个元素上使用is-spaced
样式。
根据经验,一般标题和副标题的大小差异为2。
样例:
<div class="block">
<p class="title is-1">Title 1</p>
<p class="subtitle is-3">Subtitle 3</p>
</div>
<div class="block">
<p class="title is-2 is-spaced">Title 2</p>
<p class="subtitle is-4">Subtitle 4</p>
</div>
六、控件
1、面包屑
面包屑是一个简单的导航组件,仅需要一个breadcrumb
容器和一个ul列表。可以通过is-active
修饰li标签来表示当前页。
- 对齐方式
可以通过在.breadcrumb
容器上添加is-centered
和is-right
来调整面包屑的对齐方式。
- 分隔符
除默认分隔符外,Bulma还提供了has-arrow-separator
、has-bullet-separator
、has-dot-separator
和has-succeeds-separator
四种分隔符。
- 尺寸
有三种尺寸可供选择:is-small
、is-medium
和is-large
。
- 样例
<nav class="breadcrumb">
<ul>
<li><a href="#">Bulma</a></li>
<li><a href="#">Documentation</a></li>
<li><a href="#">Components</a></li>
<li class="is-active"><a href="#" aria-current="page">Breadcrumb</a></li>
</ul>
</nav>
2、页签
Bulma页签(tabs)是一个直接的导航组件,它的结构如下:
-
tabs:主容器
-
<ul>
元素-
li
元素a
元素
-
-
tabs
容器支持使用is-centered
或is-right
来设置对齐方式;使用is-small
、is-medium
、is-large
设置大小;使用is-boxed
样式设置带边框的页签;使用is-toggle
设置选项卡为互斥的(单击其中一个会取消选择其他选项卡);使用is-fullwidth
样式让页签占满整个可用宽度。
样例:
<div class="tabs is-centered">
<ul>
<li class="is-active"><a>Pictures</a></li>
<li><a>Music</a></li>
<li><a>Videos</a></li>
<li><a>Documents</a></li>
</ul>
</div>
<div class="tabs is-boxed">
<ul>
<li class="is-active">
<a>
<span class="icon is-small"><i class="fas fa-image" aria-hidden="true"></i></span>
<span>Pictures</span>
</a>
</li>
<li>
<a>
<span class="icon is-small"><i class="fas fa-music" aria-hidden="true"></i></span>
<span>Music</span>
</a>
</li>
<li>
<a>
<span class="icon is-small"><i class="fas fa-film" aria-hidden="true"></i></span>
<span>Videos</span>
</a>
</li>
<li>
<a>
<span class="icon is-small"><i class="far fa-file-alt" aria-hidden="true"></i></span>
<span>Documents</span>
</a>
</li>
</ul>
</div>
<div class="tabs is-toggle">
<ul>
<li class="is-active">
<a>
<span class="icon is-small"><i class="fas fa-image" aria-hidden="true"></i></span>
<span>Pictures</span>
</a>
</li>
<li>
<a>
<span class="icon is-small"><i class="fas fa-music" aria-hidden="true"></i></span>
<span>Music</span>
</a>
</li>
<li>
<a>
<span class="icon is-small"><i class="fas fa-film" aria-hidden="true"></i></span>
<span>Videos</span>
</a>
</li>
<li>
<a>
<span class="icon is-small"><i class="far fa-file-alt" aria-hidden="true"></i></span>
<span>Documents</span>
</a>
</li>
</ul>
</div>
3、信息
使用信息块可以用来强调页面的一部分,message
的结构如下:
-
message
:主容器-
message-header
:可以包含标题和delete
元素(可选) -
message-body
:信息体
-
可以给message
添加is-danger
等颜色修饰类和is-small
等尺寸修饰类。
样例:
<article class="message is-primary">
<div class="message-header">
<p>Primary</p>
<button class="delete" aria-label="delete"></button>
</div>
<div class="message-body">
<strong>I love you</strong> not because of who you are, but because of who I am when I am with you.
</div>
</article>
<article class="message is-danger">
<div class="message-body">
This is an <strong>important</strong> message.
</div>
</article>
4、模态
可以在模态叠加层(overlay)中包含所需的任何内容,它的结构如下:
-
modal
:主容器-
modal-background
:可以用作点击目标以关闭模态的透明叠加层 -
modal-content
:水平和垂直居中的容器,最大宽度为640px
,可以在其中包含任何内容 -
modal-close
:右上角关闭按钮
-
如果需要激活模态,只需要在modal
容器上添加is-active
样式;还可以在包含modal
的元素上添加is-clipped
防止滚动溢出。
样例一:
<div class="modal is-active">
<div class="modal-background"></div>
<div class="modal-content">
<!-- Any other Bulma elements you want -->
<section class="section">
<div class="box">I love you not because of who you are, but because of who I am when I am with you. </div>
</section>
</div>
<button class="modal-close is-large" aria-label="close"></button>
</div>
样例二:
<div class="modal is-active">
<div class="modal-background"></div>
<div class="modal-content">
<section class="section">
<img src="https://bulma.io/images/placeholders/256x256.png" alt="">
</section>
</div>
<button class="modal-close is-large" aria-label="close"></button>
</div>
其中给section添加了样式:
display: flex;
justify-content: center;
align-items: center;
样例三:
<div class="modal is-active">
<div class="modal-background"></div>
<div class="modal-card">
<header class="modal-card-head">
<p class="modal-card-title">Modal title</p>
<button class="delete" aria-label="close"></button>
</header>
<section class="modal-card-body">
<!-- Content ... -->
<section class="section">
<h1 class="title">Section</h1>
<h2 class="subtitle">
A simple container to divide your page into <strong>sections</strong>, like the one you're currently reading.
</h2>
</section>
</section>
<footer class="modal-card-foot">
<button class="button is-success">Save changes</button>
<button class="button">Cancel</button>
</footer>
</div>
</div>
5、下拉菜单
下拉菜单dropdown
组件是一个下拉按钮和一个下拉菜单的容器,它的结构如下:
-
dropdown
:主容器-
dropdown-trigger
:一个button
的容器 -
dropdown-menu
:下拉菜单,默认隐藏-
dropdown-content
:带有白色背景和阴影(shadow)的下拉框-
dropdown-item
:下拉菜单中的每个下拉项,可以是<a>
或<div>
-
dropdown-divider
:用于分隔下拉项的水平线
-
-
-
dropdown
组件可用的修饰符有:
-
is-hoverable
:鼠标悬停在下拉按钮上时显示该下拉菜单 -
is-active
:下拉菜单将一直显示 -
is-right
:右对齐下拉列表 -
is-up
:下拉菜单在下拉按钮上方显示
样例:
<div class="dropdown is-active">
<div class="dropdown-trigger">
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
<span>Dropdown button</span>
<span class="icon is-small"><i class="fas fa-angle-down" aria-hidden="true"></i></span>
</button>
</div>
<div class="dropdown-menu" id="dropdown-menu" role="menu">
<div class="dropdown-content">
<a href="#" class="dropdown-item">Dropdown item</a>
<a class="dropdown-item">Other dropdown item</a>
<hr class="dropdown-divider">
<a href="#" class="dropdown-item is-active">Active dropdown item</a>
<a href="#" class="dropdown-item">Other dropdown item</a>
<hr class="dropdown-divider">
<a href="#" class="dropdown-item">With a divider</a>
</div>
</div>
</div>
6、导航栏
navbar
是响应式水平导航栏,可以支持图像、链接、按钮和下拉菜单,它的结构如下:
-
navbar
:主容器-
navbar-brand
:位于左侧,总是可见,通常包含logo或一些链接图标navbar-burger
:hamburger图标,用于在触摸设备上打开或收起(toggle)菜单
-
navbar-menu
:位于右侧,触摸设备上隐藏,桌面端可见(1024px
为界线)-
navbar-start
:菜单的左侧,出现在桌面上的导航栏品牌(logo)旁边 -
navbar-end
:菜单的右侧,显示在导航栏的末尾-
navbar-item
:导航栏中的每个项目(item),可以是<a>
或<div>
-
navbar-link
:带有箭头的链接作为下拉菜单的同级项 -
navbar-dropdown
:下拉菜单(dropdown menu),可以包括导航栏项目和分隔线navbar-divider
:导航栏项目的水平分隔线
-
-
-
-
具体可参考:Navbar
- 样例一
brand和burger:brand始终可见,burger在宽度小于1024px
时出现。
<nav class="navbar">
<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">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
</nav>
- 样例二
当宽度大于1024px
时显示navbar-menu
中的内容。
<nav class="navbar">
<!-- left -->
<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">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<!-- right -->
<div class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item">Home</a>
<a class="navbar-item">Documentation</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">More</a>
<div class="navbar-dropdown">
<a class="navbar-item">About</a>
<a class="navbar-item">Contact</a>
<hr class="navbar-divider">
<a class="navbar-item">Jobs</a>
</div>
</div>
</div>
</div>
<!-- navbar-end -->
<div class="navbar-end">
<div class="navbar-item">
<div class="buttons">
<a class="button is-primary"><strong>Sign up</strong></a>
<a class="button is-light">Log in</a>
</div>
</div>
</div>
</div>
</nav>
7、菜单
menu
组件是一个简单的菜单,适用于任何类型的垂直导航,它的结构如下:
-
menu
:主容器-
menu-label
:菜单标签 -
menu-list
:菜单列表,最多可嵌套2级
-
样例:
<aside class="menu">
<p class="menu-label">General</p>
<ul class="menu-list">
<li><a>Dashboard</a></li>
<li>
<a class="is-active">Customers</a>
<ul>
<li><a>Normal</a></li>
<li><a>VIP</a></li>
</ul>
</li>
</ul>
<p class="menu-label">Administration</p>
</aside>
8、分页
pagination
是一个响应式的分页组件,它的结构如下:
-
pagination-previous
和pagination-next
用于增量导航 -
pagination-list
:分页项(item)列表-
pagination-link
:页码 -
pagination-ellipsis
:范围分隔符(…)
-
所有元素都是可选的,因此可以根据实际需要创建分页。
分页组件可用的修饰符有:
-
is-centered
、is-right
:对齐方式 -
is-rounded
:圆形分页项 -
is-small
、is-medium
、is-large
:调整尺寸
样例:
<nav class="pagination is-small" role="navigation" aria-label="pagination">
<a class="pagination-previous">Previous</a>
<a class="pagination-next">Next page</a>
<ul class="pagination-list">
<li><a class="pagination-link" aria-label="Goto page 1">1</a></li>
<li><span class="pagination-ellipsis">…</span></li>
<li><a class="pagination-link" aria-label="Goto page 45">45</a></li>
<li><a class="pagination-link is-current" aria-label="Page 46" aria-current="page">46</a></li>
<li><a class="pagination-link" aria-label="Goto page 47">47</a></li>
<li><span class="pagination-ellipsis">…</span></li>
<li><a class="pagination-link" aria-label="Goto page 86">86</a></li>
</ul>
</nav>
大于768px
:
小于等于768px
:
9、卡片
card
组件是一个灵活而且可以组合的组件,它的结构如下:
-
card
:主容器-
card-header
:卡片标题-
card-header-title
:左对齐的粗体文本 -
card-header-icon
:图标的占位符
-
-
card-image
:响应式图像的全宽(fullwidth)容器 -
card-content
:用于包含其他元素的容器 -
card-footer
:卡片页脚,一个横向组件列表card-footer-item
:列表项
-
样例:
<div class="card">
<div class="card-image">
<figure class="image is-4by3">
<img src="https://bulma.io/images/placeholders/1280x960.png" alt="Placeholder image">
</figure>
</div>
<header class="card-header">
<p class="card-header-title">Component</p>
<a class="card-header-icon" aria-label="more options">
<span class="icon">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</a>
</header>
<div class="card-content">
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.
<a href="#">@bulmaio</a>. <a href="#">#css</a> <a href="#">#responsive</a>
<br>
<time datetime="2016-1-1">11:09 PM - 1 Jan 2016</time>
</div>
</div>
<footer class="card-footer">
<a href="#" class="card-footer-item">Save</a>
<a href="#" class="card-footer-item">Edit</a>
<a href="#" class="card-footer-item">Delete</a>
</footer>
</div>
10、面板
panel
是一个可组合控件的面板,它的结构如下:
-
panel
:主容器-
panel-heading
:标题,面板的第一个元素 -
panel-tabs
:用于导航 -
panel-block
:可以包含其他元素,例如:-
control
-
input
-
button
-
panel-icon
-
-
panel-block
也可以是一个带有复选框(checkbox)的<a>
标签或<label>
标签。
样例:
<article class="panel is-success">
<p class="panel-heading">Success</p>
<p class="panel-tabs">
<a class="is-active">All</a>
<a>Public</a>
<a>Private</a>
<a>Sources</a>
<a>Forks</a>
</p>
<div class="panel-block">
<p class="control has-icons-left">
<input class="input is-success" type="text" placeholder="Search">
<span class="icon is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</p>
</div>
<a class="panel-block is-active">
<span class="panel-icon"><i class="fas fa-book" aria-hidden="true"></i></span>bulma
</a>
<a class="panel-block">
<span class="panel-icon"><i class="fas fa-book" aria-hidden="true"></i></span>marksheet
</a>
<a class="panel-block">
<span class="panel-icon"><i class="fas fa-book" aria-hidden="true"></i></span>jgthms.github.io
</a>
<label class="panel-block">
<input type="checkbox">remember me
</label>
<div class="panel-block">
<button class="button is-link is-outlined is-fullwidth">Reset all filters</button>
</div>
</article>
七、表单
Bulma支持以下几种HTML表单元素:<form>
、<button>
、<input>
、<textarea>
、<label>
。
为了保持设计的均匀平衡,Bulma提供了一个非常有用的control
容器来包装表单控件。如果在表单中组合多个控件时,可以将field
样式类添加到容器中使间距保持一致。
<form>
<div class="field">
<label class="label">Name</label>
<div class="control">
<input class="input" type="text" placeholder="Text input">
</div>
</div>
<div class="field">
<label class="label">Message</label>
<div class="control">
<textarea class="textarea" placeholder="Textarea"></textarea>
</div>
</div>
</form>
1、输入框
Bulmainput
样式类适用于type属性为text
、password
、email
和tel
的<input>
元素。
- 颜色
可以在input
元素上添加is-primary
、is-link
、is-danger
等样式来设置输入框颜色。
- 大小
可以在input
元素上添加is-small
、is-normal
、is-medium
等样式来设置输入框大小。
- 圆角
可以通过is-rounded
样式类将input
元素设置为圆角。
- 状态
可以通过is-hovered
、is-focused
、is-loading
样式类和readonly
、disabled
属性分别设置输入框的各种状态。
- 附加图标
可以通过在input
元素上添加has-icons-left
和has-icons-right
构造带有图标的输入框;同时,需要在图标上添加对应的icon is-left
或icon is-right
样式。
- 样例
<div class="field">
<input class="input is-primary" type="text" placeholder="Primary input">
</div>
<div class="field">
<input class="input is-normal" type="text" placeholder="Normal input">
</div>
<div class="field">
<input class="input is-rounded" type="text" placeholder="Rounded input">
</div>
<div class="field">
<div class="control">
<input class="input is-focused" type="text" placeholder="Focused input">
</div>
</div>
<div class="field">
<div class="control is-loading">
<input class="input" type="text" placeholder="Loading input">
</div>
</div>
<div class="field">
<div class="control">
<input class="input" type="text" placeholder="Disabled input" disabled>
</div>
</div>
<div class="field">
<div class="control has-icons-left has-icons-right">
<input class="input" type="email" placeholder="Email">
<span class="icon is-small is-left"><i class="fas fa-envelope"></i></span>
<span class="icon is-small is-right"><i class="fas fa-check"></i></span>
</div>
</div>
2、多行文本框
Bulma的textarea
样式类是input
元素的多行版本,用法与input
类似:
<div class="field">
<textarea class="textarea is-primary" placeholder="Primary textarea"></textarea>
</div>
<div class="field">
<div class="control">
<textarea class="textarea is-focused" placeholder="Focused textarea"></textarea>
</div>
</div>
<div class="field">
<div class="control is-loading">
<textarea class="textarea" placeholder="Loading textarea"></textarea>
</div>
</div>
<div class="field">
<div class="control">
<textarea class="textarea" placeholder="Disabled textarea" disabled></textarea>
</div>
</div>
<div class="field">
<div class="control">
<textarea class="textarea" readonly>This content is readonly</textarea>
</div>
</div>
<div class="field">
<div class="control">
<textarea class="textarea has-fixed-size" placeholder="Fixed size textarea"></textarea>
</div>
</div>
3、下拉列表
select
样式类是对HTML<select>
元素做了包装,这使样式更具灵活性并支持图标。
- 多选
可以通过is-multiple
修饰符和multiple
来设置多选下拉列表。
- 其他
颜色、大小、圆角、状态、图标等的用法与input
类似。
- 样例
<div class="field">
<div class="select">
<select>
<option>Select dropdown</option>
</select>
</div>
</div>
<div class="field">
<div class="select is-multiple">
<select multiple size="3">
<option value="Apple">Apple</option>
<option value="Banana">Banana</option>
<option value="Lemon">Lemon</option>
<option value="Pineapple">Pineapple</option>
<option value="Strawberry">Strawberry</option>
</select>
</div>
</div>
<div class="field">
<div class="select is-link">
<select>
<option>Select dropdown</option>
</select>
</div>
</div>
<div class="field">
<div class="select is-loading">
<select>
<option>Select dropdown</option>
</select>
</div>
</div>
<div class="field">
<div class="select is-rounded">
<select>
<option>Rounded Select</option>
</select>
</div>
</div>
<div class="field">
<div class="control has-icons-left">
<div class="select">
<select>
<option selected>Strawberry</option>
</select>
</div>
<div class="icon is-small is-left">
<i class="fas fa-globe"></i>
</div>
</div>
</div>
4、复选框
checkbox
样式类是对HTML<input type="checkbox">
元素做了包装,Bulma故意不设置它的样式,以保留跨浏览器的兼容性和用户体验。
样例:
<div class="field">
<label class="checkbox">
<input type="checkbox">Remember me
</label>
</div>
<div class="field">
<label class="checkbox">
<input type="checkbox">I agree to the <a href="#">terms and conditions</a>
</label>
</div>
<div class="field">
<label class="checkbox" disabled>
<input type="checkbox" disabled>Save my preferences
</label>
</div>
5、单选框
radio
样式类是对HTML<input type="radio">
元素做了包装,与checkbox
类似,也没有设置样式。
样例:
<div class="field">
<div class="control">
<label class="radio">
<input type="radio" name="answer" checked>Yes
</label>
<label class="radio">
<input type="radio" name="answer">No
</label>
</div>
</div>
<div class="field">
<div class="control">
<label class="radio">
<input type="radio" name="rsvp">Going
</label>
<label class="radio">
<input type="radio" name="rsvp">Not going
</label>
<label class="radio" disabled>
<input type="radio" name="rsvp" disabled>Maybe
</label>
</div>
</div>
6、文件
file
元素是包装了<input type="radio">
元素的简单交互式标签,它的结构如下:
-
file
:主容器-
file-label
:元素的实际互动和可点击部分-
file-input
:native file input,出于样式目的而隐藏 -
file-cta
:文件上传引导提示(call-to-action)-
file-icon
:图标 -
file-label
:类似“请选择文件…”的文本
-
-
file-name
:所选文件名
-
-
样例:
<div class="field">
<div class="file">
<label class="file-label">
<input class="file-input" type="file" name="resume">
<span class="file-cta">
<span class="file-icon"><i class="fas fa-upload"></i></span>
<span class="file-label">Choose a file...</span>
</span>
</label>
</div>
</div>
<div class="field">
<div class="file is-info has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume">
<span class="file-cta">
<span class="file-icon"><i class="fas fa-upload"></i></span>
<span class="file-label">Choose a file...</span>
</span>
<span class="file-name">ScreenShot202103162020.png</span>
</label>
</div>
</div>
<div class="field">
<div class="file is-centered is-boxed is-success has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume">
<span class="file-cta">
<span class="file-icon"><i class="fas fa-upload"></i></span>
<span class="file-label">Centered</span>
</span>
<span class="file-name">ScreenShot202103162020.png</span>
</label>
</div>
</div>
7、控件组
如果要将控件分组到一起,只需在field
容器上添加is-grouped
修饰符,之后可以通过is-grouped-centered
或is-grouped-right
修饰符来调整对齐方式:
<div class="field is-grouped">
<p class="control">
<a class="button is-primary">Submit</a>
</p>
<p class="control">
<a class="button is-light">Cancel</a>
</p>
</div>
<div class="field is-grouped is-grouped-centered">
<p class="control">
<a class="button is-primary">Submit</a>
</p>
<p class="control">
<a class="button is-light">Cancel</a>
</p>
</div>
可以通过在control
元素上添加is-expanded
修饰符来让该元素填满剩余空间;通过在field
元素上添加is-grouped-multiline
修饰符实现控件多行显示:
<div class="field is-grouped">
<p class="control is-expanded">
<input class="input" type="text" placeholder="Find a repository">
</p>
<p class="control">
<a class="button is-info">Search</a>
</p>
</div>
<div class="field is-grouped is-grouped-multiline">
<p class="control">
<a class="button">One</a>
</p>
<p class="control">
<a class="button">Two</a>
</p>
<p class="control">
<a class="button">Three</a>
</p>
<p class="control">
<a class="button">Four</a>
</p>
<p class="control">
<a class="button">Five</a>
</p>
<p class="control">
<a class="button">Six</a>
</p>
<p class="control">
<a class="button">Seven</a>
</p>
<p class="control">
<a class="button">Eight</a>
</p>
<p class="control">
<a class="button">Nine</a>
</p>
<p class="control">
<a class="button">Ten</a>
</p>
</div>
8、样例
<section class="section">
<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 has-icons-right">
<input class="input is-success" type="text" placeholder="请输入用户名" value="bulma">
<span class="icon is-small is-left"><i class="fas fa-user"></i></span>
<span class="icon is-small is-right"><i class="fas fa-check"></i></span>
</div>
<p class="help is-success">此用户名可用</p>
</div>
<div class="field">
<label class="label">邮箱</label>
<div class="control has-icons-left has-icons-right">
<input class="input is-danger" type="email" placeholder="Email input" value="hello@apple.com">
<span class="icon is-small is-left"><i class="fas fa-envelope"></i></span>
<span class="icon is-small is-right"><i class="fas fa-exclamation-triangle"></i></span>
</div>
<p class="help is-danger">此邮件已被注册</p>
</div>
<div class="field">
<label class="label">性别</label>
<div class="control">
<label class="radio">
<input type="radio" name="sex" checked>男
</label>
<label class="radio">
<input type="radio" name="sex">女
</label>
</div>
</div>
<div class="field">
<label class="label">爱好</label>
<div class="control">
<div class="select">
<select>
<option>读书/旅行</option>
<option>电影/音乐</option>
</select>
</div>
</div>
</div>
<div class="field">
<label class="label">备注</label>
<div class="control">
<textarea class="textarea" placeholder=""></textarea>
</div>
</div>
<div class="field">
<div class="control">
<label class="checkbox">
<input type="checkbox">已阅读并同意<a href="#">条款和条件</a>
</label>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-link">提交</button>
</div>
<div class="control">
<button class="button is-link is-light">取消</button>
</div>
</div>
</section>