通配选择器

可以与任何元素匹配,就像是一个通配符

/*每一个元素的字体都设置为红色*/
* {
color: red;
}

元素选择器

指示文档元素的选择器。

/*为body的字体设置为红色*/
body {
color: red;
}

分组

  • 选择器分组
h1, h2, h3 {
color: red;
}
  • 声明分组
h1 {
font: 18px Helvetica;
color: purple;
background: aqua;
}
  • 结合选择器和声明分组
h1, h2, h3 {
font: 18px Helvetica;
color: purple;
background: aqua;
}

类选择器和ID选择器

独立于文档元素的方式来指定样式

  • 类选择器
.warning {
font-weight: bold
} /*包含warning元素的p标签会apply下面的style*/
p.warning {
font-weight: bold
} /*同时包含urgent和warning类名的元素会apply下面的style,类名顺序不限*/
.urgent.warning {
font-weight: bold
} /*同时包含urgent和warning类名的元素P会apply下面的style*/
p.urgent.warning {
font-weight: bold
}
  • ID选择器
#content {
margin:;
}

ID选择器和类选择器的不同之处:

  1. 在一个HTML文档中,ID选择器会使用一次,而且仅一次。因此,如果有一个元素的id值为lead-para,那么该文档中所有其他元素的id值都不能是lead-para。(注: 浏览器通常并不检查HTML中ID的唯一性,这意味着如果你在HTML文档中设罝了多个有相同ID属性值的元素,就可能为这些元素应用相同的样式。)
  2. ID选择器不能结合使用,因为ID属性不允许有以空格分隔的词列表。

类选择器和ID选择器可能是区分大小写的,这取决于文档语言。HTML和 XHTML将类和ID值定义为区分大小写,所以类和ID值的大小写必须与文档中的相应值匹配。

属性选择器

  • 简单属性选择器

如果希望选择有某个属性的元素,而不论该属性的值是什么,可以使用一个简单属性选择器。

/*选择有class属性(值不限)的所有h1元素,设置其字体颜色为红色 */
h1[class] {
color: red;
} /*将同时有href和title属性的HTML超链接的文本置为粗体*/
a[href][title] {
font-weight: bold;
}
  • 根据具体属性值选择
/*设置具有href属性,并且属性值为http://www.w3.org/的a标签的font-size为200%*/
a[href="http://www.w3.org/"] {
font-size: 200%;
} /*同时满足*/
a[href="http://www.w3.org/"][title="W3C Home"]{
font-size: 200%;
}

这种格式要求必须与属性值完全匹配

  • 根据部分属性值选择

如果属性能接受词列表(词之间用空格分隔),可以根据其中的任意一个词进行选择。

<span class="barren rocky">Mercury</planet>
<span class="cloudy barren">Venus</planet>
<span class="life-bearing cloudy">Earth</planet>
/*为了把class属性中有barren的所有元素变为斜体,可以写作:*/
span[class~="barren"] {
font-style: italic;
}

p.warning和p[class~="warning"]应用到HTML文档时是等价的

类型 描述
[foo^="bar"] 选择foo属性值以"bar"开头的所有元素
[foo$="bar"] 选择foo属性值以"bar"结尾的所有元素
[foo~="bar"] 选择foo属性值包含"bar"的所有元素(属性的值根据空格分隔,其中任意一个词能完全匹配bar)
[foo*="bar"] 选择foo属性值包含"bar"的所有元素(只要包含就可以了,任意位置都可以,不必是一个完整的单词)
  • 特定属性选择类型

用于选取带有以指定值开头的属性值的元素,该值必须是整个单词。

<h1 lang="en">Hello!</h1>
<p lang="en-us">Greetings!</p>
<div lang="en-au">G’day!</div>
<p lang="fr">Bonjour!</p>
<h4 lang="cy-en">Jrooana!</h4> /*上述标签前三个会变成红色,后两个还是黑色*/
*[lang|="en"] {
color: red;
}

后代选择器

h1 em {
color: gray;
} /*blockquote中包含的所有b(粗体)元素的文本颜色为灰色,另外正常段落中的所有粗体文本也为灰色*/
blockquote b, p b {
color: gray;
}

后代选择器中,元素之间的层次间隔可以是无限的。

子元素选择器

h1>strong {
color: red;
}

子元素选择器限制为只匹配树种直接相连的元素。

可以在同一个选择器中结合使用后代选择器和子选择器。

/*选择作为一个td元素子元素的所有p元素,这个td元素本身从table元素继承,该table元素有一个包含summary的class属性*/
table.suitimary td > p {
color: red;
}

相邻兄弟选择器

