Bootstrap 这个号称世界第一的 responsive 和 mobile first 前端样式组件库去年八月发布了 v4.0 Alpha,去年年底时发布了 v4.0 Alpha 2 版本。可能是 v3 用的过于顺手,直到今天才决定踏上 v4.0 这艘船,让我们一起来看它是说翻就翻,还是屹立不倒。
4.0 vs 3.0
根据官方文档,我们先来看看 v4.0 相比 v3.0 做了那些改变:
从 Less 迁移到 Sass。感谢 Libsass, Bootstrap 现在编译的更快了,而且 Sass 社区在快速壮大。
升级栅格系统。我们添加了新的栅格排列来根更好地适应移动设备,并且完全重构了语义的
mixins
。有了可选的
flexbox
支持。通过一个变量开关,你可以重新编译你的CSS 使用基于flexbox
的栅格系统和组件,直接进入未来模式。去掉了
well
,thumbnail
和panel
,并用card
来代替。card
是 Bootstrap 中一个全新的组件,你会觉得它似曾相识,因为它和well
,thumbnail
和panel
的用法差不多,并且会更好。加固了所有的
HTML reset
代码,用一个新的模块:Reboot
。Reboot
做了一些Normalize.css
没有做的事。在一个单独的 Sass 文件中给你提供了很多的重置选项,例如:box-sizing: border-box
,margin tweaks
等。全新的自定义选项。并非像 v3 中那样把装饰性样式,如:
gradients
,transitions
,shadows
等放在各自的文件中。我们把这些选项移到了 Sass 的变量中。希望默认的把transitions
应用到所有元素上或者禁用掉圆角?你只需要更新一个变量然后重新编译。去掉了对 IE8 的支持,并使用
rem
和em
单位。抛弃 IE8 意味着我们可以使用 CSS 中最好的那些属性而不用被CSS hacks
或fallbacks
所牵制。使用rem
和em
替代像素更适合做响应式排版,调整组件大小更方便了。如果你需要支持 IE8,继续用 Bootstrap 3 就好。重写了我们所有的 JavaScript 插件。所有插件使用 ES6 重写,得以使用最新的 JavaScript 特性。并且他们现在支持 UMD,通用的
teardown
方法,参数类型检查,等很多优点。增强
tooltip
andpopover
的自动定位,多亏了 Tether 这个开源库的支持。改进了文档。我们用 Markdown 重写了它,并且添加了一些好用的插件来提高例子和代码片段的效率。还用这种方法改进了搜索。
当然还有成吨的优化!你可以自定义
form control
,margin
和padding
的类,还有很多新的工具类。
Alpha 2 vs Alpha 1
再来看看 Bootstrap 4.0 Alpha 2 相比之前的 Alpha 1 版本做了哪些改进工作:
使用数字堆叠彻底重构了间隔工具类(spacing utilities)(避免与栅格混淆)
持续地重构,在多个组件中使用相同的类来替换某些根据标签的选择器(包括分页,列表等)。还有更多其他组件也在重构中。
恢复媒体查询和栅格容器的单位
rem
到pixel
因为viewports
不会被font-size
影响。(详情见 issue #17403。我们还有成吨的栅格需要处理。请关注 issue #18471)为了组件的一致性恢复边框宽度
.0625rem
到1px
,以避免缩放和font-size
的 bug 在不同浏览器的兼容问题。重命名
.img-responsive
为.img-fluid
以避免将来各种响应图像解决方案出现混乱。替换
ZeroClipboard
为clipboard.js
,可以不依赖 flash 了。输入框和按钮共享相同的边框值以确保组件总是同样大小。
更新了所有伪元素选择器的使用规范,首选双冒号(如,
::before
而不是:before
)。卡片现在有不同的轮廓和
mixins
进一步支持基于类的扩展。用来实现
floats
和文字对齐的工具类现在有了响应式范围。这意味着我们已经放弃了非响应类,以避免重复。增加了对 jQuery 2 的支持
还有成百上千的 Sass 优化,bug 修复,文档更新等等。
看完这些,心里大致有了个底:
js 的 API 基本没变(算你有良心)。well
,thumbnail
和 panel
被干掉了,全部用 card
代替(之前的确实太复杂)。长度单位被换成了 rem
和 em
,但是 rem
有兼容性 bug,某些地方又被换回了 'px'(心好累)。添加了一些新的工具类,可以直接写 class 设置间隔了(敲黑板,曾经为了偷懒,我们一直在这么玩)。
下面让我们来仔细看看 Bootstrap v4.0 Alpha 2 的新特性。
Reboot
v4.0 中使用 Reboot 重置浏览器的默认样式。
hidden 属性
<input type="text" hidden>
[hidden] { display: none !important; }
HTML5 添加了一个全局的新属性 [hidden]
,它的默认效果和 display: none
一样。这里借用了 PureCSS 的思想。虽然 [hidden]
在 IE9-10 中并不被支持,通过明确的声明解决了这个问题明确声明.
优化触摸屏的点击延时
值得一提的是,v4.0 针对触摸屏设备的点击延时做了优化。做过移动端页面调优的同学都知道,在移动设备上,用户的点击事件有大约 300 毫秒的延时,这个特性是为了方便识别的用户双击操作,以自动放大或缩小屏幕。
响应式增强
v4.0 的一大特点是,增强了对响应式的支持,或者说:强制你写出支持响应式的页面。
.hidden-*-*
v4.0 已经没有了 .hidden
这个通用的 class,想要隐藏某个元素的话强烈建议遵循响应式的需求使用响应式的 class 向上生效,或者向下生效。
新组件
Card
v4.0 去掉了 well,thumbnail 和 panel,用一个 card
解决所有问题。
<div class="card">
<img class="card-img-top" data-src="..." alt="Card image cap">
<div class="card-block">
<h4 class="card-title">Card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
<a href="#" class="btn btn-primary">Button</a>
</div>
</div>
这样可以少纠结那些的细小的区别了。
<div class="card card-inverse card-success text-xs-center">
<div class="card-block">
<blockquote class="card-blockquote">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
</blockquote>
</div>
</div>
<div class="card card-inverse card-info text-xs-center">
<div class="card-block">
<blockquote class="card-blockquote">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
</blockquote>
</div>
</div>
用 card 实现的 well
工具 Class
v4.0 中新增了很多方便调用的工具类,我们来大概刷一遍。
Spacing Class
.m-t-0 {
margin-top: 0 !important;
}
.m-l-1 {
margin-left: $spacer-x !important;
}
.p-x-2 {
padding-left: ($spacer-x * 1.5) !important;
padding-right: ($spacer-x * 1.5) !important;
}
.p-a-3 {
padding: ($spacer-y * 3) ($spacer-x * 3) !important;
}
哇擦!这些用来设置间距的工具类,你们感受一下。x
代表水平方向,a
代表全部。最后的数字可以简单理解为一个字符的宽度(水平方向)或者一行的高度(垂直方向)。使用后的感受是:这样调间距方便极了,有木有!
Bootstrap 甚至还包含了一个 .m-x-auto
的 class,用它可以快速把水平 margin 设为 auto。
.center-block
// Class
.center-block {
display: block;
margin-left: auto;
margin-right: auto;
}
// Usage as a mixin
.element {
@include center-block;
}
使用 margin
的 auto
值剧中块级元素。
.text-hide
.text-hide {
font: "0/0" a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
// Usage as a mixin
.heading {
@include text-hide;
}
通过给文字设置透明的颜色来隐藏文字,用来做 logo 图片的文字隐藏最好不过了。
.invisible
// Class
.invisible {
visibility: hidden;
}
// Usage as a mixin
.element {
.invisible();
}
替开发者想的真是周到。
总结
大国之重器,前端黑科技
我们啥都不缺!—Bootstrap v4.0
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。