Bootstrap 简洁、直观、强悍、移动设备优先的前端开发框架,让web开发更迅速、简单。
从2.x升级到3.0版本
Bootstrap 3并不向后兼容Bootstrap v2.x。下面章节列出的内容可以作为从v2.x升级到v3.0的通用指南。如果需要更多信息,可以查看更新记录这篇官方博文。
class的主要变化
表格中列出了v2.x 和 v3.0之间样式表的变更。
| Bootstrap 2.x | Bootstrap 3.0 | 
|---|---|
.container-fluid | 
.container | 
.row-fluid | 
.row | 
.span* | 
.col-md-* | 
.offset* | 
.col-md-offset-* | 
.brand | 
.navbar-brand | 
.nav-collapse | 
.navbar-collapse | 
.nav-toggle | 
.navbar-toggle | 
.btn-navbar | 
.navbar-btn | 
.hero-unit | 
.jumbotron | 
.icon-* | 
.glyphicon .glyphicon-* | 
.btn | 
.btn .btn-default | 
.btn-mini | 
.btn-xs | 
.btn-small | 
.btn-sm | 
.btn-large | 
.btn-lg | 
.alert-error | 
.alert-danger | 
.visible-phone | 
.visible-xs | 
.visible-tablet | 
.visible-sm | 
.visible-desktop | 
.visible-md | 
.hidden-phone | 
.hidden-xs | 
.hidden-tablet | 
.hidden-sm | 
.hidden-desktop | 
.hidden-md | 
.input-small | 
.input-sm | 
.input-large | 
.input-lg | 
.control-group | 
.form-group | 
.checkbox.inline .radio.inline | 
.checkbox-inline .radio-inline | 
.input-prepend .input-append | 
.input-group | 
.add-on | 
.input-group-addon | 
.thumbnail | 
.img-thumbnail | 
ul.unstyled | 
.list-unstyled | 
ul.inline | 
.list-inline | 
.muted | 
.text-muted | 
.text-error | 
.text-danger | 
.table .error | 
.table .danger | 
.bar | 
.progress-bar | 
.bar-* | 
.progress-bar-* | 
.accordion | 
.panel-group | 
.accordion-group | 
.panel .panel-default | 
.accordion-heading | 
.panel-heading | 
.accordion-body | 
.panel-collapse | 
.accordion-inner | 
.panel-body | 
.alert-error | 
.alert-danger | 
新增class
我们新增了一些页面元素,同时也对一些原有的元素进行了修改。下面列出了新增或更新之后的样式表。
| 页面元素 | 描述 | 
|---|---|
| Panels | .panel .panel-default .panel-body .panel-title .panel-heading .panel-footer.panel-collapse | 
| List groups | .list-group .list-group-item .list-group-item-text .list-group-item-heading | 
| Glyphicons | .glyphicon | 
| Jumbotron | .jumbotron | 
| Extra small grid (<768px) | .col-xs-* | 
| Small grid (≥768px) | .col-sm-* | 
| Medium grid (≥992px) | .col-md-* | 
| Large grid (≥1200px) | .col-lg-* | 
| Responsive utility classes (≥1200px) | .visible-lg .hidden-lg | 
| Offsets | .col-sm-offset-* .col-md-offset-* .col-lg-offset-* | 
| Push | .col-sm-push-* .col-md-push-* .col-lg-push-* | 
| Pull | .col-sm-pull-* .col-md-pull-* .col-lg-pull-* | 
| Input groups | .input-group .input-group-addon .input-group-btn | 
| Form controls | .form-control .form-group | 
| Button group sizes | .btn-group-xs .btn-group-sm .btn-group-lg | 
| Navbar text | .navbar-text | 
| Navbar header | .navbar-header | 
| Justified tabs / pills | .nav-justified | 
| Responsive images | .img-responsive | 
| Contextual table rows | .success .danger .warning .active | 
| Contextual panels | .panel-success .panel-danger .panel-warning .panel-info | 
| Modal | .modal-dialog .modal-content | 
| Thumbnail image | .img-thumbnail | 
| Well sizes | .well-sm .well-lg | 
| Alert links | .alert-link | 
被移除的class
以下列出的页面元素已经在v3.0版本中被去除或修改。
| 页面元素 | 从2.x版本中去除 | 3.0版本中对应的元素 | 
|---|---|---|
| Form actions | .form-actions | 
N/A | 
| Search form | .form-search | 
N/A | 
| Fluid container | .container-fluid | 
.container (no more fixed grid) | 
| Fluid row | .row-fluid | 
.row (no more fixed grid) | 
| Controls wrapper | .controls | 
N/A | 
| Controls row | .controls-row | 
.row or .form-group | 
| Navbar inner | .navbar-inner | 
N/A | 
| Navbar vertical dividers | .navbar .divider-vertical | 
N/A | 
| Dropdown submenu | .dropdown-submenu | 
N/A | 
| Tab alignments | .tabs-left .tabs-right.tabs-below | 
N/A | 
| Nav lists | .nav-list .nav-header | 
No direct equivalent, but List groups and .panel-groups are similar. | 
额外注意
Other changes in v3.0 are not immediately apparent. Base classes, key styles, and behaviors have been adjusted for flexibility and ourmobile first approach. Here's a partial list:
有些v3.0中的多修改并不能从表面直接看到。我们对基本class、关键样式和行为都进行了调整,使其更灵活并且适应移动设备优先这一目标。下面是一个部分列表:
- 文本表单控件全部预设为100%宽度。用
<div class="col-*"></div>包裹输入框即可控制器宽度。 .badge不再保留状态相关的class(-success、-primary等)。.btn必须和.btn-default一起使用才能获得“默认”样式的按钮。.container和.row目前是基于百分比定义的宽度。- 默认情况下,图片不具有由响应式特性,需要使用
.img-responsive才能让<img>实现响应式可变大小。 - 图标,
.glyphicon,演变为字体图标。每个图标都需要一个基本class和一个代表特定图标的class(例如,.glyphicon .glyphicon-asterisk) - 与输入组件被移除,建议使用Twitter Typeahead组件。
 - 模态框组件的HTML结构发生了很大的改变。