和子结合符一样,相邻兄弟结合符旁边可以有空白符。

/*去除紧接在一个h1元素后出现的段落的上边距*/
h1+p {
margin-top:;
}

需要注意的是:

  • 用一个结合符只能选择两个相邻兄弟中的第二个元素。因此,如果写作li+li {font-weight: bold;},只会把各列表中的第二个及以后的列表项变成粗体。
  • 两个元素之间的文本内容不会影响相邻兄弟结合符起作用。
<div>
<ol>
<li>List item 1</li>
<li>List item 1</li>
<li>List item 1</li>
</ol> This is some text that is part of the 'div'.
<ul>
<li>A list item</li>
<li>Another list item</li>
<li>Yet another list item</li>
</ul>
</div>
/*尽管两个列表间多了一行文本,不过还是可以用选择器ol+ul来匹配第二个列表。*/
ol+ul {
color: red;
}

伪类和伪元素选择器

利用伪类和伪元素选择器,可以为文档中不一定具有存在的结构指定样式,或者为某些元素(甚至是文档本身)的状态所指示的幻像类指定样式。会根据另外某种条件而非文档结构向文档中的某些部分应用样式,而且无法通过研究文档的标记准确地推断出采用何种方式应用样式。

  • 伪类选择器
伪类名 描述
:link

指示作为超链接(即有一个href属性)并指向一个未访问地址的所有锚。

注意,有些浏览器可能会不正确地将:link解释为指向任何超链接,包括已访问和未访问的超链接

:visited

指示作为已访问地址超链接的所有锚

:focus 指示当前拥有输入焦点的元素,也就是说,可以接受键盘输入或者能以某种方式激活的元素
:hover

指示鼠标指针停留在哪个元素上。

例如,鼠标指针可能停留在一个超链接上,:hover就会指示这个超链接

:active

指示被用户输入激活的元素。

例如,鼠标指针停留在一个超链接上时,如果用户点击鼠标,就会激活这个超链接,将指示这个超链接

a {
color: red;
} a:link {
color: red;
}
/*两者是不同的,
a:link指示的是一个有href属性的,并且未访问过的所有a节点
a会应用到所有a标签
*/
a:link {
color: blue;
} a:visited {
color: red;
} a.external:link, a.external:visited {
color: maroon;
}

伪类的顺序很重要,通常建议为link-visited-focus-hover-active。(这是由于样式有优先级的哦~~)

:link和:visited是静态的——第一次显示之后,它们一般不会在改变文档的样式。

:focus, :hover, :active是动态伪类。动态伪类可以应用到任何元素。

input:focus {
background-color: silver;
font-weight: bold;
}
    • 选择第一个子元素——:first-child,这也是一个静态伪类。
/*
作为某元素(可以是任意元素)的第一个子元素的所有P元素设置为粗体。
最常见的错误是认为p:first-child之类的选择器会选择p元素的第一个子元素。*/
p:first-child {
font-weight: bold;
}
    •  根据语言选择—— :lang()伪类。

从对应的模式来讲,:lang()伪类就像是|=属性选择器。

*:lang(fr) {
font-style: italic;
}

伪选择器和属性选择器之间的主要差别在于语言信息可以从很多来源得到,而且其中一些可能在元素之外。CSS2.1指出:

在HTML中,语言由lang属性和META元素的组合来确定,还可能包括协议提供的信息,如HTTP首部。XML使用一个xml:lang属性,另外可能还有其他文档语言特定的方法来确定语言。

因此,伪类比属性选择器稍微健壮一些。

结合伪类:

/*鼠标指针停留在未访问链接上时,可以让这些链接变成红色,而鼠标指针停留在已访问链接上时,链接变成紫红色。*/
a:link:hover {
color: red;
} a:visited:hover {
color: maroon;
}

用哪种顺序指定并不重要,写成a:hover:link会得到与a:link:hover一样的效果。

  • 伪元素选择器

就像伪类为锚指定幻象类一样,伪元素能够在文档中插入假想的元素,从而得到某种效果。CSS2.1中定义了4个伪元素:设置首字母样式、设置第一行样式、设置之前和之后的样式。

    • 设置首字母样式

用于设置一个块级元素首字母的样式,而且仅对该首字母设置样式。

/*让每个h2中第一个字母的大小是标题中其余字母大小的2倍*/
h2:first-letter {
font-size: 200%;
}

这个规则会导致用户代理(浏览器)对一个假想的元素作出响应,这个假想元素包含每个h2中的第一个字母。可能如下所示:
<h2><h2:first-letter>T</h2:first-letter>his is an h2 element</h2>
:first-letter样式只应用到上例所示假想元素的内容。这个<h2:first:-letter>元素并不出现在文档源代码中。相反,它是由用户代理动态构造的,用于向相应文本块应用:first-letter样式。换句话说,<h2:first-letter>是一个伪元素。

    • 设置第一行样式

