本文最初于2015-10-03发表于博客园,并在GitHub上持续更新前端的系列文章。欢迎在GitHub上关注我,一起入门和进阶前端。

本文主要内容

  • CSS概述
  • CSS和HTML结合的三种方式:行内样式表内嵌样式表外部样式表
  • CSS四种基本选择器:标签选择器类选择器ID选择器通用选择器
  • CSS几种扩展选择器:后代选择器交集选择器并集选择器伪类选择器
  • CSS样式优先级

前言

现在的互联网前端分三层:

  • HTML:超文本标记语言。从语义的角度描述页面结构
  • CSS:层叠样式表。从审美的角度负责页面样式
  • JS:JavaScript 。从交互的角度描述页面行为

CSS 概述

CSS:Cascading Style Sheet,层叠样式表。CSS的作用就是给HTML页面标签添加各种样式,定义网页的显示效果。简单一句话:CSS将网页内容和显示样式进行分离,提高了显示功能。

css的最新版本是css3,我们目前学习的是css2.1。 因为css3和css2.1不矛盾,必须先学2.1然后学3。

接下来我们要讲一下为什么要使用CSS。

HTML的缺陷:

  1. 不能够适应多种设备
  2. 要求浏览器必须智能化足够庞大
  3. 数据和显示没有分开
  4. 功能不够强大

CSS 优点:

  1. 使数据和显示分开
  2. 降低网络流量
  3. 使整个网站视觉效果一致
  4. 使开发效率提高了(耦合性降低,一个人负责写html,一个人负责写css)

比如说,有一个样式需要在一百个页面上显示,如果是html来实现,那要写一百遍,现在有了css,只要写一遍。现在,html只提供数据和一些控件,完全交给css提供各种各样的样式。

CSS的重点知识点

盒子模型、浮动、定位

CSS 整体感知

我们先来看一段简单的css代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <style>
  7. p{
  8. color:red;
  9. font-size: 30px;
  10. text-decoration: underline;
  11. font-weight: bold;
  12. text-align: center;
  13. font-style: italic;
  14. }
  15. h1{
  16. color:blue;
  17. font-size: 50px;
  18. font-weight: bold;
  19. background-color: pink;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <h1>我是大标题</h1>
  25. <p>
  26. 我是内容
  27. </p>
  28. </body>
  29. </html>

解释如下:

我们写css的地方是style标签,就是“样式”的意思,写在head里面。后面的课程中我们将知道,css也可以写在单独的文件里面,现在我们先写在style标签里面。

如果在sublime中输入<st或者<style然后按tab键,可以自动生成的格式如下:(建议)

  1. <style type="text/css"></style>

type表示“类型”,text就是“纯文本”,css也是纯文本。

但是,如果在sublime中输入st或者style然后按tab键,可以自动生成的格式如下:(不建议)

  1. <style></style>

css对换行不敏感,对空格也不敏感。但是一定要有标准的语法。冒号,分号都不能省略。

CSS语法

语法格式:(其实就是键值对)

  1. 选择器{
  2. 属性名: 属性值;
  3. 属性名: 属性值;
  4. }

或者可以写成:

  1. 选择器{
  2. k:v;
  3. k:v;
  4. k:v;
  5. k:v;
  6. }
  7. 选择器{
  8. k:v;
  9. k:v;
  10. k:v;
  11. k:v;
  12. }

解释:

  • 选择器代表页面上的某类元素,选择器后一定是大括号。
  • 属性名后必须用冒号隔开,属性值后用分号(最后一个属性可以不用分号)。
  • 属性名和冒号之间最好不要有空格(经验)。
  • 如果一个属性有多个值的话,那么多个值用 空格 隔开

举例:

  1. p{color: red;}

完整版代码举例:

  1. <style type="text/css">
  2. p{
  3. font-weight: bold;
  4. font-style: italic;
  5. color: red;
  6. }
  7. </style>
  8. <body>
  9. <p>洗白白</p>
  10. <p>你懂得</p>
  11. <p>我不会就这样轻易的狗带</p>
  12. </body>

效果:

css代码的注释

格式:

  1. <style type="text/css">
  2. /*
  3. 具体的注释
  4. */
  5. p{
  6. font-weight: bold;
  7. font-style: italic;
  8. color: red;
  9. }
  10. </style>

注意:只有/* */这种注释,没有//这种注释。而且注释要写在<style>标签里面才算生效哦。

接下来,我们要开始真正地讲css的知识咯。

css怎么学?CSS有两个知识部分:

1) 选择器,怎么选;