.modal-header、.modal-body和.modal-footer部分目前包含在了.modal-content和.modal-dialog中,为的是增强移动设备上的样式和行为特性。 - The HTML loaded by the 
remotemodal option is now injected into the.modalinstead of into the.modal-body. This allows you to also easily vary the header and footer of the modal, not just the modal body. - JavaScript事件目前全部都应用了命名空间。例如,模态框的"show"事件的名称为
'show.bs.modal'。标签页组件的"shown"事件名称为'shown.bs.tab',还有很多其它事件名称也是类似。 
可以在Bootply社区网站获取更多升级至v3.0的信息和代码示例。
浏览器支持
Bootstrap的目标是在最新的桌面和移动浏览器上有最佳的表现,也就是说,在较老旧的浏览器上可能会导致某些组件表现出的样式有些不同,但是功能是完整的。
被支持的浏览器
特别注意,我们坚决支持这些浏览器的最新版本:
- Chrome (Mac、Windows、iOS和Android)
 - Safari (只支持Mac和iOS版,Windows版已经基本死掉了)
 - Firefox (Mac、Windows)
 - Internet Explorer
 - Opera (Mac、Windows)
 
Bootstrap在Chromium、Linux版Chrome、Linux版Firefox和Internet Explorer 7上的表现也是很不错的,虽然我们不对其进行官方支持。
Internet Explorer 8 和 9
Internet Explorer 8 和 9 是被支持的,然而,你要知道,很多CSS3属性和HTML5元素 -- 例如,圆角矩形和投影 -- 是肯定不被支持的。另外,Internet Explorer 8 需要respond.js配合才能实现对媒体查询(media query)的支持。
| Feature | Internet Explorer 8 | Internet Explorer 9 | 
|---|---|---|
border-radius | 
Not supported | Supported | 
box-shadow | 
Not supported | Supported | 
transform | 
Not supported |  Supported, with -ms prefix | 
transition | 
Not supported | |
placeholder | 
Not supported | |
请参考Can I use...以获取详细的CSS3和HTML5特性在各个浏览器上的支持情况。
Internet Explorer 8 与 box-sizing
IE8不能完全支持box-sizing: border-box;与min-width、max-width、min-height或max-height一同使用。由于此原因,从Bootstrap v3.0.1版本开始,我们不再为.container使用max-width。
IE兼容模式
Bootstrap不支持IE的兼容模式。为了让IE浏览器运行最新的渲染模式,建议将此 <meta> 标签加入到你的页面中:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
>Windows 8 中的 Internet Explorer 10 和 Windows Phone 8
Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't properly apply the media queries in Bootstrap's CSS. Normally you'd just add a quick snippet of CSS to fix this:
Internet Explorer 10并没有将屏幕的宽度和视口(viewport)的宽度区别开,这就导致Bootstrap中的媒体查询并不能很好的发挥作用。为了解决这个问题,你可以引入下面列出的这段CSS暂时修复此问题:
@-ms-viewport       { width: device-width; }
然而,这样做会导致Windows Phone 8 设备按照桌面浏览器的方式呈现页面,而不是较窄的“手机”呈现方式。为了解决这个问题,还需要加入以下CSS和JavaScript代码,直到微软修复此问题。
@-webkit-viewport   { width: device-width; }
@-moz-viewport      { width: device-width; }
@-ms-viewport       { width: device-width; }
@-o-viewport        { width: device-width; }
@viewport           { width: device-width; }
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
  var msViewportStyle = document.createElement("style")
  msViewportStyle.appendChild(
    document.createTextNode(
      "@-ms-viewport{width:auto!important}"
    )
  )
  document.getElementsByTagName("head")[0].appendChild(msViewportStyle)
}
请查看Windows Phone 8 and Device-Width以了解更多信息。
作为提醒,我们将其加入到Bootstrap文档中作为一个案例。
Safari对百分比数字凑整的问题
最新的Mac版Safari浏览器所包含的绘制引擎对于处理.col-*-1所对应的很长的百分比小数存在bug,这就意味着,如果你在一行(row)之中定义了12个单独的列(.col-*-1),你就会看到这一行比其他行要短一些。我们目前解决不了这个问题(see #9282),但是你可以避免:
- 为最后一列添加
.pull-right,将其暴力向右对齐 - 手动调整百分比数字,让其针对Safari表现更好(这比第一种方式更困难)
 
我们将会继续跟踪此问题,如果有更简易的解决方案,我们会更新代码。
模态框和移动设备
超出范围和滚动
<body>元素在iOS和Android上对overflow: hidden的支持很有限。结果就是,在这两种设备上的浏览器中,当你滚动屏幕超过模态框的顶部或底部时, <body>中的内容将开始随着滚动。
虚拟键盘
还有,如果你正在模态框上面输入内容 -- iOS还有一个绘制上的bug,当触发虚拟键盘之后,其不会更新fixed元素的位置。这里有几种解决方案,包括将fixed元素转变为position: absolute或启动一个定时器手工修正其位置。这些没有加入Bootstrap中,因此,需要由你自己选择最好的解决方案并加入到你的应用中。
浏览器缩放
页面缩放功能不可避免的会将某些组件搞得乱七八糟,不光是Bootstrap,整个互联网上的所有网站都是这样。针对具体问题,我们或许可以修复它(如果有必要的话,请先搜索一下你的问题,看看是否已有解决方案,然后在向我们提交issue)。然而,我们更倾向于忽略这些问题,由于这些问题除了一些hack手段,一般没有直接的解决方案。
对第三方组件的支持
虽然我们并不官方支持任何第三方插件,我们还是提供一些建议,帮你避免可能在你的项目中会出现的问题。
Box-sizing
某些第三方软件,包括Google地图和Google定制搜索引擎都会由于* { box-sizing: border-box; }设置而产生冲突,这一设置使padding不影响页面元素最终宽度的计算。更多信息请参考盒模型与尺寸计算 - CSS Tricks。
根据不同情况,你可能需要根据情况覆盖(第一种选择)或为所有区域设置(第二种选择)。
/* Box-sizing resets
 *
 * 为了避免Bootstrap设置的全局盒模型所带来的影响,可以重置单个页面元素或覆盖整个区域的盒模型。
 * 两种选择 - 覆盖单个页面元素和重置整个区域 -  都可以纯CSS或LESS代码实现。
 */
/* Option 1A: 通过CSS覆盖单个页面元素的盒模型 */
.element {
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
}
/* Option 1B: 通过使用Bootstrap LESS mixin覆盖单个页面元素的盒模型 */
.element {
  .box-sizing(content-box);
}
/* Option 2A: 通过CSS重置整个区域 */
.reset-box-sizing,
.reset-box-sizing *,
.reset-box-sizing *:before,
.reset-box-sizing *:after {
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
}
/* Option 2B: 通过使用自定义的LESS mixin重置整个区域 */
.reset-box-sizing {
  &,
  *,
  *:before,
  *:after {
    .box-sizing(content-box);
  }
}
.element {
  .reset-box-sizing();
}
可访问性
Bootstrap遵循统一的web标准,另外,通过做一些少量的修改,还可以让使用AT的人群访问你的站点。
跳过导航
如果你的导航部分包含很多链接,并且在DOM结构上也是排列在主内容之前,那么建议在紧跟<body>标签之后添加一个跳转到主内容的链接。(这里解释了这样做的原因)
<body>
  <a href="#content" class="sr-only">Skip to content</a>
  <div class="container" id="content">
    The main page content.
  </div>
</body>
标题嵌套
当标题嵌套时(<h1> - <h6>),你的文档的主标题应该是<h1>。随后的标题逻辑上就应该使用<h2> - <h6>,这样,屏幕阅读器就可以构造出页面的内容列表。
Learn more at HTML CodeSniffer and Penn State's AccessAbility.
扩展阅读
许可证FAQ
Bootstrap遵守Apache 2许可证进行分发,版权归 Twitter2013所有。归结为以下几点:
允许你:
- 自由的下载并使用部分或完整的Bootstrap框架,允许用于私人、公司内部或商业目的
 - 将Bootstrap放入你自己创建的安装包或分发中
 
禁止你:
- 在没有合适的权力声明的情况下重新分发Bootstrap的任意部分
 - 以任何方式(声明或暗示Twitter已经为你的分发背书)使用Twitter拥有的任何商标
 - 以任何方式(声明或暗示你创建了此软件)使用任何Twitter拥有的商标
 
需要你:
- 在你的包含了Bootstrap的分发中包含一份许可证文件
 - 对你所包含的Bootstrap进行准确的声明,其权利归属于Twitter
 
不需要你:
- 在你的分发中包含Bootstrap源码或你对其进行的任何修改
 - 向Bootstrap项目提交你对Bootstrap的修改(虽然我们鼓励你提交并回馈)
 
Bootstrap完整的许可包含在项目仓库中。
定制Bootstrap
如果你将Bootstrap作为你所依赖的工具库中的一个组成部分,那么,对Bootstrap进行定制将是非常好的方式。这样做能够确保将来的升级更容易。
一旦你将下载下来的Bootstrap样式和脚本文件引入到页面内,你就可以定制这些组件。这需要再创建一份新的样式表(可以是LESS,或者是CSS)用于覆盖Bootstrap中已经存在的样式。
压缩版还是非压缩版?
除非你需要阅读CSS代码,否则请使用压缩版。其中包含的代码是一样的,只是更精简了。压缩过的样式文件可以降低带宽的占用,尤其对线上环境有益。
到此,包含所需的Bootstrap组件和HTML内容即可创建生成页面所需的模版。
定制组件
有几种不同程度的定制方式,但是,基本可以归为两类:轻量级定制和深度定制。这两种方式都有很多第三方案例可供参考。
我们将轻量级定制定义为外观层面的改变,比如修改现有Bootstrap组件的颜色和字体之类。Twitter翻译中心 (由@mdo开发)就是一个很好地案例。下面就让我们看看这个网站是如何定制按钮.btn-ttc的。
使用Bootstrap自带的按钮,只需一个简单的class即可,即.btn。我们现在需要增加自己的class来为其做些修改,class名称为.btn-ttc。现在就可以花费比较少的时间做外观定制。
我们定制的按钮如下:
<button type="button" class="btn btn-ttc">Save changes</button>
注意.btn-ttc是如何添加到标准的.btn class中的。
在定制的样式表中,增加如下CSS代码:
/* 定制按钮
-------------------------------------------------- */
/* Override base .btn styles */
/* Apply text and background changes to three key states: default, hover, and active (click). */
.btn-ttc,
.btn-ttc:hover,
.btn-ttc:active {
  color: white;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #007da7;
}
/* Apply the custom-colored gradients */
/* Note: you'll need to include all the appropriate gradients for various browsers and standards. */
.btn-ttc {
  background-repeat: repeat-x;
  background-image: linear-gradient(top, #009ED2 0%, #007DA7 100%);
  ...
}
/* Set the hover state */
/* An easy hover state is just to move the gradient up a small amount. Add other embellishments as you see fit. */
.btn-ttc:hover {
  background-position: 0 -15px;
}
简单来说,就是从样式表代码中复制出需要修改的部分。
以下就是基本工作流程:
- 对于每个需要定制的元素,在Bootstrap CSS文件(未压缩版)中找到其出现的位置。
 - 将需要定制的样式代码拷贝并粘贴到你自己的文件中。例如,定制导航条(navbar)的背景(background),只需要拷贝
.navbar样式。 - 在你自己的样式表文件中修改拷贝过来的CSS代码。不需要增加新的class或使用
!important属性。尽量简单就好。 - 重复上述过程,直到自己满意为止。
 
一旦你熟悉了轻量定制,再进行深度定制将会手到擒来。例如Karma网站,他们就是将Bootstrap作为一个CSS reset文件,并进行了大量的修改,其中涉及到当量的工作。他们在定制过程中遵循了同样的原理:将Bootstrap的默认样式表引入页面中,然后使用自己定制的样式。
可选的定制方式
虽然不推荐初级Bootstrap开发者使用,我们还是列出两种可选方式。第一种是修改 .less源码文件(将来升级时将会超级困难);第二种是通过mixin将LESS源码映射到你自己定义的class上。由于时间关系,不在此一一详细说明。
去除没用的代码
并不是所有的网站和应用需要使用Bootstrap提供的所有功能,尤其是在生产环境,带宽的增加意味着花费更多金钱。我们鼓励你通过定制功能去除任何没用的代码。
利用定制功能,可以简单的将不需要的组件、特性或资源去除掉。点击下载按钮,将下载下来的文件替换掉默认的Bootstrap文件即可。这样你就获得了完全满足自己需求的Bootstrap,没有丝毫你不需要的代码。所有定制的Bootstrap也都包含压缩和未压缩两个版本的文件,根据你自己的需要使用吧。
Bootstrap 简洁、直观、强悍、移动设备优先的前端开发框架,让web开发更迅速、简单。的更多相关文章
- Bootstrap 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
		
Bootstrap 简洁.直观.强悍的前端开发框架,让web开发更迅速.简单.
 - 第五模块:WEB开发基础 第3章·BootStrap&JQuery开发
		
01-JQuery介绍 02-jQuery文件引入和加载的区别 03-jQuery的基础选择器 04-jQuery的层级选择器 05-jQuery的基本过滤选择器 06-jQuery的属性选择器 07 ...
 - Bootstrap非常简单实用的web前端开发框架
		
今天无意间用firebug看网站的代码发现了Bootstrap,之前从来没有听说过这个东东,于是对它产生了好奇感,通过百度我了解到了Bootstrap是一款非常简单,强悍,实用,移动设备端优先使用的这 ...
 - Bootstrap工具包--用于响应式布局和移动设备优先的web项目
		
Bootstrap是用于前端开发的工具包,是一个css/html框架 用于响应式布局和移动设备优先的web项目 响应式布局--一个网站能兼容多个终端 有很多版本:v3,v4,v5 三个没啥区别 ...
 - 移动设备优先viewport
		
Bootstrap 3 的设计目标是移动设备优先,然后才是桌面设备.这实际上是一个非常及时的转变,因为现在越来越多的用户使用移动设备. 为了让 Bootstrap 开发的网站对移动设备友好,确保适当的 ...
 - iOS7的十个更“佳”:简洁直观更受青睐
		
转自:http://www.25pp.com/news/news_27792.html iOS7自发布以来一直是褒贬不一,虽然苹果还只是发布了第二个测试版,但普通用户早已经在纠结到底该不该升级iOS7 ...
 - bootstrap课程8 bootstrap导航条在不同设备上的显示效果如何
		
bootstrap课程8 bootstrap导航条在不同设备上的显示效果如何(多去看参考手册) 一.总结 一句话总结:在手机端或者平板端或者显示不够的话就缩起来了.(多去看参考手册) 二.bootst ...
 - web开发:Bootstrap
		
一.ajax请求 二.前台服务器概念 三.bs导读 四.bs引入 五.bs容器与响应式 一.ajax请求 - 后台 ```python# 通过flask框架搭建后台from flask import ...
 - bootstrap前端开发框架,未来发展趋势
		
http://v3.bootcss.com/getting-started/Bootstrap 起步 CSS 组件 JavaScript插件 定制 关于 CSS 设置全局CSS样式,基本的HTML元素 ...
 
随机推荐
- UGUI 滚动视图
			
滚动视图是常用的UI控件之一,它是由多个基本控件组合而成.如图 ==================================================================== ...
 - Oracle数据库使用存储过程实现分页
			
注:本示例来源于韩顺平[10天玩转oracle数据库]视频教程 1.创建包同时创建游标 create or replace package pagingPackage is type paging_c ...
 - [置顶] SSO单点登录系列6:cas单点登录防止登出退出后刷新后退ticket失效报500错
			
这个问题之前就发现过,最近有几个哥们一直在问我这个怎么搞,我手上在做另一个项目,cas就暂时搁浅了几周.现在我们来一起改一下你的应用(client2/3)的web.xml来解决这个2b问题,首先看下错 ...
 - MySQL中explain的type类型
			
| ALL | 全表扫描 | index | 索引全扫描 | range | 索引范围扫描,常用语<,<= ...
 - mysql(5.7)在CentOs7下的安装、配置与应用
			
和之前版本的mysql有一些不同,现把完整过程记下来,或许对新手来说有用. 本文描述的安装是采用通用的二进制压缩包(linux - Generic)以解压方式安装,相当于绿色安装了. 一.下载通用 ...
 - android XML解析之DOM解析方式
			
DOM 解析方式步骤: 第一步:首选需要获得DOM解析器工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ...
 - UMl概述(转)
			
1. UML的组成 UML由视图(View).图(Diagram).模型元素(Model Element)和通用机制(General Mechanism)等几个部分组成. a) 视图(View): 是 ...
 - Android开发中一些常见的问题解决方案
			
分享一下自己开发中遇到的一些常见问题及解决方案,方面以后快速开发少走弯路,也可以供大家一起学习. 1.开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listvie ...
 - Java并发编程小记
			
1. Semaphore 信号量是一种计数器,用来保护一个或者多个共享资源的访问.如果线程要访问一个共享资源,必须先获得信号量.若内部计数器大于0,则减1,若等于0,则线程进入休眠直至计数器大于等于0 ...
 - 2015.4.16-C#中ref和out的区别
			
如图: 输出结果是: 上面显示的是 ref 只是地址传递,所以最初改变的也只是地址,但是如果 在给其赋值,值会随之改变;如果 在方法内直接赋值,那么输出的结果 就是现在的值,之后 ...