对bootstrap的思考

首先看看 bootstrap 的介绍。

Bootstrap 让前端开发更快速、简单。所有开发者都能快速上手、所有设备都可以适配、所有项目都适用。

这是 bootstrap 的官网对 bootstrap 的描述。“所有开发者”意味着包括非前端,既然非前端都能够快速上手,那前端开发者使用 bootstrap 的优势在哪里?答案是 bootstrap 并不是给前端开发者使用的,或者说,打开方式错误。

bootstrap 的适用场景

bootstrap 的适用场景是项目没有 UI 设计的情况,没有 UI 设计,就意味着需要开发者自己去写页面样式,但是大部分的后端开发并不擅长 CSS,即使他们都说 CSS 只是一门标记语言。后端开发使用 bootstrap 可以快速简单搭建出一个“能看”的页面,且相比自己写要好看太多,所以 bootstrap 几乎成为项目标配。当然,还有很多原因。。。响应式设计、完善的组件等等都是初级前端无法做到,借助 bootstrap 却很容易就能做到而且又是项目需要的功能。

但是,如果项目中有 UI 设计师,不用 bootstrap 最大的理由是,UI 设计师不懂 bootstrap,不会按照 bootstrap 的样式来设计。

  • 有能力的设计师都会有自己的设计风格,所以不会按照 bootstrap 的样式来设计
  • 没有能力的设计师也不会按照 bootstrap 的样式来设计,因为会觉得自己的设计完爆 bootstrap(其实并不)。而且没有能力的设计往往不会考虑响应式设计、不同状态的样式、栅格系统下的排版等等。而设计稿没有这些,那 bootstrap 的作用就几乎没有了,能想到的就是 bootstrap 的样式重置,其实也是normalize.css的功能而不是 bootstrap 的了。

总之,使用 bootstrap 前应该考虑清楚是否真的需要,或者只是需要 bootstrap 的一部分功能?

正确打开方式

说了这么多,其实是想说,前端开发者在使用 bootstrap 时,绝不是学习类名、记忆类名。而是学习 bootstrap 的代码组织方式,或者说,编写样式的方式。

什么方式呢,往大了说,是组件化的开发方式,往小说,是预处理器的使用方式。所以个人看法,前端开发者在使用 bootstrap 时,应该使用其源码,即 less 文件或者其他版本的预处理器源码。既在项目中使用了 bootstrap,又能够学习到 bootstrap 的核心知识。

核心

对于前端开发者而言,bootstrap 的核心应该是 mixins。理由是

  • bootstrap 的前身 preboot 就只有变量及 mixins,是一个针对前端开发者的项目
  • 相同的 mixins 可以根据项目快速编写不同的样式

举个栗子,按钮基本是每一个项目必备的组件/控件,而且往往会重置原生控件的样式,所以我们会这样写样式:

.button {
      background-color: #fff;
      width: 100px;
      color: red;
      border: 1px solid red;
      border-radius: 15px;
      line-height: 26px;
      cursor: pointer;
    }
    .button:hover {
      background-color: red;
      color: #fff;
    }
    .button--active {
      color: #fff;
      background-color: red;
    }
<button class="button button--active">click it</button>
<button class="button">reset</button>

上面的样式会在页面显示这样的按钮

Paste_Image.png

OK,在这个项目要求是这样,可能在另一个项目会要求颜色不同,border-radius 的值不同等等,不知道别人是怎么做的,我是重新写一样的代码。但是如果使用预处理器,就可以这样写 mixin:

// mixins/_button.scss
@mixin button($color, $background,  $border-color, $width, $line-height, $radius) {
    width: $width;

    line-height: $line-height;

    color: $color;

    background-color: $background;
    border: 1px solid $border-color;

    border-radius: $radius;

    corsor: pointer;

    &:hover {
         background-color: red;

         color: #fff;

     }

}

然后这样使用

@import 'mixins/button';
.button {
    @include button(red, #fff, red, 100px, 26px, 15px);

}

可以根据项目样式传入不同的值。而且 mixin 的用处远远不止这些。在后处理器出现前,如果用到了需要添加浏览器厂商前缀的属性,一个一个写就很麻烦,也可以借助 mixin 来简化这些工作。

所以,一个前端开发,应该要有自己的 mixins。说这么多,其实是想说,可以直接将 bootstrap 的 mixin 作为自己的初始 mixin 库,开发项目的过程中去增加、完善这个库。所以先查看下每一个 mixin 是如何编写的,解决了什么问题,是否适合自己,而且 bootstrap 作为一个开源项目,代码质量毋庸置疑,所以也可以将 bootstrap 作为你的第一个阅读源代码的开源项目。

学习方式

正确的学习方式当然是一个一个文件阅读,scss 版的源码(其他版本当然也有),有一个bootstrap.scss文件,属于入口文件,可以从注释中了解每一个文件的作用,并且和 bootstrap 官网是有对照关系,跟着官网,很容易就能从源码中学习到 bootstrap 的核心内容。

学习完 bootstrap 的 mixins,或许可以再看看开源的 mixin 库。

总结

在学习类库、框架的时候,要思考的是,“既然这个这么简单,我学了这个后,和别人相比有什么优势呢。”所以在学习类库和框架的时候,重点是框架的思想、理念,这些东西学到了,才是自己的东西,毕竟前端变化太快了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,521评论 25 707
  • 本文首发于 GitChat,现免费放出~感谢大家的支持。 我们都知道,大学几乎是没有 Web 前端课的。以我所在的...
    hylerrix阅读 4,858评论 8 60
  • Bootstrap是什么? 一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。GitHub上介绍 的...
    凛0_0阅读 10,849评论 3 184
  • 去年年尾的时候,几个朋友一起聚会。聊着聊着就谈起了各个公司的年会和业绩最出色的人。一个朋友说今年她们公司业绩最出色...
    汪晓寒Petrichor阅读 457评论 0 0
  • 还记得第一次遇见你的时候,那是一个夜深人静的晚上。那一晚,我实在是饿得受不了了,我就去厨房找点吃的,可当我开灯的那...
    要命的阿九阅读 245评论 0 0