(一)选择器的概念css
每一条css样式声明(定义)由两部分组成,形式以下:html
选择器{ 样式; }
在{}以前的部分就是“选择器”,“选择器”指明了{}中的“样式”的做用对象,也就是“样式”做用于网页中的哪些元素。css3
(二)选择器的类型浏览器
1.标签选择器微信
标签选择器其实就是html代码中的标签。如右侧代码编辑器中的<html>、<body>、<h1>、<p>、<img>。例以下面代码:dom
p{font-size:12px;line-height:1.6em;}
上面的css样式代码的做用:为p标签设置12px字号,行间距设置1.6em的样式。编辑器
2.类选择器字体
类选择器在css样式编码中是最经常使用到的,如右侧代码编辑器中的代码:能够实现为“胆小如鼠”、“勇气”字体设置为红色。网站
语法:编码
.类选器名称{css样式代码;}
注意:
一、英文圆点开头
二、其中类选器名称能够任意起名(但不要起中文噢)
使用方法:
第一步:使用合适的标签把要修饰的内容标记起来,以下:
<span>胆小如鼠</span>
第二步:使用class="类选择器名称"为标签设置一个类,以下:
<span class="stress">胆小如鼠</span>
第三步:设置类选器css样式,以下:
.stress{color:red;}/*类前面要加入一个英文圆点*/
例如:
<style type="text/css">
.stress{
color:red;
}
.setGreen{
color:green;
}
</style>
</head>
<body>
<h1>勇气</h1>
<p>三年级时,我仍是一个<span class="stress">胆小如鼠</span>的小女孩,上课历来不敢回答老师提出的问题,生怕回答错了老师会批评我。就一直没有这个<span class="stress">勇气</span>来回答老师提出的问题。学校举办的活动我也没勇气参加。</p>
<p>到了三年级下学期时,咱们班上了一节<span class="setGreen">公开课</span>,老师提出了一个很简单的问题,班里不少同窗都举手了,甚至成绩比我差不少的,也举手了,还说着:"我来,我来。"我环顾了四周,就我没有举手。</p>
类选择器和标签选择器相比,类选择器能够在任何地方、任何一个标签中使用,而标签选择器只能用于本标签
3.ID选择器
在不少方面,ID选择器都相似于类选择符,但也有一些重要的区别:
一、为标签设置id="ID名称",而不是class="类名称"。
二、ID选择符的前面是井号(#)号,而不是英文圆点(.)。
4.子选择器
还有一个比较有用的选择器子选择器,即大于符号(>),用于选择指定标签元素的第一代子元素。如右侧代码编辑器中的代码:
.food>li{border:1px solid red;}:.food为子类选择器的名称,li是指定做用于某个元素的第一代标签中的<li>标签。在body中具体应用为:
<某个元素 class="food">...<span>...</span>...<li>....<span>...</span>...</li> 在这里,li元素里面的内容则改变样式,其他的都不会改变。
例如:
<style type="text/css">
.food>li{border:1px solid red;}/*添加边框样式(粗细为1px, 颜色为红色的实线)*/
.first>span{
border:1px
solid red;
}
</style>
</head>
<body>
<p class="first">三年级时,<span>我仍是一个<span>胆小如鼠</span>的小女孩</span>,上课历来不敢回答老师提出的问题,生怕回答错了老师会批评我。就一直没有这个勇气来回答老师提出的问题。学校举办的活动我也没勇气参加。</p>
<h1>食物</h1>
<ul class="food">
<li>水果
<ul>
<li>香蕉</li>
<li>苹果</li>
<li>梨</li>
</ul>
</li>
<li>蔬菜
<ul>
<li>白菜</li>
<li>油菜</li>
<li>卷心菜</li>
</ul>
</li>
</ul>
包含选择器,即加入空格,用于选择指定标签元素下的后辈元素。如右侧代码编辑器中的代码:
.first span{color:red;}
请注意这个选择器与子选择器的区别,子选择器(child selector)仅是指它的直接后代,或者你能够理解为做用于子元素的第一代后代。然后代选择器是做用于全部子后代元素。后代选择器经过空格来进行选择,而子选择器是经过“>”进行选择。
总结:>做用于元素的第一代后代,空格做用于元素的全部后代。
通用选择器是功能最强大的选择器,它使用一个(*)号指定,它的做用是匹配html中全部标签元素,以下使用下面代码使用html中任意标签元素字体颜色所有设置为红色:
* {color:red;}
在body中不须要书写任何代码
伪类
因为状态的变化是非静态的,因此元素达到一个特定状态时,它可能获得一个伪类的样式;当状态改变时,它又会失去这个样式。由此能够看出,它的功能和class有些相似,但它是基于文档以外的抽象,因此叫伪类。在dom文档中找不到。
伪类的语法:
CSS类也可使用伪类:
:first-child 选择器用于选取属于其父元素的首个子元素的指定选择器
例如:选择属于其父元素的首个子元素的每一个 <p> 元素
在这个例子中,p:first-child选取了一些p元素,这些p元素的特色是:其是其父类元素的第一个子元素。
hover
关于伪类选择符,到目前为止,能够兼容全部浏鉴器的“伪类选择符”就是 a 标签上使用 :hover 了(其实伪类选择符还有不少,尤为是 css3 中,可是由于不能兼容全部浏览器,本教程只是讲了这一种最经常使用的)。其实 :hover 能够放在任意的标签上,好比说 p:hover,可是它们的兼容性也是很很差的,因此如今比较经常使用的仍是 a:hover 的组合。
CSS伪元素是用来添加一些选择器的特殊效果。
CSS伪元素控制的内容和元素是没有差异的,可是它自己只是基于元素的抽象,并不存在于文档中,因此称为伪元素。
伪元素的语法:
CSS类也可使用伪元素:
"first-letter" 伪元素用于向文本的首行设置特殊样式。
在下面的例子中,浏览器会根据 "first-line" 伪元素中的样式对 p 元素的第一行文本进行格式化:
"first-line" 伪元素用于向文本的首行设置特殊样式。
在下面的例子中,浏览器会根据 "first-line" 伪元素中的样式对 p 元素的第一行文本进行格式化:
:before 选择器向选定的元素前插入内容。
:before是伪元素,而且它生成包含放置在元素中的内容以前的生成内容的伪元素。
使用content 属性来指定要插入的内容。
默认状况下,生成的伪元素是内联的,但这可使用属性显示更改。
例二:
(http://www.mamicode.com/info-detail-1167116.html)
例如,咱们的元素p的内容为
ello Worl
<style type="text/css"></style> <title>Title</title> </head> <body> <p>ello Worl</p> </body>
即:
如今须要给 ello的前面加H Worl的后面加d
<style type="text/css">
p:before{
content: 'H'; } p:after{ content: 'd'; } </style> <title>Title</title> </head> <body> <p>ello Worl</p>
结果为:
咱们经过浏览器的审查元素看到的结果为:
(这就是为何我点击小米或者别人网站的审查元素看到的那么多的::before ::after。坑爹啊)
p标签内部的内容的前面会被插入一个:before伪元素,该伪元素内包含的内容是"H";而在p标签内的内容后面会被插入一个:after伪元素,该元素包含的内容是"d"。做为一只合格的程序猴子,捍卫"Hello World"的完整存在是必要的。
既然笔记主要针对是:before和:after,那么确定不会只是仅仅有以上的简单介绍就完事。下面咱们看看日常该怎么使用他们。
1.结合border写个对话框的样式。
本兽将上面这句话拆成2部分:结合border,写个对话框的样式。
<style type="text/css">
.triangle{
position: relative;
width: 100px;
height: 36px;
border-radius: 5px; border: 1px solid black; background: rgba(245,245,245,1) } .triangle:before{ content: ""; display: block; width: 0px; height: 0px; position: absolute; top: 10px; left: -12px; border-top: 6px solid ; border-right:6px solid ; border-bottom: 6px solid; border-left: 6px solid; border-color: transparent black transparent transparent; } </style> <title>Title</title> </head> <body> <div class="triangle"></div>
经过以上代码,咱们将会看见一个相似微信/QQ的对话框样式,可是美中不足的是,在对话框的四周的边框不是完整的,而是在对话框的突出三角形上是木有边框的T_T瞬间冷场有木有,该怎么办呢?让召唤:after穿着棉大衣来救场吧~
<style> .test-div{ position: relative; /*平常相对定位*/ width:150px; height: 36px; border:black 1px solid; border-radius:5px; background: rgba(245,245,245,1) } .test-div:before,.test-div:after{ content: ""; /*:before和:after必带技能,重要性为满5颗星*/ display: block; position: absolute; /*平常绝对定位*/ top:8px; width: 0; height: 0; border:6px transparent solid; } .test-div:before{ left:-11px; border-right-color: rgba(245,245,245,1); z-index:1 } .test-div:after{ left:-12px; border-right-color: rgba(0,0,0,1); z-index: 0 } </style> <div class="test-div"></div>
好了,完整的一个对话框样式呈如今眼前了,至于对话框的小三角形的方向,相信你们看了上上段对于border介绍的代码也都知道该怎么作了吧,没错,就是改下position的位置,改下border显示颜色的方位~ (本兽不喜欢贴图片,体谅下额,须要的能够拷贝代码直接运行看效果,造轮子不只仅是造轮子,也能让人加深印象,更好的理解)
伪类和伪元素的区别:
首先,阅读 w3c 对二者的定义:
1.CSS 伪类用于向某些选择器添加特殊的效果。 向 某些选择器 添加 特殊效果
2.CSS 伪元素用于将特殊的效果添加到某些选择器。 将 特殊的效果 添加到 某些选择器
能够明确两点,第一二者都与选择器相关,第二就是添加一些“特殊”的效果。这里特殊指的是二者描述了其余 css 没法描述的东西。
区别
这里用伪类 :first-child 和伪元素 :first-letter 来进行比较
二者的区别已经出来了。那就是:
伪类的效果能够经过添加一个实际的类来达到,而伪元素的效果则须要经过添加一个实际的元素才能达到,这也是为何他们一个称为伪类,一个称为伪元素的缘由。
总结
伪元素和伪类之因此这么容易混淆,是由于他们的效果相似并且写法相仿,但实际上 css3 为了区分二者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。
但由于兼容性的问题,因此如今大部分仍是统一的单冒号,可是抛开兼容性的问题,咱们在书写时应该尽量养成好习惯,区分二者。
能够为拥有指定属性的 HTML 元素设置样式,而不只限于 class 和 id 属性
你能够对选择器进行分组,这样,被分组的选择器就能够分享相同的声明。用逗号将须要分组的选择器分开。在下面的例子中,咱们对全部的标题元素进行了分组。全部的标题元素都是绿色的。
相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另外一元素后的元素,且两者有相同父元素。
若是须要选择紧接在另外一个元素后的元素,并且两者有相同的父元素,可使用相邻兄弟选择器(Adjacent sibling selector)。
例如,若是要增长紧接在 h1 元素后出现的段落的上边距,能够这样写:
h1 + p {margin-top:50px;}
这个选择器读做:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。
相邻兄弟选择器使用了加号(+),即相邻兄弟结合符(Adjacent sibling combinator)。
注释:与子结合符同样,相邻兄弟结合符旁边能够有空白符。
在上面的片断中,div 元素中包含两个列表:一个无序列表,一个有序列表,每一个列表都包含三个列表项。这两个列表是相邻兄弟,列表项自己也是相邻兄弟。不过,第一个列表中的列表项与第二个列表中的列表项不是相邻兄弟,由于这两组列表项不属于同一父元素(最多只能算堂兄弟)。