Bootstrap3入门学习(上)

教程整理自慕课网(原文部分错误在这篇文章得到修改,本文版本Bootstrap3.3.7)。

框架简介

Bootstrap是个前端UI框架,由Twitter两位员工写了这个框架后开源到github上。作为前端UI框架,你还可以使用jquery ui,Bourbon和轻量级的Pure.css。bootstrap每次版本更新变化都比较大,并且版本之间很多语法类名都不兼容,目前已经出了v4版本,但线上主要都在使用v3版本,v2版本早就被放弃维护。

目录说明

Bootstrap3的dist文件夹中需要的只有三个可被引用的文件,bootstrap.css,bootstrap.js和theme.css,其他还有对应的压缩版和编译生成的.map文件。主题文件就是矢量图标库,bootstrap有第三方矢量图标厂商为其免费提供使用,在Bootstrap4中已经没有这个文件,官方建议开发者自行下载引入awesome的矢量图标。另外在bootstrap3中是使用了重置样式中最出名的normalize.css,bootstrap4却加入了reset.css文件,在normalize.css的基础上加入了自己的见解。激进的bootstrap4放弃了对IE9以下的支持,其实也就是懒得引入加载那么多用于兼容的JavaScript文件了,即使是Bootstrap3,如果你不引入兼容文件,IE678依然对CSS3的支持很差。大多数人只是用Bootstrap的样式布局,也有人使用其封装好的JS组件,在那之前你应该引入对应版本的jQuery文件。对于类似360这种双核国产浏览器,应该加入meta强制使用webkit内核渲染。对于IE用户,应该加入meta强制使用最新渲染模式。

关于Bootstrap3的六个标题

元素 字体大小 计算比例 其他样式
h1 36px 14px*2.60 margin-top:20px
h2 30px 14px*2.15 margin-bottom:10px
h3 24px 14px*1.70 .
h4 18px 14px*1.25 margin-top:10px
h5 14px 14px*1.00 margin-bottom:10px
h6 12px 14px*0.85 .

所有标题的行高都是font-size的1.1倍,且文本颜色和字体都是继承父元素。
在标题标签内部使用<small>标签制作副标题,副标题默认不加粗字体颜色#999,h1-h3中的副标题字体大小为65%,h4-h6中的副标题字体大小为75%。

关于正文段落的p标签

由于全局字体大小为14px,段落行高是14*1.4285大概为20px,这个倍数是编译算出来的。段落默认颜色为#333深灰色。字体为Helvetica Neue优先,对中文不友好可以手动修改。段落默认距上下有10px的外边距。

强调内容

添加.lead类强调内容,其效果是

margin-bottom: 20px;    line-height:1.4;
font-size: 16px; font-weight:300px; 

但是在min-width: 768px的情况下它的字体大小为21px;此外你也可以使用b,strong加粗。使用em,i或者CSS的font-style: italic使字体倾斜。

强调相关的六个类

类似于lead,Bootstrap还有六个强调类名用于表示文本颜色:

强调类名 字体颜色 十六进制
text-muted 浅灰色 #777
text-primary 蓝色 #337ab7
text-success 浅绿色 #3c763d
text-info 浅蓝色 #31708f
text-warning 黄色 #8a6d3b
text-danger 褐色 #a94442

文本对齐风格

对齐方式 对齐类名
左侧对齐 text-left
右侧对齐 text-right
居中对齐 text-center
两端对齐(浏览器不统一) text-justify (慎用)

Bootstrap六种常用列表

普通列表和有序列表:只是加了margin-bottom: 10px;
去点列表list-unstyled:list-style-none; padding-left: 0;
定义列表:dl,dt,dd稍微有修改。
水平定义列表dl-horizontal:含有媒体查询。
水平内联列表list-inline:list-style-none; padding-left: 0; margin-left: -5px;
并且ul>li:display: inline-block; padding-right: 5px; padding-left: 5px;

三种代码书写和引入的风格

code和kbd只是配色不同,pre用于多行代码输入,且计算空格。样式请看源码。
无论哪一种代码风格,碰到标签开始和结束符号都要使用硬编码“&lt”和“&gt”来代替。
添加.pre-scrollable类可以控制最大高度为340px,超出则出现垂直滚动条,宽度的控制使用稍后讲解的col-md-n。