2) 属性,样式是什么

CSS的一些简单常见的属性

我们先来接触CSS的一些简单常见的属性,因为接下来需要用到。后期会专门用一篇文章来写CSS的属性。

以下属性值中,括号中的内容表示sublime中的快捷键。

字体颜色:(c)

  1. color:red;

color属性的值,可以是英语单词,比如red、blue、yellow等等;也可以是rgb、十六进制(后期详细讲)。

字号大小:(fos)

  1. font-size:40px;

font就是“字体”,size就是“尺寸”。px是“像素”。单位必须加,不加不行。

背景颜色:(bgc)

  1. background-color: blue;

background就是“背景”。

加粗:(fwb)

  1. font-weight: bold;

font是“字体” weight是“重量”的意思,bold粗。

不加粗:(fwn)

  1. font-weight: normal;

normal就是正常的意思。

斜体:(fsi)

  1. font-style: italic;

italic就是“斜体”。

不斜体:(fsn)

  1. font-style: normal;

下划线:(tdu)

  1. text-decoration: underline;

decoration就是“装饰”的意思。

没有下划线:(tdn)

  1. text-decoration:none;

PS:css没啥难的,就是要把属性给记忆准确。

CSS和HTML结合的方式(样式表)

CSS和HTML结合的方式,其实就是问你css的代码放在哪里比较合适。CSS代码理论上的位置是任意的,但通常写在<style>标签里。只要是<style>标签里的代码,那就是css代码,浏览器就是这样来进行解析的。

CSS和HTML的结合方式有3种:

  • 行内样式:在某个特定的标签里采用style属性。范围只针对此标签。
  • 内嵌样式表:在页面的head里采用<style>标签。范围针对此页面。
  • 引入外部样式表css文件的方式。这种方式又分为两种:
    • 1、采用<link>标签。例如:<link rel = "stylesheet" type = "text/css" href = "a.css"></link>
    • 2、采用import,必须写在<style>标签中,并且必须是第一句。例如:@import url(a.css) ;

两种引入样式方式的区别:外部样式表中不能写标签,但是可以写import语句。

下面来详细的讲一讲这三种方式。

1、CSS和HTML结合方式一:行内样式

采用style属性。范围只针对此标签适用。

该方式比较灵活,但是对于多个相同标签的同一样式定义比较麻烦,适合局部修改。

举例:

  1. <p style="color:white;background-color:red">我不会就这样轻易的狗带</p>

效果:

2、CSS和HTML结合方式二:内嵌样式表

在head标签中加入<style>标签,对多个标签进行统一修改,范围针对此页面。

该方式可以对单个页面的样式进行统一设置,但对于局部不够灵活。

举例:

  1. <style type="text/css">
  2. p{
  3. font-weight: bold;
  4. font-style: italic;
  5. color: red;
  6. }
  7. </style>
  8. <body>
  9. <p>洗白白</p>
  10. <p style="color:blue">你懂得</p>
  11. </body>

3、CSS和HTML结合方式三:引入外部样式表css文件

引入样式表文件的方式又分为两种:

  • (1)采用<link>标签。例如:<link rel = "stylesheet" type = "text/css" href = "a.css"></link>

  • (2)采用import,必须写在<style>标签中,并且必须是第一句。例如:@import url(a.css) ;

两种引入样式方式的区别:外部样式表中不能写标签,但是可以写import语句。

具体操作如下:

我们先在html页面的同级目录下新建一个a.css文件,那说明这里面的代码全是css代码,此时就没有必要再写<style>标签这几个字了。

a.css的代码如下:

  1. p{
  2. border: 1px solid red;
  3. font-size: 40px;
  4. }

上方的css代码中,注意像素要带上px这个单位,不然不生效。

然后我们在html文件中通过<link>标签引入这个css文件就行了。效果如下:

这里再讲一个补充的知识:link标签的rel属性

<link>标签的rel属性:

其属性值有以下两种:

  • stylesheet:定义的样式表
  • alternate stylesheet:候选的样式表

看字面意思可能比较难理解,我们来举个例子,一下子就明白了。

