当前位置:首页 > 网站源码 > 正文内容

bootstrap技术教程书本源码(bootstrap教程 pdf)

网站源码1年前 (2023-02-21)713

今天给各位分享bootstrap技术教程书本源码的知识,其中也会对bootstrap教程 pdf进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

《Bootstrap实战》pdf下载在线阅读,求百度网盘云资源

《Bootstrap实战》([美] David Cochran)电子书网盘下载免费在线阅读

链接:

提取码:muit

书名:Bootstrap实战

作者:[美] David Cochran

译者:李松峰

豆瓣评分:7.1

出版社:人民邮电出版社

出版年份:2015-5

页数:240

内容简介:

本书是目前市面上少见的实战类Bootstrap图书,全书通过5个真实、具体、鲜活,又有代表性的项目实例,讲解了Bootstrap的各种特性和用法。5个实例由浅入深,既各自独立,又环环相扣,丰富的代码,精美的插图,加上细致入微的解释,让读者极易上手,不知不觉中就能掌握所有重要概念,步入Bootstrap高手行列。本书讲解了以下5种类型的网站:个人作品网站、WordPress主题、企业门户页面、在线电子商务站点和单页营销网站。

除了令人惊艳的项目实例,本书还向读者介绍了很多实用插件、框架,以及前端开发的工作流程,这些知识和技术并不局限于Bootstrap。特别地,作者用相当篇幅介绍了LESS的基本原理和使用方法,让即使从未接触过LESS的人也能感觉游刃有余。此外,全书各章还分别介绍了HTML5 Boilerplate、Font Awesome、Respond.js、Masonry、Scroll-Spy,以及Roots的WordPress启动主题,让读者不必白手起家也能实现各种酷炫效果。

本书附录还介绍了为获得最快下载速度而对站点资源进行优化、实现响应式图片,以及为图片传送带添加手势的技术。作者提供的项目代码也非常完整、清晰,每一章都有相应的开始和完成文件夹,方便读者参考使用。

本书适合有一定HTML/CSS基础的开发人员和爱好者阅读学习,经验丰富的开发人员也可以把它当作参考。

作者简介:

作者简介:

David Cochran

现为俄克拉荷马州卫斯理大学副教授,自2005年以来一直讲授交互设计。他重视最佳实践,不喜欢走捷径,推崇Web标准。2012年,David在webdesign.tutsplus.com上开设了Bootstrap 2.0系列教程专栏。他还在Packt Publishing出版过一个小书Twitter Bootstrap Web Development How-To 。闲暇时间,David会在自己网站alittlecode.com上写写博客。他还是媒体、设计和咨询公司BitBrilliant的负责人。

Ian Whitley

自幼爱好写作。2010年,他对Web开发产生了深厚兴趣,并投身其中。他很早就开始使用Twitter Bootstrap,而且在David Cochran的帮助下,很快就掌握了这个框架,并将其应用到了很多项目中。目前,他多数情况下会使用Bootstrap为客户创建WordPress模板。Ian是BitBrilliant公司的开发主管。

bootstrap 源码怎么用

1、Bootstrap的作用域

2、Bootstrap的类定义

3、Bootstrap的插件定义

4、Bootstrap的事件代理

5、Bootstrap的对象数据缓存

6、Bootstrap的防冲突

7、作用域外如何使用Button类

8、Bootstrap的单元测试

Bootstrap的作用域

Bootstrap每个插件都定义在下面这段作用域代码中:

Js代码

+function ($) {

...

}(window.jQuery)

请看《IIFE》和《严格模式》编译环境。

在插件的作用域之外,全局范围执行代码的第一行,检测了jQuery是否定义。在Grunt的concat任务中,合并所有插件时,检测代码添加在目标文件的banner说明后面。Grunt.js的相关代码:

Js代码

jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n',

concat: {

options: {

banner: '%= banner %%= jqueryCheck %',

stripBanners: false

},

bootstrap: {

src: [

'js/transition.js',

'js/alert.js',

'js/button.js',

'js/carousel.js',

'js/collapse.js',

'js/dropdown.js',

'js/modal.js',

'js/tooltip.js',

'js/popover.js',

'js/scrollspy.js',

'js/tab.js',

'js/affix.js'

],

dest: 'dist/js/%= pkg.name %.js'

}

}

Bootstrap的类定义

Js代码

var Button = function (element, options) {

this.$element = $(element)

this.options = $.extend({}, Button.DEFAULTS, options)

}

Button.DEFAULTS = {

loadingText: 'loading...'

}

Button.prototype.setState = function (state) {

...

}

Button.prototype.toggle = function () {

...

}

