不管是设计思想,还是架构,都可以总结为一个词:AO模式。A表示Append,即“附加”的意思,O表示Overwrite,即“重写”的意思。所有的CSS组件都是沿用这种思想来设计的。这也是CSS的特性,不同名的样式可以叠加在一起使用;同名的样式,后面的会覆盖前面的,从而达到组合应用的效果。

1.基础样式

  任何一个CSS组件在刚开始都要定义基本样式,就像一个新的HTML页面制作之前都要先定义统一的符号、背景色一样。在基本样式里,一般是定义该样式下的字体(font-)、外内边距(padding,margin)、显示方式(display)、边框(border)以及其他相关内容。

  比如在警告框组件(alert)里,其基本样式就只定义了内外边距、边框、圆角设置。源码如下:

// 源码4434行
.alert { /* 基本的警告框设置 */
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
}

2.颜色样式

  如果在Bootstrap官方网站看过btn按钮或者alert警告框的样例,你会发现,Bootstrap默认为很多组件都提供了5中颜色的样式,这5种颜色分别是:primary(重点蓝)、success(成功绿)、info(信息蓝)、warning(警告橙)、danger(危险红)。定义规则是:组件名称-颜色类型,如btn-parimary、alert-info。

<!-- Standard button -->
<button type="button" class="btn btn-default">(默认样式)Default</button> <!-- Provides extra visual weight and identifies the primary action in a set of buttons -->
<button type="button" class="btn btn-primary">(首选项)Primary</button> <!-- Indicates a successful or positive action -->
<button type="button" class="btn btn-success">(成功)Success</button> <!-- Contextual button for informational alert messages -->
<button type="button" class="btn btn-info">(一般信息)Info</button> <!-- Indicates caution should be taken with this action -->
<button type="button" class="btn btn-warning">(警告)Warning</button> <!-- Indicates a dangerous or potentially negative action -->
<button type="button" class="btn btn-danger">(危险)Danger</button> <!-- Deemphasize a button by making it look like a link while maintaining button behavior -->
<button type="button" class="btn btn-link">(链接)Link</button>

  在定义不同颜色样式的时候,主要是定义文本颜色、边框颜色、背景颜色等,具体定义什么颜色和该组件的特性有关。比如面板panel就只要定义边框的颜色就可以了,而按钮不仅需要定义边框颜色,还需要定义背景色以及文本颜色。btn、panel、alert三个组件在定义颜色样式的代码如下:

/* btn */
.btn-primary {
color: #ffffff; background-color: #428bca; border-color: #357ebd;
}
/* panel */
.panel-success {
border-color: #d6e9c6;
}
.panel-success > .panel-heading {
color: #468847; background-color: #dff0d8; border-color: #d6e9c6;
}
/* alert */
.alert-success {
color: #468847; background-color: #dff0d8; border-color: #d6e9c6;
}
.alert-success hr {
border-top-color: #c9e2b3;
}

  可以发现,不同的组件,定义的内容稍有不同,具体定义什么主要由组件的特性来决定。另外,还要定义其内部子样式的颜色以便形成统一风格,比如.panel-success内部的.panel-heading顶部元素也要定义一个相同风格的颜色。

  而对于一些可单击元素,比如btn按钮,还要特殊处理按钮在hover、focus、active状态时的颜色,以便让这些状态在同一风格下表现一致。其源码如下所示:

// 源码2081行
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open .dropdown-toggle.btn-primary {
color: #fff;
background-color: #3276b1;
border-color: #285e8e;
}

  使用方式就像Bootstrap宣传的那样,将两个样式叠加在一起使用即可。

<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-success">Success</button>
<div class="alert alert-warning">...</div>
<div class="alert alert-danger">...</div>

3.尺寸样式

  Bootstrap也为大部分组件都提供了尺寸的快捷设置。一般组件都有4中尺寸:超小(xs)、小型(sm)、普通()、大型(lg)。使用如下所示:

<button type="button" class="btn btn-xs">Primary</button>
<button type="button" class="btn btn-lg">Success</button>
<div class="well well-lg">...</div>
<div class="well well-sm">...</div>

  调整尺寸主要是调整所对应元素的padding和圆角设置,有时候也会相应调整行间距和字体大小。btn按钮和well组件在尺寸方面的设置源码如下所示:

/* 源码2134行*/
.btn-lg {
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
/* 源码5060行*/
.well-lg {
padding: 24px; /*加大内边距*/
border-radius: 6px; /*加大圆角设置*/
}
.well-sm {
padding: 9px; /*减少内边距*/
border-radius: 3px; /*减少圆角设置*/
}

  值得注意的是,同一个组件的不同类型的样式可以组合在一起使用,比如颜色样式btn-success和尺寸样式btn-lg一起使用完全没有问题,不会引起冲突。

<button type="button" class="btn btn-success btn-lg">Success</button>

4.特殊元素样式

  所谓特殊元素,即特定类型的组件一般只使用某一种或者几种固定的元素,比如alert警告框内一般只用警告标题、内容和关闭链接元素。再如导航nav里的经常用的li元素。在定义这些组件的时候,也要为这些常用的元素定义其相关的默认样式。这两个组件对常用特殊元素的样式定义如下所示:

// 源码 4444 行
.alert .alert-link { font-weight: bold; /* alert内的链接样式 */
}
.alert > p,.alert > ul { margin-bottom:; /* alert内的p元素和ul元素的底部外边距设置 */
}
.alert > p + p { margin-top: 5px; /*两个段落之间,增加一个顶部外边距*/
}
.alert-dismissable { padding-right: 35px; /* 增大右内边距,以便关闭按钮*/}
.alert-dismissable .close { /* 警告框内,如果设置关闭按钮,特殊处理 */
position: relative;
top: -2px;
right: -21px; /* 关闭按钮,右对齐 */
color: inherit;
}
// 源码 3462 行
.nav > li {
position: relative; /*所有的菜单项都是相对定位*/
display: block; /* 块级显示*/
}
.nav > li > a {
position: relative; /* a链接相对定位*/
display: block; /* 块级显示*/
padding: 10px 15px; /* 外边距保留稍微大一些*/
}
.nav > li > a:hover,.nav > li > a:focus { /* 移动或焦点时链接的显示效果*/
text-decoration: none;
background-color: #eeeeee; /* 链接移动或焦点时,背景色变为灰色
*/
}
.nav > li.disabled > a { color: #999999; /* li上禁用时的链接颜色*/}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
/* li上禁用时,移动到链接上时的各种处理*/
color: #999999; /* 颜色变灰*/
text-decoration: none;
cursor: not-allowed;
background-color: transparent;
}

  特殊元素所定义的样式不固定,这取决于是什么样的特殊元素,有的是定义内外边距,有的是定义自定义颜色和背景色,具体元素具体对待。

5.并列元素的样式

  在很多情况下,一个组件内部需要放置多个子元素,这种情况,就需要处理并列元素的间距问题。举个例子,alert组件里,有时候要提示两段内容,这时候就需要用到两个p元素,所以需要处理这种情况的样式。

// 源码4447行
.alert > p {
margin-bottom:; /* alert内的p元素和ul元素的底部外边距设置 */
}
.alert > p + p {
margin-top: 5px; /*两个段落之间,增加一个顶部外边距*/
}

  而在模态弹窗组件(model)的底部,经常需要显示多个按钮(比如:保存和取消),这时候就需要处理水平并列的情况了:

// 源码5178行
.modal-footer .btn + .btn {
/* 底部区域内的按钮样式设置,如果有多个按钮,设置左部外边距 */
margin-bottom:;
margin-left: 5px;
}

6.嵌套子元素样式

  有时候,我们也需要将两个相同或不同的组件嵌套在一起使用,比如,多个按钮组在一起使用,或者按钮和下拉菜单一起使用,效果如图所示:

  样式设置如下所示:

// 源码3147行
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
margin-left: -1px;/* 消除2个按钮(或一个按钮和另外一个按钮组)之间的1像素细节引起的冲突
*/
}
.btn-group > .btn-group {
float: left;
}

7.动画样式

  在Bootstrap里,动画样式应用得不是很多只是在进度条组件里会使用到。先看一下动画是如何应用的:只需要在progress样式上应用一个active样式,即可开启动画过渡效果。