举例:

现在定义我们来定义3种样式表:

a.css:定义一个实线的黑色边框

  1. div{
  2. width: 200px;
  3. height: 200px;
  4. border: 3px solid black;
  5. }

ba.css:蓝色的虚线边框

  1. div{
  2. width: 200px;
  3. height: 200px;
  4. border: 3px dotted blue;
  5. }

c.css:来个背景图片

  1. div{
  2. width: 200px;
  3. height: 200px;
  4. border: 3px solid red;
  5. background-image: url("1.jpg");
  6. }

然后我们在html文件中引用三个样式表:

  1. <link rel = "stylesheet" type = "text/css" href = "a.css"></link>
  2. <link rel = "alternate stylesheet" type = "text/css" href = "b.css" title="第二种样式"></link>
  3. <link rel = "alternate stylesheet" type = "text/css" href = "c.css" title="第三种样式"></link>

上面引入的三个样式表中,后面两个样式表作为备选。注意备选的样式表中,title属性不要忘记写,不然显示不出来效果的。现在来看一下效果:(在IE中打开网页)

CSS的四种基本选择器

CSS选择器:就是指定CSS要作用的标签,那个标签的名称就是选择器。意为:选择哪个容器。

CSS的选择器分为两大类:基本选择题和扩展选择器。

基本选择器:

  • 标签选择器:针对一类标签
  • ID选择器:针对某一个特定的标签使用
  • 类选择器:针对你想要的所有标签使用
  • 通用选择器(通配符):针对所有的标签都适用(不建议使用)

下面来分别讲一讲。

1、标签选择器:选择器的名字代表html页面上的标签

标签选择器,选择的是页面上所有这种类型的标签,所以经常描述“共性”,无法描述某一个元素的“个性”。

举例:

  1. p{
  2. font-size:14px;
  3. }

上方选择器的意思是说:所有的<p>标签里的内容都将显示14号字体。

效果:

再比如说,我想让“生命壹号学完了安卓,继续学前端哟”这句话中的“前端”两个变为红色字体,那么我可以用<span>标签把“前端”这两个字围起来,然后给<span>标签加一个标签选择器。

代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <style type="text/css">
  7. span{
  8. color: red;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <p>生命壹号学完了安卓,继续学<span>前端</span></p>
  14. </body>
  15. </html>

【总结】需要注意的是:

(1)所有的标签,都可以是选择器。比如ul、li、label、dt、dl、input。

(2)无论这个标签藏的多深,一定能够被选择上。

(3)选择的所有,而不是一个。

2、ID选择器:规定用#来定义

针对某一个特定的标签来使用,只能使用一次。css中的ID选择器以”#”来定义。

举例:

  1. #mytitle{
  2. border:3px dashed green;
  3. }

效果:

id选择器的选择符是“#”。

任何的HTML标签都可以有id属性。表示这个标签的名字。这个标签的名字,可以任取,但是:

  • (1)只能有字母、数字、下划线。
  • (2)必须以字母开头。
  • (3)不能和标签同名。比如id不能叫做body、img、a。

另外,特别强调的是:HTML页面,不能出现相同的id,哪怕他们不是一个类型。比如页面上有一个id为pp的p,一个id为pp的div,是非法的!

一个标签可以被多个css选择器选择:

比如,我们可以同时让标签选择器和id选择器作用于同一个标签。如下:

然后我们通过网页的审查元素看一下效果:

现在,假设选择器冲突了,比如id选择器说这个文字是红色的,标签选择器说这个文字是绿色的。那么听谁的?

实际上,css有着非常严格的计算公式,能够处理冲突.

一个标签可以被多个css选择器选择,共同作用,这就是“层叠式”的第一层含义(第一层含义和第二层含义,放到css基础的第三篇文章里讲)。

3、类选择器:规定用圆点.来定义

、针对你想要的所有标签使用。优点:灵活。

css中用.来表示类。举例如下:

  1. .one{
  2. width:800px;
  3. }

效果:

和id非常相似,任何的标签都可以携带id属性和class属性。class属性的特点:

  • 特性1:类选择器可以被多种标签使用。

  • 特性2:同一个标签可以使用多个类选择器。用空格隔开。举例如下:(正确)

  1. <h3 class="teshu zhongyao">我是一个h3啊</h3>