Bootstrap采用这种类定义方式的好处,以及Javascript其他几种类定义的方式,请参照《Javascript面向对象编程(一):封装》

Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。在Button函数体内部定义的属性和方法可以看做是类的私有属性和方法, 为Button.prototype对象定义的属性和方法都可以看做是类的公共属性和方法。这个类封装了插件对象初始化所需的方法和属性。

Bootstrap的插件定义

请参看《jQuery插件开发快速入门》,注意两个this指向的是不同对象

Js代码

$.fn.button = function (option) {

return this.each(function () {

var $this = $(this)

...

})

}

Bootstrap的事件代理

Bootstrap Button插件定义最后一部分,事件绑定是这么写的

Java代码

$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {

...

})

这段JavaScript代码将click委托事件监听器绑定在document元素上,并给click事件赋予命名空间click.bs.button.data-api,选择器匹配的是属性data-toggle的值为"button"开头的标签。

关于jQuery将事件绑定在document文档对象上的好处,就是js事件代理的优点,性能上做了一个测试比较。

关于jQuery命名空间的好处,请参看《jQuery .on() and .off() 命名空间》

Bootstrap的防止冲突

jQuery是全局对象,所以jQuery的插件定义$.fn.button并不受作用域限制。如果在别的插件中同样定义了button插件,后加载的button插件将会覆盖先加载的button插件,jsbin示例:

Js代码

// Old button

+function($){

$.fn.button = function() {

alert('Old button')

}

}(window.jQuery)

// Bootstrap button

+function($){

$.fn.button = function() {

alert('Bootstrap button')

}

}(window.jQuery)

$('a').button() // alert('Bootstrap button')

Bootstrap做了插件冲突处理,jsbin示例:

Js代码

// Old button

+function($) {

$.fn.button = function() {

alert('Old button')

}

}(window.jQuery)

// Bootstrap button

+function($){

// 将原先的button插件对象赋值给一个临时变量old

var old = $.fn.button

$.fn.button = function() {

alert('Bootstrap button')

}

// 执行该函数,恢复原先的button定义,并返回Bootstrap定义的button插件

$.fn.button.noConflict = function () {

$.fn.button = old

return this

}

}(window.jQuery)

// span style="font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: #ffffff;"作用域/span外我们可以灵活使用两个button插件

$.fn.button = $.fn.button.noConflict()

$('a').button() // alert('Bootstrap button')

$.fn.button.noConflict()

$('a').button() // alert('Old button')

Bootstrap作用域外如何使用Button类

Js代码

$.fn.button.Constructor = Button

在Bootstrap的button插件中还有上面者句代码,去掉它不影响插件的正确执行。

它很像javascript中类构造器:

Java代码

var Cat = function(name) {

this.name = name

}

var cat1 = new Cat('Hello Kitty')

var cat2 = new Cat('Doramon')

cat1.constructor == Cat.prototype.constructor

但是Javascript是区分大小写的,也就是 这里大写开头的的Constructor 和 Javascript小写开头的constructor 没有任何关系。

查找jQuery源码中也没有对于大写开头的Constructor的定义。所以这里的Constructor只是一个普通属性,我们也可以写成其他名字 $.fn.button.Something = Button,Bootstrap为了指明这个属性的意义而命名为构造器“Constructor”更合理。

这样一来,这段代码就很好理解了:$.fn.button.Constructor = Button 通过将作用域内的Button类赋值给jQuery的button对象的Constructor属性,在IIFE作用域外也可以使用Button类。调用方式:

Js代码

+function($){

// 类定义

var Button = function() {}

// 插件定义

$.fn.button = function() {

alert('Bootstrap button')

}

// 类赋值到jQuery button对象的Constructor属性

$.fn.button.Constructor = Button

}(window.jQuery)

var Button = $.fn.button.Constructor

Bootstrap的对象数据缓存

Js代码

// 获取存储的Button对象,如果是第一次执行变量data的值为undefined

var data = $this.data('bs.button')

var options = typeof option == 'object' option

// 创建Button对象: new Button(this, options),

// 并赋值给变量data: data = new Button(this, options)

// 存储在元素的jQuery对象上的‘bs.button’数据字段 $this.data('bs.button', data)

if (!data) $this.data('bs.button', (data = new Button(this, options)))

// data是一个Button对象,可以调用Button的原生方法

if (option == 'toggle') data.toggle()

else if (option) data.setState(option)

利用jQuery的 .data(key, value)存储Button对象

Pandora Bootstrap源码分析

在我的认知里,是没有办法改变当前的classloder的,当前的 SpringApplication.run的时候,肯定是系统的classloder啊,就让我们来揭开迷雾吧。

参数mainClass就是HSFProviderApplication这个有main方法的入口类

参数args就是main方法的参数

参数的classLoader是我们自己创建的classloader

