跳至主要内容

CSS选择器总结

在css的学习中有一个很容易让人混乱的就是css选择器,因为选择器有很多种,而且在使用的时候有些类似,有些却相差很远。那么本文就对css选择器,作为一个集中的总结梳理。(注:文中代码因篇幅有限仅写出关键部分代码)

id和class

  • id
    在元素的属性里加上id标签,然后用“#+id名选择”,如
1
#z {text-align:center;}   <p id="z">id标签</p>
  • class
    在元素的属性里加上class标签,然后用”.class名称”选择所有具有相同class名称的元素。如:
1
2
3
4
5
6
7
.center {text-align:center;}
<h1 class="center">flytree</h1>
<p class="center">this line an h1 are centered</p>
<!--也可使特定的元素使用class,如:-->
p.center {text-align:center;}
<h1 class="center">flytree</h1>
<p class="center">only this line is centered</p>
  • 混合
当id和class选择的是同一元素的相同属性时,显示id的效果,如:
1
2
3
4
5
6
7
8
9
10
11
<style>
.center
{
 *text-align:center;*
}
#z {text-align:right;}
</style>
</head>
<body>
<h1 id="z" class="center">同一属性,显示id选择的效果</h1>
</body>

分组和嵌套

  • 分组
当多个元素有共同的css样式描述时可以使用分组减少代码,如:
1
2
3
4
#a,#b,#c {color:blue;}
<p id="a">text</a>
<p id="b">test</a>
<p id="c">text</a>
  • 嵌套
当要操作元素内部的子元素时可以使用嵌套来进行操作,如:
1
2
3
4
div p {text-align:center;}
<div>
<p>name</p>
</div>

组合选择符

  • 后代选取器
以空格分隔,选取改元素的所有后代,其实就是嵌套的选择的格式啦,如:
1
2
3
4
5
div p {text-align:center;}
<div>
<div> <p>name</p> </div>
<p>age</p>
</div>
则name和age都会居中,选择的只要是后代就行,可以是子元素的子元
  • 子元素选择器
以大于号分隔,子选取元素的直接后代,如:
1
2
3
4
5
div>p {text-align:center;}
<div>
<div> <p>name</p> </div>
<p>age</p>
</div>
则只有age会居中显示
  • 相邻兄弟选择器
以加号分隔,若元素有共同的父元素,则可以选择紧接在另一元素后的元素,如:
1
2
3
4
5
6
div+h1 {color:blue;}
<div>
<p>name</p>
<p>age</p>
</div>
<h1>test</h1>
则test的颜色会为蓝色
  • 普通兄弟选择器
以波浪号分隔,若元素有共同的父元素,选取所有指定元素之后的相邻兄弟元素,如:
1
2
3
4
5
6
div~p {color:blue;}
<div>
<h1>test</h1>
</div>
<p>name</p>
<p>age</age>
则name和age都会被选择变为蓝色。

属性选择符

  • 简单属性选择
[属性]使用,无论什么属性,该选择器会选择所有具有该属性的元素,如:
1
2
a[href] {color:green;}
<a href="http://www.baidu.com">baidu</a>
则所有具有href属性的元素都会被选择,baidu和sina就会为绿色。
可以选择多属性,如:
1
2
3
a[href][title] {color:green;}
<a href="http://www.baidu.com" title="baidu">百度</a>
<a href="http://www.sina.com">sina</a>
则只有”百度“会变绿。
  • 属性值选择
选择具体到属性的具体属性值,如:
1
2
3
a[href="http://www.baidu.com"] {color:green;}
<a href="http://www.baidu.com">baidu</a>
<a href="http://www.sina.com">sina</a>
则只有baidu会变绿。
也可以选择多个属性值,如:
1
2
3
4
a[href="http://www.baidu.com"][title="baidu"]
{background-color:green;}
<a href="http://www.baidu.com" title="baidu">百度</a>
<a href="http://www.sina.com">sina</a>
则只有”百度“会变绿。
  • 属性,属性值部分匹配
可以用波浪号”~“只匹配部分进行选择(可以想成约等于),如:
1
2
3
4
5
img[title~="a"] {border:1px solid black;}
<img src="z.jpg" title="a">
<img src="z.jpg" title="a 1"/>
<img src="z.jpg" title="a 2"/>
<img src="z.jpg" title="a_2"/>
前三行都会匹配,但是a_2不匹配(要用子串匹配属性选择器)。
  • 子串匹配属性选择器

伪类和伪元素

  • 伪类
应用在链接里的伪类
1
a:link {color: #FF0000}
1
a:visited {color: #00FF00}
1
a:hover {color: #FF00FF}
1
a:active {color: #0000FF}
first-child伪类
  • 伪元素
first-line:
用于相文中首行设置样式,且只应用于块级元素,可设置的属性有:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
font

color

background

word-spacing

letter-spacing

text-decoration

vertical-align

text-transform

line-height

clear
first-letter:
用于设置文本首个字符的样式,且只能用于块级元素,可设置的属性有:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
font

color

background

margin

padding

border

text-decoration

text-transform

vertical-align (仅当 float 为 none 时)

clear

line-height

float

评论

此博客中的热门博文

【图集】言叶之庭(言の葉の庭)

隐约雷鸣 阴霾天空 但盼风雨来 能留你在此 隐约雷鸣 阴霾天空 即使天无雨 我亦留此地 ——万叶集 《言叶之庭》

关于如何记录数据更改记录的两种建表方式

当时要做的一个项目要包含一个权限管理功能,以为该系统中的所有人分配权限。而且这个权限管理的需求是可以把权限接近无限的下发(我感觉现实中是不会无限下发的(。・∀・)ノ),这些都先不讲。因为有权限管理就涉及到用户分组的变动,权限的使用等,但是这些操作都是应该要记录下来的。于是有了两种方案。 1.通过一张单独的事件记录表来记录事件: id uid eventid etime id是自增 uid是指用户的id,就是事件的对象 eventid是事件id,有另外一张表列出所有可能的事件,eventid为其id etime:事件的时间 优点: 这种方法比较直观,比较容易能想到。 操作也不是很麻烦 缺点: 同时要操作多张表(比如要将一个人的权限删除,那么在权限表中要将其对应的记录删除,在记录表中要对这个事件进行记录)。 需要列车所有操作的可能(这好像也不是啥缺点(。^▽^))。 2.通过增加时间字段来记录事件 比如有一张用户-分组的表: id uid gid id主键自增 uid用户id gid权限组id 如果是按照第一种方法,当一个人被分入某个权限组时,则向这张表添加相应记录,还要向记录表添加纪录。但是如果多了两个字段,starttime(起始时间),endtime(结束时间),那么就不一样了。 id starttime endtime uid gid 当一个用户被分配到某分组时,记录这个时间放在starttime中,当一个用户被踢出分组是记录踢出时间放到endtime中。这样的话,只要检测endtime中是否有值就可以判断用户的状态了,这样这表的作用就不仅是记录分组情况了,而且也保留记录了。 优点: 需要建的表少了。 当有操作时不需要删除记录,只需记录时间,操作的表也少了。 缺点: 如果某张表有频繁的操作则很容易造成数据冗余。