初学者常见的错误,就是写成了两个class。举例如下:(错误)

  1. <h3 class="teshu" class="zhongyao">我是一个h3啊</h3>

类选择器使用的举例:

类选择器的使用,能够决定一个人的css水平。

比如,我们现在要做下面这样一个页面:

正确的思路,就是用所谓“公共类”的思路,就是我们类就是提供“公共服务”,比如有绿、大、线,一旦携带这个类名,就有相应的样式变化。对应css里的代码如下:

  1. <style type="text/css">
  2. .lv{
  3. color: green;
  4. }
  5. .da{
  6. font-size: 30px;
  7. }
  8. .underline{
  9. text-decoration: underline;
  10. }
  11. </style>

然后让每个标签去选取自己想要用的类选择器:

  1. <p class="lv da">段落1</p>
  2. <p class="lv xian">段落2</p>
  3. <p class="da xian">段落3</p>

也就是说:

(1)不要去试图用一个类名,把某个标签的所有样式写完。这个标签要多携带几个类,共同完成这个标签的样式。

(2)每一个类要尽可能小,有“公共”的概念,能够让更多的标签使用。

问题:到底用id还是用class?

答案:尽可能的用class,除非极特殊的情况可以用id。

原因:id是js用的。也就是说,js要通过id属性得到标签,所以css层面尽量不用id,要不然js就很别扭。另一层面,我们会认为一个有id的元素,有动态效果。

举例如下:

上图所示,css和js都在用同一个id,会出现不好沟通的情况。

我们记住这句话:类上样式,id上行为。意思是说,class属性交给css使用,id属性交给js使用。

上面这三种选择器的区别:

  • 标签选择器针对的是页面上的一类标签。
  • ID选择器是只针对特定的标签(一个),ID是此标签在此页面上的唯一标识。
  • 类选择器可以被多种标签使用。

4、通配符*:匹配任何标签

通用选择器,将匹配任何标签。不建议使用,IE有些版本不支持,大网站增加客户端负担。

效率不高,如果页面上的标签越多,效率越低,所以页面上不能出现这个选择器。

举例:

  1. *{
  2. margin-left:0px;
  3. margin-top:0px;
  4. }

效果:

CSS的几种高级选择器

高级选择器:

  • 后代选择器:用空格隔开
  • 交集选择器:用.隔开
  • 并集选择器(分组选择器):用逗号隔开
  • 伪类选择器

下面详细讲一下这几种高级(扩展)选择器。

1、后代选择器: 定义的时候用空格隔开

对于E F这种格式,表示所有属于E元素后代的F元素,有这个样式。空格就表示后代。

后代选择器,就是一种平衡:共性、特性的平衡。当要把某一个部分的所有的什么,进行样式改变,就要想到后代选择器。

后代选择器,描述的是祖先结构。

看定义可能有点难理解,我们来看例子吧。

举例1:

  1. <style type="text/css">
  2. .div1 p{
  3. color:red;
  4. }
  5. </style>

空格就表示后代。.div1 p 表示.div1的后代所有的p

这里强调一下:这两个标签不一定是连续紧挨着的,只要保持一个后代的关联即可。也就是说,选择的是后代,不一定是儿子。

举例:

  1. <style type="text/css">
  2. h3 b i{
  3. color:red ;
  4. }
  5. </style>

上方代码的意思是说:定义了<h3>标签中的<b>标签中的<i>标签的样式。

同理:h3和b和i标签不一定是连续紧挨着的,只要保持一个后代的关联即可。

效果:

或者还有下面这种写法:

上面的这种写法,<h3>标签和<i>标签并不是紧挨着的,但他们保持着一种后代关系。

还有下面这种写法:(含类选择器、id选择器都是可以的)

