最近研究bootstrap ,看到来w3cplus上的一篇文章,感觉有用就收下了,原文连接在这里。
自从一年前Twitter推出Bootstrap以来,它的推广程度就像火箭发射一样节节攀升。这个广受欢迎的CSS框架为众多网站提供了响应式网格系统,预定义样式的组件与JavaScript插件。
Bootstrap的设计初衷之一就是实用。当你要新建网站时,Bootstrap绝对是一个节约时间的利器,以至于许多庞大的组织比如NBC,NASA还有白宫都选择了它。它甚至还可以让我们之中不懂设计的人也能做出很体面的网站。
举个例子,要想将下面左边的默认按钮变成右面漂亮的按钮,你只需要增加两个class:btn与btn-primary。
浏览器默认按钮(左)与Bootstrap按钮(右)
但如果你公司的logo使用了不一样的蓝色阴影呢?别担心,你没有必要坚持使用默认主题。这篇文章将介绍几种自定义Bootstrap的方法来满足你的需求,不管你是想微调一个按钮,还是一个完整的主题。
来自于Bootswatch的三种Bootstrap主题
最直接的方式是用CSS覆盖掉Bootstrap的默认样式。可以通过针对Bootstrap中使用的class编写你自己的样式来实现。比如说,可以通过增加以下代码来使你的按钮变得更圆滑:
.btn {
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
border-radius: 20px;
}
一个增加了border radius的自定义的Bootstrap按钮。
为了能够成功覆盖,记得在Bootstrap的声明之后增加你的代码。
这种方法的优点在于它几乎不会改变你的工作流程。即便使用了Bootstrap,你还是需要自己的样式表来使框架适合你的内容。你可能没有意识到,Bootstrap自己的网站还依赖了除Bootstrap框架外的上千行样式。
但是对于更彻底的修改(比如重新设计导航栏)或是非局部的修改(比如修改适用于整个网站的高亮颜色)来说,这样东一块,西一块的覆盖样式更像是一种打补丁式的解决方案。而且你的新样式要添加到Bootstrap的默认样式表里,让本已经100 KB的文件越发臃肿。如果你不仅仅想要做一些覆盖,那就要考虑一种更具扩展性的方法了。
一个替代方案是创建一个彻底的自定义构建。借助官方的生成器,你可以将框架内使用的关键变量设置成自己需要的值,比如说 @linkColor,@navbarHeight 和 @baseFontFamily。点击生成器页面底部的大按钮就可以下载最终的样式表。你甚至还能对框架包含的组件进行挑选,这样能够减少文件的体积。
一些能够在官方生成器中设置的变量。
网上还有一些第三方生成器。与官方版本不同,它们提供了调整变量时的动态预览效果。Bootswatchr网站使用变量来组织,而StyleBootstrap则使用组件。BootTheme添加了扔骰子特性来随机设置值。如果幸运女神不站在你这边,Lavish能够根据你提供的任何图片来生成一个主题,PaintStrap则是根据已有的配色方案来生成。
即便有上百个能定制的变量,你可能还是会发现生成器有诸多限制。或者你不想在浏览器中完成这样的工作,因为这会减少与你的工作流程的集成度。无论处于哪种情况,都是时候深入研究下Bootstrap的源码了。
作为一个开源项目,Bootstrap的源码可以自由(ZIP格式)下载。
打开源码,你会发现Bootstrap的样式是用LESS而不是CSS写的。LESS 是一种动态样式表语言,相比于CSS,它支持多种优秀特性,包括选择器嵌套,创建变量(就像在上面生成器中使用的)。一旦写完,你可以选择将LESS代码预先或在运行时编译成 CSS。如果你喜欢 Sass,可以使用这个适用于Sass的Bootstrap。
在 less 文件夹中,你会看到许多按照组件来划分的 LESS 文件。
组成Bootstrap源码的 LESS 文件
留意以下这些文件:
打开 LESS 文件,看看Bootstrap是如何为每个组件设置样式的。举例来说,在buttons.less中,.btn-large类的规则是这样的:
.btn-large {
padding: 9px 14px;
font-size: @baseFontSize + 2px;
line-height: normal;
.border-radius(5px);
}
如你所见,代码看起来和 CSS 非常像。但它也确实有一些 LESS 独有的功能。在font-size声明中,变量@baseFontSize——在variables.less中声明——与一个加法操作组合起来计算得到结果。在mixins.less中定义的.border-radius混合能够自动帮你处理浏览器前缀。
你可以通过修改这些 LESS 文件来实现自定义。先从variables.less中的值开始,然后再尝试下其余源码中的样式。好好享受吧!
在你做完修改并准备查看效果时,你需要把文件编译成 CSS。要完成这个工作,你需要先安装 LESS。关于安装有许多方式;对于初学者来说,我建议使用一个叫做LESS.app的客户端程序。如果你喜欢命令行,可以选择安装包含Node Package Manager(NPM)的Node.js。然后执行如下命令:
npm install less
当安装结束后,你可以这样来编译bootstrap.less:
lessc bootstrap.less > bootstrap.css
如果想编译压缩版本,使用这个命令:
lessc --compress bootstrap.less > bootstrap.min.css
无论你使用哪种方式编译,编译的目标只能是bootstrap.less,而并非其他任何文件。
你可能注意到了上面方法的缺陷。那就是你修改的内容与原始文件纠缠在了一起。结果当Bootstrap不可避免的因为修复bug或增加新功能而进行升级时,你根本不可能将自定义的内容更新到新的版本上。
为了避免出现这个问题,你需要模块化你的修改。这是我为Bootswatch制作主题时的采取的方法。
首先,我下载了Bootstrap的源代码,把它的名字修改为bootstrap后原封不动的放好。我并没有对它包含的文件进行任何修改,而是新创建了一个单独的文件夹,取名为custom,含有如下三个文件:
@import "../bootstrap/less/bootstrap.less";
@import "custom-variables.less";
@import "custom-other.less";
@import "../bootstrap/less/utilities.less";
修改内容被分隔开后,你可以很轻松的升级到Bootstrap的新版本。只需要将旧bootstrap文件夹替换,再重新编译即可。
我为这种方法创建了一个叫做swatchmaker的样板文件。它还包含了其他内容,例如测试页面和更新Bootstrap到最新版的命令,当修改被保存时执行自动编译,还可以重置你自定义的内容。
下面介绍一些在你自定义Bootstrap时可能会用到的技巧与技术。
阅读官方文档,熟悉所有组件,深入学习源码。如果你经常需要自定义Bootstrap,在这些内容上的投入所带来的回报将会物超所值。
.navbar .brand {
color: @white;
}
.navbar .nav > li > a {
color: @grayLighter;
}
试试这个:
.navbar {
.brand {
color: @white;
}
.nav > li > a {
color: @grayLighter;
}
}
你想添加自己的技巧吗?请分享在下面的留言中吧。
如果你注重性能——通常来说应该如此——那么你最好在一个更轻量级的基础上实现自己的解决方案。
但如果你的首要目标是尽快上线你的网站,或者前端开发并非你的强项,那么Twitter Bootstrap可能正适合你。许多人就是因为Bootstrap的人气而纷纷转向这个阵营。
鉴于Bootstrap在Web上的大量应用,你要学习它的所有优点并让其为你所用。
扩展阅读
- How to Build a Website Using Twitter Bootstrap and SASS – Part 1
- How to Build a Website Using Twitter Bootstrap and SASS – Part 2
- GETTING STARTED WITH BOOTSTRAP: PART 1 OF SERIES
- GETTING STARTED WITH BOOTSTRAP: PART 2 OF SERIES
- GETTING STARTED WITH BOOTSTRAP: PART 3 OF SERIES
- How to Customize Twitter Bootstrap’s Design in a Rails app
- How to use Twitter Bootstrap to Create a Responsive Website Design
- Twitter BootStrap:前端框架利器
- CSS——Bootstrap From Twitter
- Mark Otto(马克奥托)的BootStrap.less
- Preboot
- Twitter Bootstrap Tutorials
- The Best BootStrap Resources
——大漠
译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!
关于Sunnylost
08年开始自学java,09年加入北漂行列,从事Java Web工作,出于对JavaScript的喜爱,在2011年以外包身份进入新浪微博从事JS开发,目前就职于一淘。由于工作关系,逐步接触CSS,开始完善自身的前端技能。欢迎随时关注我:新浪微博
如需转载烦请注明出处:
英文原文:http://coding.smashingmagazine.com/2013/03/12/customizing-bootstrap/
中文译文:http://www.w3cplus.com/css/customizing-bootstrap.html