深入理解Bootstrap
上QQ阅读APP看书,第一时间看更新

1.5 CSS基本语法

本节主要介绍Bootstrap里用到的CSS语法,以便在源码分析时更容易理解和学习,如果仅是为了使用Bootstrap框架(而非进行完整的源码分析,以便开发各种CSS和JS插件)的话,则可以忽略本节。但本节的语法都是比较基础的,巩固一下有好处。

Bootstrap的CSS组件的核心就是选择器的定义以及在各自优先级上的处理。由于大部分的选择器都很常见,所以就不做单独说明了,只列举一下Bootstrap用到的知识点。

1.5.1 优先级

如何确定CSS的优先级?这里我们要先引入一个机制,分别用4个数字(a,b,c,d)表示优先级组合,比如1,1,1,1和0,1,0,1。它们的意思分别是:

❏第一个数字(a)表示style属性,优先级最高。由于一般都是class样式,所以该值一般都是0。

❏第二个数字(b)是该CSS选择器上的id数量的总和,一般都是1个。

❏第三个数字(c)是用在该CSS选择器上的其他属性CSS选择器以及伪类的总和。这里包括class(.btn)和属性CSS选择器(比如li[id=red])。

❏第四个数字(d)计算元素(就像table、p、div等)和伪元素(就像first-child等)。

❏通用CSS选择器(*)是0优先级。

❏如果两个CSS选择器有同样的优先级,在样式表中后面的那个起作用。

下面有几个例子和对应的优先级,如表1-3所示。

表1-3 选择器和所对应的优先级

同理,计算下面两个选择器的优先级:

#leftbar li#first { color: red; }
#leftbar li:first-child{ color: blue; }

结果肯定是第1个比第2个优先级高,因为第1个的优先级是0,2,0,1,而第2个是0,1,0,2。

1.5.2 选择器

每一条CSS样式的定义都由两部分组成,形式如下:选择器{样式}。在{}之前的部分就是“选择器”。“选择器”指明了应用这些“样式”的网页元素。

1.属性选择器

Bootstrap的CSS组件里使用了很多属性选择器,比如[data-toggle^=button]、[data-toggle=toggle]等。属性选择器有多种用法,表1-4列出了这些用法的区别。

表1-4 常见属性选择器用法

2.子选择器

CSS里的子元素用符号“>”表示。如下示例是表示拥有table样式的表格,其thead元素内的tr元素如果有th的话,则应用该样式。

.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #dddddd;
}

3.兄弟选择器

兄弟元素分为两种,一种是临近兄弟,一种是普通兄弟。临近兄弟的选择符用“+”表示。比如导航条里要设置两个li之间的外边距,则需要如下定义:

.nav-pills > li+li {
  margin-left: 2px;        /* 加大左外边距 */
}

如果只想查找某一个指定元素后面的兄弟节点(而不限制于临近节点),可以使用普通兄弟节点的符号“~”。比如:

.article h1 ~ p {
    font-size: 13px;
}

1.5.3 伪类

CSS3提供了非常多的可用伪类,但是Bootstrap只用了常用的几个,这里我们只简单列一下常用的伪类和其对应的意思,具体如表1-5所示。

表1-5 CSS3中常见伪类

举个例子,按钮组里,除第一个按钮、最后一个按钮和带有dropdown-toggle样式的元素外,其他btn样式的按钮都不能设置圆角。我们应该这么定义:

.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}

注意

多个伪类可以一起使用。

1.5.4 display属性

这个属性用于定义建立布局时元素生成的框的类型。对于HTML等文档类型,如果使用display时不谨慎会很危险,因为可能违反HTML中已经定义的显示层次结构。表1-6是display支持的常见属性值和意义。

表1-6 display的场景属性值和意义

1.5.5 媒体查询

媒体查询是进行响应式设计的核心要素,其功能非常强大。这里我们只列出Bootstrap用到的功能,具体可以访问http://www.w3.org/TR/css3-mediaqueries/进行查看。

Bootstrap主要用到min-width、max-width,以及and语法,用于在不同的分辨率下设置不同的CSS样式。示例如下:

@media (max-width: 767px) {
    /*在小于768像素的屏幕里,这里的样式才生效*/
}
@media (min-width: 768px) and (max-width: 991px) {
    /*在768和991像素之间的屏幕里,这里的样式才生效*/
}
@media (min-width: 992px) and (max-width: 1199px) {
    /*在992和1199像素之间的屏幕里,这里的样式才生效*/
}
@media (min-width: 1200px) {
    /*在大于1200像素的屏幕里,这里的样式才生效*/
}