:first-line可以用来影响元素中第一个文本行。(第一行是指显示区域的第一行,所以浏览器窗口大小不同,第一行所代表的字符数量也是不同的。)

/*应用于每一段所显示的第一行文本。*/
p:first-line {
color: red;
}

:first-letter, :first-line允许设置的CSS属性:

:first-letter :first-line
所有的font属性 所有的font属性
color color
所有background属性 所有background属性
所有margin属性  
所有padding属性  
所有border属性  
text-decoration text-decoration
vertical-align vertical-align
text-transform text-transform
line-height line-height
float  
letter-spacing letter-spacing
word-spacing  
    • 设置之前和之后的样式
h2:before {
content: "before";
color: red;
} h2:after {
content: "after";
color: red;
}

所有伪元素都必须放在出现该伪元素的选择器的最后面,如果写成p: first-line em就是不合法的,因为伪元素在选择器主体前面出现。

[读书笔记] CSS权威指南1: 选择器的更多相关文章

  1. [读书笔记] CSS权威指南2: 结构和层叠

    层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...

  2. [读书笔记]Hadoop权威指南 第3版

    下面归纳概述了用于设置MapReduce作业输出的压缩格式的配置属性.如果MapReduce驱动使用了Tool接口,则可以通过命令行将这些属性传递给程序,这比通过程序代码来修改压缩属性更加简便. Ma ...

  3. css权威指南读书笔记

    今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...

  4. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  5. CSS权威指南学习笔记系列(1)CSS和文档

    题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...

  6. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  7. CSS权威指南 - 层叠

    CSS权威指南 第三章结构与层叠 - 层叠 按权重及来源排序 1. Reader important declarations 2. Author important declarations 3. ...

  8. CSS权威指南(第三版)

    CSS权威指南(第三版).pdf 网盘: https://545c.com/file/24657411-425141851   获取码:  276922

  9. css权威指南学习笔记 —— css选择器

    1,选择器:选择器的一些基本常用规则基本都记得,w3c上都有,平时也常用,不常用的一些后代选择器经常就忘记了.一些归纳一下后代选择器,加深一下印象: a:子选择器:   p>a  a是直接是p的 ...

随机推荐

  1. IOS高级编程之三:IOS 多线程编程

    多线程的概念在各个操作系统上都会接触到,windows.Linux.mac os等等这些常用的操作系统,都支持多线程的概念. 当然ios中也不例外,但是线程的运行节点可能是我们平常不太注意的. 例如: ...

  2. HTML知识点01

    HTML基础知识回顾 1:ie是浏览器的一种,一般的浏览器只是用到了IE的内盒,知识将IE做了个外包. 2:书写HTML时要按照XML标准类书写.有开始就有结束. 3:HTML种属性单双引号都可以,也 ...

  3. 暴力枚举 + 24点 --- hnu : Cracking the Safe

    Cracking the Safe Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit u ...

  4. 【转】NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

  5. JQuery新闻滚动的实现方法(常用笔记1)

    .mouseover() //经过子元素也会触发 .mouseenter() //经过被选元素才会触发 .mouseout() //离开子元素也会触发 .mouseleave() //离开被选元素才会 ...

  6. UML类图

    类 类图分三层,第一层显示类的名称,如果是抽象类,那就用斜体显示.第二层是类的特性,通常就是字段和属性.第三类是类的操作,通常是方法或行为.注意前面的符号,‘ +’表示public ,‘-’表示 pr ...

  7. jQuery Mobile动态刷新页面样式

    当我们使用Ajax或者javascript动态在页面上添加元素后,如添加select控件的option元素,添加ul的li元素.添加之后我们会发现,它们显示的样式不是jQuery Mobile的炫酷样 ...

  8. ASP.NET MVC 网站开发总结(七)——C#操作图片:多张图的拼接(旋转)

    其实用C#来操作图片的拼接就是在用Graphic画图.个人感觉还是挺有趣的,各种类库提供了丰富多彩的功能. 源代码(移植到一个简单的C#程序中,并没有放在ASP.NET项目中): using Syst ...

  9. ASP.NET MVC 网站开发总结(一)

    历经一个多月的努力,工作室的门户网站(http://www.wingstudio.org)终于结束了内部公测. 仔细算一下,大概把网站开发出1.0版本大概用了一个月的时间(主要是利用课余时间),其后大 ...

  10. .NET使用ZXing.NET生成中间带图片的二维码

    很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...