Bootstrap 是由 Twitter 所开发的一个免费的网页框架, 它提供了许多从基本到进阶的 CSS 和 JavaScript 功能, 让网页开发者可以很快速地把网页架起来, 同时还兼顾了还算不错的美感。通常, 网页设计师不会、也不懂得美工设计, 所以我们如果只是很单地把网页建立起来, 很不幸的, 这个网页通常不会跟「美观」这两个字有交集。但是有了 Bootstrap, 你的网页很容易就能让人为之惊艳 (尤其是跟之前的做法对比的话)。
当然, 我不是说 Bootstrap 从此会让美工人员丢掉工作。我相信美工人员也会感谢 Bootstrap 的存在, 这样至少可以让网页在进行layout
Bootstrap 基础
说穿了, 对初学者而言, 你只需要搞懂两点, 就可以掌扫 Bootstrap 的基础原理。第一点, 就是它的所谓 Grid 系统; 第二点, 就是藉由加入组件的 CSS 类别以更改它的长相。以下, 我会做个简单地说明。
所谓的 Grid 系统, 你不要顾名思义, 以为它跟 ASP.NET 的 GridView 控件有任何关系。事实上, 这两者一点关系也没有。
但是如果你把它想象为就是像 Excel 的那种网格线布置, 或者 HTML 的 <table> 组件, 你应该就能立刻进入情况。
当你打开 Excel 时, 一张空的工作表应该长得像如下的样子:
[
]
这是一张十二栏的表。
如果你要使用这个表来画你的网页的 Layout 的话, 或许你会这样画:
[
]
这么一来, Header 就是一个横跨十二栏宽的区块, 然后左边的 Navigation 占两个栏宽、Content 占去右边十个栏宽, 而最下方的 Footer 又是横跨十二个栏宽。
Bootstrap 框架的 Grid 系统就是基于类似的原理而设计的。所以, 你只需要在程序中这样写就行了:
程序 1. 套用 Bootstrap 的 HTML 网页
实际执行结果如下图所示:
[
]
你可以发现, 你可以藉由控制 span* 而决定每个方块有多宽, 其方式则是在 div 元素中加入相对的 CSS 类别。
在上面程序中, 最重要的部份有如下几点:
请使用 HTML5 语法标示 (即第一行的 <!DOCTYPE html>)。 加上 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 这一行。 把 bootstrap.css 和 bootstrap-responsive.css 两个档案加上去。在这里, 它的路径是 NuGet 套件指定的; 我待会会再提到。 请注意各个 div 元素的写法。其原则很像 table 元素, 在最外面包一个 div, 其 CSS 类别为 container (模拟为 table), 每一列都是 row (模拟为 tr), 中间则是 span* (模拟为 td – colspan), 每一列不要超过 12 个 span 的宽度就行。 在程序中加上 jquery 和 bootstrap.js 这两个 JavaScript 档案。
上述这五个注意事项就是一个 bootstrap 网页的基本写法。其中除了 div 群组的写法之外, 其它部份几乎都不需要变动。所以, 你也许可以看出来, 这个框架非常适合以 ASP.NET 的 Master Page 来实作。不过, 为了让这个范例程序容易被了解, 所以我把每个 Div 元素都加上边框。实际上不需要这样做。
在 ASP.NET 项目中取得 Bootstrap
你可以从 Bootstrap 官网中下载 Bootstrap, 也可以从 VS2012 中直接下载并安装 (VS2013 建立的 Web Form 项目已经预设会加载 Bootstrap, 无需另外安装)。假设我现在从 VS2012 中新增了一个 ASP.NET 的 Web Form 空白项目, 我可以使用 NuGet 直接搜寻 bootstrap 并且进行安装:
[
]
安装完毕之后, NuGet 会把相关档案拷贝到项目的子目录里面:
[
]
上图中以黄色底色标示的部份, 就是 Bootstrap 会用到的所有档案 (VS2013 预设加载 Bootstrap, 其路径又略有不同, 请读者留意)。你可以发现, NuGet 可能会一并下载 jQuery 1.9.1 的版本, 你可以自行选择是否另外下载 1.10.2 或者 2.0.2 以上的版本。
在 Bootstrap 官网中, 你可以客制化 Bootstrap 的档案内容以节省空间。如果你下载了这个客制化的版本, 那么你可以把原来的版本覆盖上去, 或者另外找地方放置, 或者改名; 你应该自己想清楚应该如何进行版本的管理。
值得注意的是, 在 bootstrap.css
套上 Master Page
仔细看看程序 1. 的写法, 我们将发现 Bootstrap 的 Grid Layout 很容易套用到 Master Page。
以下, 我建立一个 Master Page, 内容就是从程序 1 修改而来的:
程序 2. 套用 Bootstrap 的 Master Page
在这个程序中, 其架构几乎是原封不动地从程序 1 搬过来。但是我把 Header、Navigator 和 Footer 分别使用三个 User Control 予以取代, 如此我们只需个别修改这三个 User Control, 在所有网页里就会同时生效。只有 Head 区段以及 Content 部份才套用 ContentPlaceHolder, 以方便个别网页可以加入比较特殊的组件, 例如样式表单或者 JavaScript 等等。
接着, 我要设计一个套用这个 Master Page 的网页:
程序 3. 套用 Master Page 的网页
基本上, 这个网页和另外三个 User Control 的写法是相当类似的。你应该依情况设计自己想要的内容。
这个网页的长相如下:
[
]
套进 ASP.NET 控件
当我们把网站套上 Bootstrap 之后, 我们只需对某个 HTML 标签赋予 CSS 类别, 就可以改变该控件的长相或行为。同样的道理对 ASP.NET 的控件也是有效的; 只要我们能够将它套上 CSS 类别就行。例如, 你可以很简单地把一个 Label 控件加上 CSS 类别, 让它变成一个按钮:
<asp:Label CssClass="btn btn-danger" ID="Literal1" runat="server" >变成按钮</asp:Label>
以下, 我将使用 GridView 作为例子:
程序 4. 套用 Bootstrap 格式的 GridView 控件
在上述 GridView 程序代码中, 为求精简, 我把不需要的卷标和属性都拿掉了, 请读者留意。原则上, 只要控件里面有 CssClass 属性, 你就可以把 Bootstrap 的 CSS 类别加上去。不过有时候你必须把某个 BoundField 转换成 TemplateField, 才有办法加上 CSS 类别。但是在某些状况下, ASP.NET 所提供的功能优于使用 Bootstrap; 例如表格的交叉底色, 使用 AlternatingRowSyle 来指定, 会比使用 Bootstrap 的 table-striped 来得好。所以你可以看到我并没有采用 table-striped。
Bootstrap 学习资源
到这里为止, 我已经把 Bootstrap 的最重要原理讲述并示范了一遍, 也教你如何套用到 ASP.NET 了。接着, 应该足够你自己试着着手了。
要学习 Bootstrap, 我找到如下的一系列相当棒的教学影片。虽然这些影片讲得非常的简单, 而且使用英语, 但是, 请相信我, 讲师的英语并没有任何艰涩的单字, 又辅以画面协助, 应该不难听懂才对。由于这些影片已经把最重要基础知识都说了, 所以我在本文中就不多赘述了。
Twitter Boostrap Tutorial 1 – Navbars
Twitter Boostrap Tutorial 2 – Fixed Navbars
Twitter Boostrap Tutorial 3 – Grid Layouts
Twitter Boostrap Tutorial 4 – Modal Dialogs
Twitter Boostrap Tutorial 5 – Dynamic Modal Dialogs
Twitter Boostrap Tutorial 6 – Tooltips
Twitter Boostrap Tutorial 7 – Table Styles
Twitter Boostrap Tutorial 8 – Forms
Twitter Boostrap Tutorial 9 – Tabs
此外, KKBruce 很佛心地把 Bootstrap 官网义务翻译成了中文。想看中文说明的朋友可以前往参考。
注意事项
Bootstrap 框架把太多东西写死在档案里面, 除了上面提过的图文件路径之外, 它甚至连字型都写死为 "Helvetica Neue",Helvetica,Arial,sans-serif。因此, 如果你不想另外写在其它的 CSS 档案里, 那么或许你会想要把 bootstrap.css
请在标头的批注处注明这个档案已经遭到修改, 并注明为何更改、改了什么等等。 最好把档案的编辑方式从 ANSI 改为 UTF-8, 如此, 假设你把字体改成例如微软正黑体, 它才会生效。 参考数据: davethesoftwaredev 的教学影片 KKBruce.tw Bootstrap 官网