<div class="progress progress-striped active">
<div class="progress-bar" style="width: 45%">
<span class="sr-only">45% Complete</span>
</div>
</div>

  样式定义:

// 源码4551行
.progress.active .progress-bar {
-webkit-animation: progress-bar-stripes 2s linear infinite;/* 2秒过渡40像素,无限循环 */
animation: progress-bar-stripes 2s linear infinite; /* 其他浏览器 */
}

CSS组件架构的设计思想的更多相关文章

  1. Bootstrap CSS组组件架构的设计思想

    w AO模式 Append Overwrite 附加重写

  2. React架构、设计思想

    一.

  3. Day1:了解APICloud平台、理解APICloud应用设计思想、掌握平台使用流程。学习如何对一款APP进行需求分析、功能分解和架构设计等编码之前重要的准备工作

    学习目标 总体上了解一下APICloud平台,重点介绍相关的学习资源,入门资料,常见的FAQ等 明确我们这七天要开发一个什么样的APP,明确功能需求,跟上每天的课程节奏,可以课前预习 梳理出对于一款A ...

  4. 从一般分布式设计看HDFS设计思想与架构

     要想深入学习HDFS就要先了解其设计思想和架构,这样才能继续深入使用HDFS或者深入研究源代码.懂得了"所以然"才能在实际使用中灵活运用.快速解决遇到的问题.下面这篇博文我们就先 ...

  5. 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)

    上一节介绍了 Cinder 的架构,这节讨论 Cinder 个组件如何协同工作及其设计思想. 从 volume 创建流程看 cinder-* 子服务如何协同工作 对于 Cinder 学习来说,Volu ...

  6. 从MVC框架看MVC架构的设计

    尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些 ...

  7. 从MVC框架看MVC架构的设计(转)

    尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些 ...

  8. Web设计思想——渐进增强

    最近在拜读一本Web体验相关的书<渐进增强--跨平台用户体验设计 >,阅读后做些总结,消化一下书中的精髓. 在阅读本文前,可以先思考下面几个问题. 1. 浏览网页的目的是什么? 2. 浏览 ...

  9. FPGA设计思想与技巧(转载)

    题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...

随机推荐

  1. 生成XML文件

    import java.io.FileOutputStream;import java.io.IOException; import org.jdom.Document;import org.jdom ...

  2. node

    docker run -d --name data -v c:/jayruanwork/app:/usr/share/app busybox || windows c:\jayruanwork\app ...

  3. C#面向对象总结1

    1.面向过程-----> 面向对象 面向过程:面向的是完成这件事的过程,强调的是完成这件事的动作. 面向对象:找个对象帮你做事. 意在写出一个通用的代码,屏蔽差异. 我们在代码中描述一个对象,一 ...

  4. 浅析Hadoop文件格式

    Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度为优势.不过,MPP数据库社区也一直批评Hadoop由于文件格式并非为特定目的而建,因此序列化和反序 ...

  5. Spring框架学习(一)

    一.概述 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器.为软件开发提供全方位支持的应用程序框架. 二.控制反转(In ...

  6. UVA 247 电话圈 (floyd传递闭包 + dfs输出连通分量的点)

    题意:输出所有的环: 思路:数据比较小,用三层循环的floyd传递闭包(即两条路通为1,不通为0,如果在一个环中,环中的所有点能互相连通),输出路径用dfs,递归还没有出现过的点(vis),输出并递归 ...

  7. C++学习笔记16:Linux系统编程基础1

    参数列表 Linux命令行规范 短参数:以单横开头,后跟单一字符,例如:ls -h 长参数:以双横开头,后跟字符串,例如:ls --help 程序访问参数列表的方法: 主函数的参数argc和argv ...

  8. 看啦这么就别人的博客 我也来写一篇! Object转换其他类型

    package com.sinitek.framework.util; import java.math.BigDecimal;import java.sql.Timestamp;import jav ...

  9. (实用篇)jQuery二级联动代码

    jquery二级联动城市代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  10. [20150522]RPM包的管理

    RPM包的管理 RPM包的分类 RPM包可分为源码包和二进制包两类.源码包的主要优点是开源,如果有足够的能力,可以修改源代码,源码包可以自由选择所需要安装的功能,软件是编译安装,所以更加适合自己的系统 ...