由于我们创建的classloder是系统classloder的子类,我们就可以做文章了,中间件的类用新创建的classloder来加载,业务的类用系统的classloder来加载。是不是非常巧妙啊。

如何保证不会执行多次加载逻辑,甚至死循环的呢?第一遍是系统的classloder,第二遍虽然看上去是我们自己创建的classloder,但我们我们创建的classloder是委托给系统的classloder的,所以其实还是相同的classloder。这就很简单了,PandoraBootstrap执行第一遍之后就改一个bool变量,第二遍读到这个变量改了就直接跳过了。

如何编译bootstrap-4.0.0源码

因为bootstrap 4.0.0将放弃less转用sass来处理css,所以开发环境需要装SASS插件(必须先安装Ruby)。

安装Ruby,略。

安装SASS

gem install sass

安装Node.js,略。

安装grunt

npm install -g grunt

安装node-sass,大多数环境正常。安装不成功的话可以看后面的手动编译css部分。

npm install -g node-sass

grunt打包,加强制参数

grunt --force

在dist目录下编译出下列文件

|-- dist

|-- css

|-- bootstrap.css

|-- bootstrap.css.map

|-- bootstrap.min.css

|-- bootstrap.min.css.map

|-- js

|-- bootstrap.js

|-- bootstrap.min.js

|-- npm.js

|-- umd

|-- alert.js

|-- button.js

|-- carousel.js

|-- collapse.js

|-- dropdown.js

|-- modal.js

|-- popover.js

|-- scrollspy.js

|-- tab.js

|-- tooltip.js

|-- util.js

scsslint检查时可能会报错,可以将bundleExcc关掉,不用本地的

//You can choose to have your gems installed via bundler and if so, set this option to true to use the local gems.

scsslint: {

options: {

bundleExec: false,

config: 'scss/.scss-lint.yml',

reporterOutput: null

},

src: ['scss/*.scss', '!scss/_normalize.scss']

}

手动编译css,进入scss目录会看到大量的scss文件。主要关注下面几个

|-- scss

|-- ...

|-- bootstrap.scss

|-- bootstrap-flex.scss

|-- bootstrap-grid.scss

|-- bootstrap-reboot.scss

|-- ...

可以用sass命令直接生成相应的css文件和map文件

sass bootstrap.scss bootstrap.css

sass bootstrap-flex.scss bootstrap-flex.css

sass bootstrap-grid.scss bootstrap-grid.css

sass bootstrap-reboot.scss bootstrap-reboot.css

bootstrap技术教程书本源码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于bootstrap教程 pdf、bootstrap技术教程书本源码的信息别忘了在本站进行查找喔。

扫描二维码推送至手机访问。

版权声明:本文由我的模板布,如需转载请注明出处。


本文链接:http://www.60200875.com/post/4425.html

分享给朋友:

“bootstrap技术教程书本源码(bootstrap教程 pdf)” 的相关文章

apk编辑器修改包名后安装不了(apk编辑器修改包名后不能用)

apk编辑器修改包名后安装不了(apk编辑器修改包名后不能用)

今天给各位分享apk编辑器修改包名后安装不了的知识,其中也会对apk编辑器修改包名后不能用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、apk编辑器修改应用...

百度文库官方网站(百度文库官方网站客服)

百度文库官方网站(百度文库官方网站客服)

本篇文章给大家谈谈百度文库官方网站,以及百度文库官方网站客服对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、百度文库首页 2、百度文库官网登录界面 3、百度文库官网...

添加到源代码管理有什么用(代码源怎么用)

添加到源代码管理有什么用(代码源怎么用)

本篇文章给大家谈谈添加到源代码管理有什么用,以及代码源怎么用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、源代码是干什么用的? 2、源代码有什么用 3、知道源代码...

一场2小时的直播要多少流量(一场两小时的直播需要多少流量)

一场2小时的直播要多少流量(一场两小时的直播需要多少流量)

本篇文章给大家谈谈一场2小时的直播要多少流量,以及一场两小时的直播需要多少流量对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、手机看电视直播一小时要多少流量? 2、两个...

九机网员工待遇怎么样(九机网员工价)

九机网员工待遇怎么样(九机网员工价)

本篇文章给大家谈谈九机网员工待遇怎么样,以及九机网员工价对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、杭州九玩网络待遇怎么样 2、中国电信正式员工工资怎么样? 3...

华为手机浏览器怎么看浏览记录(华为手机怎么看手机浏览记录)

华为手机浏览器怎么看浏览记录(华为手机怎么看手机浏览记录)

今天给各位分享华为手机浏览器怎么看浏览记录的知识,其中也会对华为手机怎么看手机浏览记录进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、华为浏览器视频观看历史在...