我们在开头说了:后代选择器,描述的是一种祖先结构。我们举个例子来说明这句话:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <style type="text/css">
  7. div div p{
  8. color: red;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <div>
  14. <div class="div2">
  15. <div class="div3">
  16. <div class="div4">
  17. <p>我是什么颜色?</p>
  18. </div>
  19. </div>
  20. </div>
  21. </div>
  22. </body>
  23. </html>

上面css中的div div p,也能使文字的颜色变红。通过浏览器的审查元素,我们可以看到 p元素的祖先列表:

讲到这里,我们再提一个sublme的快捷键。

在sublime中输入p#haha,按tab键后,会生成<p id="haha"></p>

在sublime中输入p.haha,按tab键后,会生成<p class="haha"></p>

2、交集选择器

来看下面这张图就明白了:

  1. h3.special{
  2. color:red;
  3. }

选择的元素要求同时满足两个条件:必须是h3标签,然后必须是special标签。

举例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>交集选择器测试</title>
  6. <style type="text/css">
  7. h3.special {
  8. color: red;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <h3 class="special zhongyao">标题1</h3>
  14. <h3 class="special">我也是标题</h3>
  15. <p>我是段落</p>
  16. </body>
  17. </html>

效果如下:

注意,交集选择器没有空格。所以,没有空格的div.red(交集选择器)和有空格的div .red(后代选择器)不是一个意思。

交集选择器可以连续交:(一般不要这么写)

  1. h3.special.zhongyao{
  2. color:red;
  3. }

上面这种写法,是 IE7 开始兼容的,IE6 不兼容。

交集选择器,我们一般都是以标签名开头,比如div.haha 比如p.special

3、并集选择器:定义的时候用逗号隔开

三种基本选择器都可以放进来。

举例:

  1. p,h1,#mytitle,.one{
  2. color:red;
  3. }

效果:

4、伪类选择器(待定)

对于<a>标签,其对应几种不同的状态:

  • link:超链接点击之前
  • visited:超链接点击之后
  • focus:是某个标签获得焦点的时候(比如某个输入框获得焦点)
  • hover:鼠标放到某个标签上的时候
  • active:点击某个标签没有松鼠标时

CSS允许对于元素的不同状态,定义不同的样式信息。伪类选择器又分为两种:

  • 静态伪类:只能用于超链接
  • 动态伪类:针对所有标签都适用

下面来分别讲一下这两种伪类选择器。

(1)静态伪类:

用于以下两个状态:

  • link:超链接点击之前
  • visited:超链接点击之后

注意:上面这两个状态只能使用于超链接

举例:

  1. <style type="text/css">
  2. /*
  3. 伪类选择器:静态伪类
  4. */
  5. /*
  6. 让超链接点击之前是红色
  7. */
  8. a:link{
  9. color:red;
  10. }
  11. /*
  12. 让超链接点击之后是绿色
  13. */
  14. a:visited{
  15. color:green;
  16. }
  17. </style>

效果:

上图中,超链接点击之前是红色,点击之后是绿色。

问:既然a{}定义了超链的属性,和a:link{}都定义了超链点击之前的属性,那这两个有啥区别呢?

答:

a{}a:link{}的区别:

  • a{}定义的样式针对所有的超链接(包括锚点)
  • a:link{}定义的样式针对所有写了href属性的超链接(不包括锚点)

**(2)动态伪类: **

用于以下几种状态:

  • focus:是某个标签获得焦点的时候(比如某个输入框获得焦点)
  • hover:鼠标放到某个标签上的时候
  • active:点击某个标签没有松鼠标时

注意:上面这三种状态针适用于所有的标签。

举例:

  1. <style type="text/css">
  2. /*
  3. 伪类选择器:动态伪类
  4. */
  5. /*
  6. 让文本框获取焦点时:
  7. 边框:#FF6F3D这种橙色
  8. 文字:绿色
  9. 背景色:#6a6a6a这种灰色
  10. */
  11. input:focus{
  12. border:3px solid #FF6F3D;
  13. color:white;
  14. background-color:#6a6a6a;
  15. }
  16. /*
  17. 鼠标放在标签上时显示蓝色
  18. */
  19. label:hover{
  20. color:blue;
  21. }
  22. /*
  23. 点击标签鼠标没有松开时显示红色
  24. */
  25. label:active{
  26. color:red;
  27. }
  28. </style>

效果:

利用这个hover属性,我们同样对表格做一个样式的设置:

表格举例:

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="Generator" content="EditPlus®">
  6. <meta name="Author" content="">
  7. <meta name="Keywords" content="">
  8. <meta name="Description" content="">
  9. <title>Document</title>
  10. <style type="text/css">
  11. /*整个表格的样式*/
  12. table{
  13. width: 300px;
  14. height: 200px;
  15. border: 1px solid blue;
  16. /*border-collapse属性:对表格的线进行折叠*/
  17. border-collapse: collapse;
  18. }
  19. /*鼠标悬停时,让当前行显示#868686这种灰色*/
  20. table tr:hover{
  21. background: #868686;
  22. }
  23. /*每个单元格的样式*/
  24. table td{
  25. border:1px solid red;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <table>
  31. <tr>
  32. <td></td>
  33. <td></td>
  34. <td></td>
  35. <td></td>
  36. </tr>
  37. <tr>
  38. <td></td>
  39. <td></td>
  40. <td></td>
  41. <td></td>
  42. </tr>
  43. <tr>
  44. <td></td>
  45. <td></td>
  46. <td></td>
  47. <td></td>
  48. </tr>
  49. </table>
  50. </body>
  51. </html>

效果:

一些 CSS3 选择器

所有的css3选择器,我们放在HTML5和CSS3课上介绍。暂时先接触一部分。

PS:我们可以用IETester这个软件测一下CSS在各个版本IE浏览器上的显示效果。

浏览器的兼容性问题

IE: 微软的浏览器,随着操作系统安装的。所以每个windows都有IE浏览器。各版本如下:

  • windows xp 操作系统安装的IE6
  • windows vista 操作系统安装的IE7
  • windows 7 操作系统安装的IE8
  • windows 8 操作系统安装的IE9
  • windows10 操作系统安装的edge

浏览器兼容问题,要出,就基本上就是出在IE6、7身上,这两个浏览器是非常低级的浏览器。

为了测试浏览器CSS 3的兼容性,我们可以在网上搜"css3 机器猫"关键字,然后在不同的浏览器中打开如下链接:

测试结果如下:

我们可以在百度统计里查看浏览器的市场占有率:

  • IE9 5.94%
  • IE8 21.19%
  • IE7 4.79%
  • IE6 4.11%

我们可以在http://html5test.com/results/desktop.html中查看

我们要知道典型的IE6兼容问题(面试要问),但是做项目我们兼容到IE8即可。不解决IE8以下的兼容问题,目的在于:培养更高的兴趣和眼光,别天天的跟IE6较劲。

我们可以用「IETester」软件看看css在各个浏览器中的显示效果。

1.儿子选择器,用符号>表示

IE7开始兼容,IE6不兼容。

  1. div>p{
  2. color:red;
  3. }

div的儿子p。和div的后代p的截然不同。

能够选择:

  1. <div>
  2. <p>我是div的儿子</p>
  3. </div>

不能选择:

  1. <div>
  2. <ul>
  3. <li>
  4. <p>我是div的重孙子</p>
  5. </li>
  6. </ul>
  7. </div>

2.序选择器

IE8开始兼容;IE6、7都不兼容

设置无序列表<ul>中的第一个<li>为红色:

  1. <style type="text/css">
  2. ul li:first-child{
  3. color:red;
  4. }
  5. </style>

设置无序列表<ul>中的最后一个<li>为红色:

  1. ul li:last-child{
  2. color:blue;
  3. }

序选择器还有更复杂的用法,以后再讲。

由于浏览器的更新需要过程,所以现在如果公司还要求兼容IE6、7,那么就要自己写类名:

  1. <ul>
  2. <li class="first">项目</li>
  3. <li>项目</li>
  4. <li>项目</li>
  5. <li>项目</li>
  6. <li>项目</li>
  7. <li>项目</li>
  8. <li>项目</li>
  9. <li>项目</li>
  10. <li>项目</li>
  11. <li class="last">项目</li>
  12. </ul>

用类选择器来选择第一个或者最后一个:

  1. ul li.first{
  2. color:red;
  3. }
  4. ul li.last{
  5. color:blue;
  6. }

3.下一个兄弟选择器

IE7开始兼容,IE6不兼容。

+表示选择下一个兄弟

  1. <style type="text/css">
  2. h3+p{
  3. color:red;
  4. }
  5. </style>

上方的选择器意思是:选择的是h3元素后面紧挨着的第一个兄弟。

  1. <h3>我是一个标题</h3>
  2. <p>我是一个段落</p>
  3. <p>我是一个段落</p>
  4. <p>我是一个段落</p>
  5. <h3>我是一个标题</h3>
  6. <p>我是一个段落</p>
  7. <p>我是一个段落</p>
  8. <p>我是一个段落</p>
  9. <h3>我是一个标题</h3>
  10. <p>我是一个段落</p>
  11. <p>我是一个段落</p>
  12. <p>我是一个段落</p>
  13. <h3>我是一个标题</h3>

效果如下:

这种选择器作用不大。

我的公众号

想学习代码之外的软技能?不妨关注我的微信公众号:生命团队(id:vitateam)。

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:

CSS样式----css样式表和选择器(图文详解)的更多相关文章

  1. CSS样式----CSS的继承性和层叠性(图文详解)

    CSS的继承性 我们来看下面这样的代码,来引入继承性: 上方代码中,我们给div标签增加红色属性,却发现,div里的每一个子标签<p>也增加了红色属性.于是我们得到这样的结论: 有一些属性 ...

  2. sql数据库的表连接方式图文详解

    sql数据库表连接,主要分为:内连接.外连接(左连接.右连接 .全连接).交叉连接,今天统一整合一下,看看他们的区别.   首先建表填充值. 学生表:student(id,姓名,年龄,性别 ) 成绩表 ...

  3. css 13-CSS3属性:Flex布局图文详解

    13-CSS3属性:Flex布局图文详解 #前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强.其强大的伸缩性和自适应性,在网页 ...

  4. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  5. 如何用R来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  6. 如何用Python来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  7. 【二次元的CSS】—— 用 DIV + CSS3 画咸蛋超人(详解步骤)

    [二次元的CSS]—— 用 DIV + CSS3 画咸蛋超人(详解步骤) 2016-05-17 HTML5cn 仅仅使用div作为身体的布局,用css3的各种transform和圆角属性来绘制各部位的 ...

  8. HTML标签----图文详解(二)

    HTML标签超详细的图文演示再来一波~~~ 如果还没有看过昨天的福利的,那可要抓紧喽,传送门:HTML标签----图文详解 本文主要内容 列表标签 表格标签 框架标签及内嵌框架<iframe&g ...

  9. HTML标签----图文详解

    国庆节快乐,还在加班的童鞋,良辰必有重谢! 本文主要内容 头标签 排版标签:<p>     <br>     <hr>     <center>     ...

  10. html 05-HTML标签图文详解(二)

    05-HTML标签图文详解(二) #本文主要内容 列表标签:<ul>.<ol>.<dl> 表格标签:<table> 框架标签及内嵌框架<ifram ...

随机推荐

  1. JavaSE-序列化和反序列化

    什么是序列化,什么时候要进行序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输. 我们在对java对象进行IO流操作 ...

  2. 手把手教你整合最优雅SSM框架

    我们看招聘信息的时候,经常会看到这一点,需要具备 SSM 框架的技能, SpringMVC 可以完全替代 Struts,配合注解的方式,编程非常快捷,而且通过 restful 风格定义 url,让地址 ...

  3. docker 使用时一些问题点

    1.run 参数 --privileged,默认是关闭的,使用该参数,container 内的 root 拥有真正的 root 权限,否则,container 内的 root 只是外部的一个普通用户权 ...

  4. jdk8-lambda-stream的使用

    1, 认识stream(声明式编程) Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator, 原始版本的Iterator,用户只能一个一 ...

  5. C#Redis Sorted-Sets

    一.前戏 Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中.它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score) ...

  6. 多表关联解决数据在MVC显示

    由于子表的某些字段是父表的外键,正常情况之下,显示的只是一个键值.如下图的Highlight列,如果这样显示,确实不友好. 如果是在创建或是编辑的模式之下,我们可以使用下拉菜单来解决,如<Htm ...

  7. JVM调优命令-jmap

    jmap JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动 ...

  8. 如何解决WEB应用中文乱码问题

    最容易出现乱码的场景是浏览器向服务器发送请求的过程,解决的策略就是强制为请求和响应设置编码格式. 一.POST 方式请求乱码 1. 在每个 Controller 中单独处理 request.setCh ...

  9. VirtualBox配置centos7静态ip(详解)

    VirtualBox安装centos7配置静态ip地址可以本机访问,可以联网. 在开始之前先说一下,不知道为什么,我在网上百度的大多数是不能用的,或者只能主机访问,或者只能联网. 我的配置文件为ifc ...

  10. HDU1260(KB12-H DP)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...