表格

1个基础样式,4个附加样式,1个响应式表格够不够?表格行的背景色可以通过给tr添加六个相应颜色类名修改:
active(#f5f5f5),success(#dff0d8),info(#d9edf7),warning(#fcf8e3),danger(#f2dede)
table加上.table-hover,同时tr加上字体颜色,这样也会有额外的伪类样式导致颜色悬浮。

表格类名 表格类型
.table 基础表格
.table-bordered 带边框的表格
.table-striped 斑马线表格
.table-hover 鼠标悬停高亮
.table-condensed 紧凑型表格
.table-responsive 响应式表格

基础表格默认设置了底边距20px,thead底部设置了2px的浅灰色实线,每个单元格顶部设置了1px的浅灰色实线。
带边框的表格只在基础表格的情况下加上了垂直1px的浅灰色边框线。
斑马线表格隔行浅灰色(#f9f9f9)背景,利用的是CSS3的:nth-child实现,IE8及以下无效。
鼠标悬停高亮表格原理是设置了tr:hover伪类。
紧凑型表格的原理是将单元格的内边距由8px调整到5px。
响应式表格据说以768px宽度为界是否出现滚动条,但据我是用来看所有类型的表格都是响应式的。

表单

按钮

Bootstrap3相比v2版本在按钮的CSS3特效上减少了很多,但是兼容做得更好了很多。按钮类可以放在任何标签中,个人建议放在button和a标签中,简单表单提交可以考虑放在type=submit的input中。
基本按钮(.btn),默认按钮(.btn-default)按钮背景均为#fff,字体为#333,边框颜色为#ccc。和表格同样的道理,使用默认按钮前要先使用基本按钮。
按钮的风格也可以定制,基本还是那几个颜色,分别变成了.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger,.btn-link。使用定制按钮前也要先加入基本按钮哦。
按钮的大小也是可以修改的哦,下表是四种尺寸按钮的对比:

按钮类名 描述 属性和值
.btn-lg 变大 padding: 10px 16px; font-size: 18px;
line-height: 1.33; border-radius: 6px;
.btn 正常 padding: 6px 12px; font-size: 14px;
line-height: 1.43; border-radius: 4px;
.btn-sm 变小 padding: 5px 10px; font-size: 12px;
line-height: 1.5; border-radius: 3px;
.btn-xs 超小 padding: 1px 5px; font-size: 12px;
line-height: 1.5; border-radius: 3px;

先使用.btn声明这是个按钮,再用块状按钮.btn-block类可以让用户自定义一个按钮的尺寸和样式,这样按钮就会充满整个容器,并且不会有任何padding和margin。
按钮分为活动状态和禁用状态:活动状态有悬浮:hover,点击:active,焦点:focus,在不同按钮配色风格下它们的表现是不同的。禁用按钮用两种方法,分别是添加类名或者添加元素属性disabled,禁用按钮会降低透明度,不同配色风格下的外观有所不同,多数场合使用可以禁止链接添加元素属性,鼠标经过会提示禁止。

按钮组

按钮组一般配合矢量图标用于定制化分页,或者用来开发类似于word编辑器插件的UI部分,你只需要在一个带.btn-group类名的容器中连续写上多个button按钮即可。按钮的样式颜色类依然可以使用,按钮容器中加入带图标类的span标签就可以实现矢量图标按钮,类名.btn-group只是将这些按钮联合在一起了并且使用了伪类和头尾按钮CSS3的圆角。
如果你想制作编辑器插件那种样式

图像

Bootstrap3中图片的样式主要有
响应式图片(.img-responsive),圆角图片(.img-rounded),原形图片(.img-circle),缩略图片(.img-thumbnail)
如果你想控制图片的大小,建议在img标签的父容器上规定尺寸,严禁直接通过CSS样式直接修改img图片的大小。圆角圆形使用的CSS3效果在IE8及以下是不起作用的。
缩略图还有专门的组件类.thumbnail,其实就是给图片加了个框,一般配合网格系统和超链接标签使用,包括各种js图片弹出框组件也可以这样实现。

图标

制作好矢量图标后,配合CSS3的font-face为其命名就可以实现icon类的效果。Bootstrap3可以免费使用glyphicons.com这个商业公司提供的几百个矢量图标,当然你也可以下载引入更受欢迎的Font Awesome矢量图标。
使用glyphicon的图标前需要引入theme.css文件,然后添加类名glyphicon 和对应的前缀为glyphicon-这种类名即可。

网格系统/栅格布局

熟练使用栅格布局是入门Bootstrap的标志,当你需要使用它时,必须先定义一个容器,添加带padding且用于居中类名.container,布满宽度的为.container-fluid。然后定义数据行.row,在数据行容器的基础上去定义数据列.col,数据列容器根据终端的分辨率有.col-lg-,.col-md-,.col-sm-,.col-xs-,等开头的,结尾加上一个1-12的数字,你可以填写多个.col数据列,但是它们想加不允许超过12,否则会换行重新计算。
栅格布局针对的终端有四种,分别以分768px,992px,1220px的宽度作为分水岭,其对应的容器宽度和每列宽度的数字请自行百度,后者通过便宜计算出来,并不是准确的60px,80px。
栅格布局需要一个主要的容器,容器中的row和col都可以看作是一层容器,不同列之间可以有列偏移,列排序,列嵌套等等。

下拉菜单

使用下拉列表必须先引入对应版本的jquery.js和bootstrap.js,下拉菜单的类名叫做dropdowm掉下来,几乎都要配合按钮使用。将按钮和列表同时放入一个声明了.dropdown类的容器中。
你的button除了按钮样式类,还必须声明 data-toggle="dropdown" ,其内容必须和外层容器的类名一致,建议不要修改。
ul必须声明.dropdown-menu类,该类样式有display:none,原理就是DOM操作给其添加或者移除display:block的.open类。如果你想让按钮出现指向箭头,请在button容器内添加span元素,并且加入.caret类。
下拉列表的分割线可以添加一个空的li并追加.divider类,但我不是很建议这种做法。
对每一组的下拉列表还可以给一个头部类别总称,也叫菜单标题:菜单标题中不需要超链接a标签,同时其声明类为.dropdown-header。
下拉菜单的对齐方式默认为左对齐,你可以通过给ul追加.dropdown-menu-right或者pull-right修改,两者完全是一样的,但是在这之前你必须给父容器一个宽度,建议使用botstrap自带的栅格布局。
下拉菜单项的状态默认开启了悬浮和焦点状态的,你也可通过增加.active和.disabled修改为活跃和禁用状态。禁用状态只有鼠标悬浮会出现禁止标志。
考虑SEO的话,这些地方都应该添加id和对应的role,初学不必理会,或者复制官方组件代码进行修改。

导航

使用.nav声明导航,还要追加具体导航的样式类,或者说主题类,导航声明一般都是放在ul标签中,并且li中添加超链接标签a。
标签形导航:nav-tabs;
胶囊形导航:nav-pills;
垂直列表导航:nav-stacked;
自适应导航:nav-justified;多数时候和tabs,pills配合使用。
二级导航:将li当作父容器,给它dropdown类,它的子容器a和下拉箭头caret不变,子容器ul添加dropdown-menu类即可。
面包屑导航:这就是无极限分类的前端UI部分了,面包屑导航使用.breadcrumbs组件类名。官网建议使用ol有序列表,为了表示当前位置,最后一个li应该添加.active状态类。它的实现方式用了伪类:before,IE低用户不支持。

导航条

基本导航条只是在ul导航的基础上添加了一个父容器,加了两个类名:navbar navbar-default,前者是声明组件,后者声明样式主题。其样式可以修改为反色主题:nav-inverse;
导航条可以添加稍显不同的标题(当然你也可以修改为LOGO图和矢量图标,但是请自行注意默认内外边距),添加标题请在父容器中添加带.navbar-header类的div,并且div容器中添加带.navbar-brand类的a容器标签,a标签中书写标题内容。
二级菜单的书写和导航是一样的,在 li 中添加.dropdown类,然后是必备的a标签(a必须设置的:data-toggle="dropdown" class="dropdown-toggle")和span.caret,以及带dropdown-menu类的ul标签。li的激活和禁用状态依然可以自行设置。
导航栏中的表单搜索是比较常用的,你只需要定义一个form表单容器,包含div和button按钮即可,把input输入框放入div容器中。按钮样式随意定制哦,美化输入框input的办法是为它添加.form-control类,div容器必须添加.form-group类。至于form的class,你需要添加.navbar-form,根据需求你还可以添加navbar-left/right让它浮动定位。
导航条按钮:navbar-btn;导航条文本:navbar-text;导航条链接:navbar-link;这三个不是很建议使用,貌似用多了样式的间距会被打乱。
如果你想让导航条固定在顶部或者底部,只需要添加.navbar-fixed-top或者.navbar-fixed-bottom。
实际上最常用的导航条是上面的综合一下再加上响应式,响应式导航条在宽度小的时候会隐藏起来,非常利于移动端使用。这里重要书写又有点麻烦,我直接上图吧:

响应式导航条代码

另外分页导航也是一个重要且常用的组件,分页导航其实只是一个ul无序列表。组件类名为.pagination,分页导航包括带页码的和带翻页的两种,添加.active表示当前页码。
我们一般的分页都是使用div>a或者div>span这种结构,但是bootstrap3使用了ul>li>a这种结构哦。
页码分页导航:pagination-lg/sm即可,默认大小可以省略。
翻页分页导航:上一页下一页的类名分别为:.previous 和 .next。左右方向箭头硬编码分别为:« 和 »。

高亮标签和徽章

标签和徽章的用法和意义几乎是一样的。标签有六中颜色风格,声明为.label,六种类名分别为label-default/primary/success/info/warning/danger。网上一些显示火啊热啊的就是这样写的,加了额外的定位。

徽章也叫勋章,主要用途还是提示未读信息这种ajax传输的小量验证和判断数据,在你想要添加的地方使用.badge类声明就会默认添加,常在ul导航栏中见到徽章,在特定颜色风格的li中,其徽章.badge样式也会有所改变。
按钮徽章和徽章浮动(.pull-right)也是经常见到的使用场景。
标签和徽章在没有数据内容时候都是隐藏的,这用到了CSS的:empty伪类元素将之设置为display:none。

警示框

个人认为警示框非常实用,典型如laravel-china,ruby-china和简书的发表文章,评论和回复消息,这种页面小内容改变一般会使用ajax交互方式,js和后端语言联通后随时判断后端接口返回的json数组中status的值,如果返回值为0则让js在指定区域显示警示框和返回错误提示msg。
同样的,使用.alert声明警示框(为了利于SEO优化,建议声明组件类的同时添加role名),需要其他颜色的警示框请追加使用alert-success,alert-info,alert-warning,alert-danger。
可关闭的警示框通过给容器添加alert-dismissable类,并且在容器内添加这样一行按钮代码即可:<pre>
<button class="close" type="button" data-dismiss="alert">×</button>
</pre>
带超链接的警示框只是在容器内部使用a标签而已,但是不同颜色类型的警示框,其超链接样式也有些美化和修改。为了突出警示框内容时,我们也常常在容器中使用strong标签。

进度条

进度条的声明类名为.progress,该声明必须放在具有一定宽度的父容器中,并且建议具有自己的背景颜色。子容器使用.progress-bar这个类名,同时设置子容器的width百分比值即可,但这只是并不常用的默认进度条样式(深蓝色)。
彩色进度条只需要在子容器中添加代表颜色的几个进度条类名即可,如:progress-bar-success,progress-bar-info,progress-bar-warning,progress-bar-danger。
静态条纹进度条就是在上面的基础上给父容器添加了progress-striped类。
动态条纹进度条在静态的基础上给父容器添加了.active类。实现方式利用了CSS3的animation,@keyframes创建动画效果,再利用CSS3线性渐变制作。
实现简单的多种颜色的进度条层叠,你只需要在父容器内部放置多个子容器,并为它们设置progress-bar 和 progress-bar-color即可。多种颜色层叠也是可以使用条纹和动态条纹的,只需要给子容器添加progress-bar-striped和active类即可。
带Label的进度条是最常用的,其实你只需要在子容器中书写正常的HTML内容即可实现,0%的进度条可能存在颜色不方便区分的问题。Bootstrap3考虑到语义化和SEO优化,建议添加使用role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"。

媒体对象

什么是媒体对象呢?移动APP上文章垂直布局在bootstrap3中就被称为媒体对象,一般是左边一张图,右边是内容的说明。
默认媒体对象在声明媒体对象容器(.media)后添加媒体对象的对象(.media-object),也就是你常见的左侧图片。媒体对象的主体(.media-body),就是右侧内容部分。主体中可以存在媒体对象的标题(.media-heading)。除此之外,Bootstrap可以使用.pull-left和.pull-right控制媒体对象的浮动方式。通常情况你是这样操作的:
父容器添加.media类,内部分为带pull-left的a标签(内部有img图像)和带media-body的另一容器,.media-body容器中可以有一般为标题的.media-heading和尾部的footer。

媒体对象嵌套

媒体对象嵌套是评论系统必备的组件,一般是左侧用户头像等信息,右侧为用户评论的内容,这就是Bootstrap3中的媒体对象嵌套,只需将新的 .media容器放入.media-body中即可。这个组件一般要配合无极限分类使用,但是评论系统使用无极限分类会导致数据结构层级太深,而且样式缩进对移动端用户不友好,建议后端使用无极限分类api,前端样式建议最多遍历到第三层。
媒体对象列表:对于前端样式不缩进,或者可以隐藏缩进只显示第一层评论的情况,Bootstrap3提供了可以给ul加上.media-list,给li加上.media的做法。一般情况下你的操作应该是这样的:给ul添加.media-list,多个li标签均添加.media类,li标签中包含左侧a容器(pull-left)和右侧div容器(media-body),
左侧容器中包含一张img图片,右侧容器中可以包含heading,footer等,分别可以放在各种容器标签中。

列表组

基础的列表组就是给 ul 一个声明类 .list-group,再给所有的 li 一个 .list-group-item。
带徽章的列表组就在 li 中嵌套一个类名为 .badge的span标签,这样徽章就会出现在列表项的右侧,你也可以通过自定义样式文件增加 .badge 并增加color和background-color修改徽章的前景色和背景色。
带超链接的列表组就是 li 容器中加超链接 a 标签。
自定义列表组就是在 li 容器中其他标签上加入list-group-item-heading/text类,两者的区别是heading外边距距顶部0px,距底部5px; text外边距距底部0px,行高1.3倍。看起来就是text显得更加紧凑了。
列表组的状态可以设置为活动(.active)和禁用(.disabled),分别给了li蓝色背景和灰色背景,并且禁用状态出现禁止标志。
多彩列表组只是修改了 li 的前景色和背景色。只要给 li 加入 list-group-item-success/info/warning/danger这些颜色类名就OK了。

面板

无论在PC还是移动端,面板配合栅格布局的使用率还是很高的,尤其是文章列表和行列商品展示,但是在v4版本有了新的替代品组件。 .spanel是面板声明类,具体包括基础面板(.panel-default),带头尾的面板(-heading,-body,-footer),面板中嵌套表格,面板中嵌套列表组(.list-group),彩色风格的面板:
重点蓝-primary,信息蓝-info,成功绿-success,警告黄-warning,危险红-danger。

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

推荐阅读更多精彩内容

  • 第5章 菜单、按钮及导航 一、下拉菜单 小伙伴们注意,在Bootstrap框架中的下拉菜单组件是一个独立的组件,根...
    凛0_0阅读 4,938评论 0 66
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,504评论 25 707
  • Bootstrap是什么? 一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。GitHub上介绍 的...
    凛0_0阅读 10,848评论 3 184
  • 在生活中、工作中,当我们想要要完成一件非常难的时候的时候,经常会有人说一些打击我们的话语,你之前那样的小事情都做不...
    戴老师成长记录仪阅读 1,301评论 0 4