从本节开始,就进入本系列的第二个部分——css和html的结合——说白了就是选择器。css
CSS中定义了样式,如何将这些样式设置到相应的html节点上?就不得不经过选择器。让浏览器知道css选择了哪个dom节点,浏览器就会乖乖的把相应的样式渲染成视图。html
至于css能把页面渲染成什么样子,这是本系列的第三部分。前端
第一部分讲css样式的加载和层叠,第二部分讲选择器以及选择器的等级,第三部分讲呈现的各类样式(背景、字体、定位、浮动等)。这样一个思路,也正式浏览器使用css的流程,是最有效的学习思路。(第二节中讲过,此处再回顾一遍)jquery
说道css选择器,你们都知道有许多种,可是真要你去掰着手指头数一数的话,你可能须要数几分钟。其实这么多选择器,彻底能够分为两类:git
通用选择器 * 你们应该都比较熟悉了,最经常使用的就是 *{margin:0; box-sizing:border-box;}。mragin:0我们在上一节已经说过,box-sizing:border-box将在后面的盒子模型那块再详细描述。github
例如,咱们在检测bootstrap3的样式时,也能够看到它用到了 * 选择器:web
单标签选择器是最基础的css知识了,在上一节的浏览器默认样式中,处处都用了单标签选择。这里再也不赘述,css基础薄弱的朋友,能够先去补补课。面试
多标签选择器通常和html上下文有关,它有如下集中分类json
给你们列举一个比较典型的应用,以下图bootstrap
上图中的效果应该比较常见,在各个菜单之间加下划线。我以前的实现是:每一个li都加一个border-bottom,在把最后一个li的border-bottom去掉。
其实彻底不必这样麻烦,下面一个样式设置便可解决:
有点意思吧?
基础知识,再也不赘述。
按照许多css教程上讲的,id选择器和属性选择器是不一样的两个类别,为何要把id选择器放在属性选择器下面的呢?由于css选择器是根据html节点的特性来设置的,id也是一个属性,只是它是一个比较特殊的属性,每一个html节点的id不能重复。
因为特殊,并且比较经常使用,因此就单独给id选择器一个“#”,本质上就是一个属性选择器。下面两行代码的执行效果彻底相同:
基础知识,再也不赘述。
class也是一个特殊的属性,之因此把它放在属性选择器下,和上文将的id同样。
属性选择器有两种状况:
这两个也是比较基础的,再次也就再也不详细展开了,不了解的朋友能够去看看基础教程补补课。
上文提到了若干种选择器类型,伪类和伪元素可针对任何一种选择器使用。
伪类分为UI伪类和结构化伪类。
UI伪类都比较简单经常使用,我下面简单写几句代码,就再也不详细说了。
先问你们一个问题:如何实现一个表格间隔显示背景颜色,如图:
最简单的方式莫过于使用结构化伪类,一句样式设置便可实现。
结构化伪类有以下书写选项,至于什么意思,从字面意思便可理解:
记住,伪元素是一个很是重要的概念!其中,:before和:after 很是经常使用。
首先,我们先看看:before和:after是怎么回事儿。
上图中,咱们能够看到,能够为元素先后添加内容。这里的“内容”还能够写成unicode编码的方式,以下图:
另外,除了能够添加内容外,你还能够自定义执行内容的样式,以下图:
以上大致了解了二者的基本用法,下面给家介绍两个典型的应用场景:
第一,你们都知道fontAwesome吧,web最流行的icon字体库。这些小图标的应用就是经过伪元素来实现的,以下图:
(不知道fontAwesome也不要紧,咱们在讲到css字体时,会详细介绍)
第二,清除浮动的样式你们都知道吧?这就是一个很典型的伪元素应用场景:
(在讲到css浮动时,会专门讲解clearfix)
选择器原本是css的一种规则,用于为css选择html节点的。可是聪明的人类仍是经过选择器创造出了其余领域很是伟大的做品。
jQuery被推广流行的根本缘由就是它的“Query”——基于css选择器的“Query”。如今的浏览器都支持querySelectAll()方法了,其实这就是W3C“抄袭”的jQuery的设计。
相信各位web前端人员对jquery都比较熟悉了,这里点一下便可。
jquery能够经过一段css选择器表达式从既有的html结构中选择符合表达式的dom组,可是zen-coding反其道而行之——能够根据css选择器表达式创造出html节点。不得不佩服这帮人的创造力。
若是你还没用过zen-coding,不管你之后用不用,建议你也必定要去体验一下!
本节总结了css的选择器知识,知道了选择器有若干种类型。可是类型多了不必定是个好事儿,下一节就给你们说说类型太多带来的一个问题,以及解决方案。
---------------------------------------------------------------
本系列的目录页面:http://www.cnblogs.com/wangfupeng1988/p/4325007.html
-------------------------------------------------------------------------------------------------------------
学习做者教程:《前端JS高级面试》《前端JS基础面试题》《React.js模拟大众点评webapp》《zepto设计与源码分析》《json2.js源码解读》
也欢迎关注个人开源项目——wangEditor,简洁易用的web富文本编辑器
-------------------------------------------------------------------------------------------------------------