第3章 选择器:明确设置哪些样式

每个样式(或者规则)由两个主要部分组成:选择器是告诉浏览器要格式化什么内容;声明块则列出浏览器用来给选择器定义样式的格式化指令。

1、标签选择器:整体控制

标签选择器影响着该标签在网页上的每一个位置。

2、类选择器:精准控制

当你希望某一个或某几个元素的外观与网页上其他的相关标签有所区别时,可以使用类选择器。

类选择器还可以精确控制网页上的某个具体元素,而不管它有哪些标签。

甚至可以用类选择器为有着不同HTML标签的多个元素应用相同的格式。

命名类选择器时要牢记下列规则:

  • 所有类选择器的名称都必须以一个圆点(.)开头;
  • CSS只允许在类名称中使用字母、数字、连字符(-)和下划线(_);
  • 在圆点之后,名称始终必须以字母开头;
  • 类名称区分大小写。

3、ID选择器:控制特殊的网页元素

ID样式以#开头

4、群组选择器

如果想让一系列网页元素共用相同格式化属性中的部分属性而不是全部属性,就可以创建一个带有共用格式化选项的群组选择器,并为每个元素分别创建具有特殊样式的规则。

为了使用多个选择器成为一个群,只需要创建一个用逗号分隔的选择器列表即可。

其实群组选择器中可以使用任何一种有效的选择器(或者不同类型选择器的组合)。

CSS还提供了一种超强的群组选择器——通用选择器。*号是选择每一个标签的通用选择器标志。

甚至可以用通用选择器作为派生选择器的一部分,因此可以将某一种样式应用给从特殊网页元素派生出来的所有标签。

5、派生选择器

HTML由嵌套标签组成:标签在标签里面,甚至又在更多的标签里面。这些标签之间的关系(即它们之间如何互相嵌套)就形成了一个族谱。

其中最重要的关系如下:

  • 祖先标签:当HTML标签涵盖另一个标签时,HTML就成了该标签的祖先。
  • 派生标签:处于一个或多个标签内部的标签就是派生标签。
  • 父标签:父标签是离另一个标签最近的祖先。
  • 子标签:直接被另一个标签包围的标签就是子标签。
  • 同胞标签:同一个标签的子标签被称作同胞标签,就像兄弟姐妹一样。

派生选择器允许你用HTML族谱为处在某些其他标签或者样式内的标签设置不同的样式。

创建派生选择器时,根据族谱中要设置样式的部位,把那些选择器集中到一起,注意中间要用空格隔开。让职高级别的祖先在左侧,而你真正的目标标签则在最右侧。

6、伪类和伪元素

给连接定义样式:有4个伪类,标志着连接处于以下4种状态之一:

  • a:link是指访问者还没有访问到、鼠标也尚未滑到过或单击过的所有链接。
  • a:visited是指依据Web浏览器的历史记录,访问者之前已经单击过的链接。
  • a:hover让你在访问者的鼠标滑过链接时改变该链接的展现效果。
  • a:active让你决定当访问者单击时链接的展现效果。

给段落定义样式:CSS提供了两个伪元素:first-letter和first-line,它们能够使网页具有印刷界的那些设计效果。

  • 伪元素:first-letter可以创建下落的首字母,让一个首字母从接下来的段落中蹦出来,并且使用更大或者更粗的字体格式。
  • 伪元素:first-lin可以用一种不同的颜色定义段落的首行,吸引读者的眼球,使文字显得更加醒目和鲜艳。

为了从伪元素中国辨别出像:hover这样的伪类,CSS3的语法修该为::first-letter和::first-line。IE8不支持双冒号的语法。

其他几个伪类和伪元素选择器:

  • :focus是在访问者执行某些动作时起作用,表明他的注意力在某个网页元素上(比如,通常是通过单击,或者跳格)。

:focus选择器最适用于给访问者提供反馈,比如通过改变文本框的背景色,表明他将要在什么位置输入(单行文本域、密码域,或者多行的<textarea>方框,这些都是:focus选择器的常见目标)。

:focus选择器只对处于焦点中的元素起作用。

  • :before能在指定的元素前面添加内容。用这个选择器添加文本的技术术语叫“创造内容”,因为Web浏览器在运行中创造(产生)了它。
  • :after在元素的后面添加创造内容。
  • ::selection是针对访问者已经在网页上选中的项目。例如,当访问者单击并拖动鼠标经过文本,浏览器就会高亮显示该文本,访问者就可以复制这些文本。

该选择器只能设置color和background-color这两个属性。

这个选择器没有单冒号版本,因此必须使用双冒号。

7、属性选择器

属性选择器可以挑选带有特殊属性的标签。

CSS没有限制属性选择器只能使用标签名称,你也可以把它们和类结合起来。

如果要更具体一点,还可以选择那些不仅共用特定属性而且带有精确属性值的属性。

在处理表单时,给属性选择器添加一个值是非常有用的。

属性选择器不仅能帮你找出具有某个特殊属性值的标签,还能选择属性值以某个特殊值开始、结束或包含该特殊值的元素。

8、子选择器

子选择器可以让你指定要的是哪个父标签的哪个子标签。

子选择器使用尖括号(>)来表示两个元素之间的关系。

CSS3还提供了一些非常具体的伪类用于选择子元素:

  • :first-child伪元素让你只选择和格式化该元素中的第一个子标签。
  • :last-child作用于元素的最后一个子标签。
  • nth-child(value) 让你可以将表格隔行设置不同的样式,每隔三个列表设置不同的样式,或者给其他子元素的任意组合设置不同的样式。其中value是用来确定要选择哪一个子元素,最容易使用的方法是使用一个关键字:odd或even。

CSS3还提供了一些作用于带有特殊类型的HTML标签的子元素的选择器:

  • :first-of-type
  • :last-of-type
  • :nth-of-type

9、同胞选择器

相邻同胞选择器用加号(+)把一个元素和下一个元素连接起来。

还有一个同胞选择器被称作通用的同胞组合选择器。它只是一个波浪号(~),意思是“选择这个类型中的所有同胞标签”。

10、:not()选择器

       :not()选择器也被称作否定伪类,可以帮助你选择不是其他东西的某件东西。

它具有以下局限性:

  • 用:not()选择器只能使用简单的选择器。换句话说,可以使用元素选择器、通用选择器、类选择器、ID选择器或者伪类。
  • 不能使用派生选择器、伪类元素、群组选择器或组合。
  • 一个选择器只能使用一次:not()选择器。

第4章 用样式继承节省时间

继承是指应用在一个标签上的那些CSS属性被传到其内嵌标签的过程。

继承并不只是适用于标签样式,它对任何类型的样式都有效,因此当你应用一个类(ID、派生)样式于某个标签时,该标签中的所有标签都将会从它那里继承属性。

继承也不是万能的,有许多CSS属性根本不会传递给派生标签。

  • 一般来说,影响网页元素位置的属性,或者页边距、背景颜色和元素的边框线等,都不会被继承。
  • 当有样式发生冲突时,更具体的样式会胜出。

第5章 用层叠管理样式

有一套基础的CSS机制,称作层叠,它支配着样式应该如何交互,以及发生冲突时哪些样式会得到优先权。

1、如果一个标签没有应用具体的样式,当继承来的CSS属性发生冲突时,离它最近的那个祖先标签就会胜出。

根据“最近的祖先样式胜出”规则可以推断出这样的结论:有一种样式将始终在CSS族谱中称王,即任何直接应用于指定标签的样式。

2、如果东哥样式应用于某一个元素,那么Web浏览器就和合并所有这些样式的属性,只要它们不发生冲突。

3、最具体样式中的属性会胜出,但是有时候并不清楚哪一种样式最具体,所幸CSS还提供了一个公式。它根据赋给样式选择器的值来确定样式的权重值。这个计算系统是这样进行的:

  • 一个标签选择器值1分
  • 一个类选择器值10分
  • 一个ID选择器值100分
  • 一个内建样式值1000分
  • 伪元素(如::first-line)通常被当作标签选择器对待,值1分
  • 伪类(如:link)这被当作类对待,值10分

这个数值越大,权重就越大。

派生选择器的权重值是上述所有选择器的综合。

继承来的属性没有任何权重值。因此,即使一个标签从一个带有很大权重的样式中继承了属性,那些属性也始终会被直接应用与标签的样式所忽略。

权重相同时最后一个样式胜出。

如果外部样式表和内部样式表中的规则发生冲突时,样式表在HTML文件中所处的位置就变得非常重要了。

4、CSS还提供了一种可以完全忽略权重值的方法。只要在任何需要保护的属性后面插入!important,就可以避免它被权重更大的属性覆盖。

注意,是对个别的属性应用!important,而不是对整个样式。最后,当两个都有!important的样式应用于相同的属性时,更具体样式的!important规则就会胜出。

单靠额外添加选择器来使一个样式属性“胜出”,这种做法将会导致所谓的“权重战争”,结果致使样式名称变得十分冗长,并且错综复杂。

当今几多Web设计师喜欢用类选择器代替ID选择器,原因之一:ID选择器的功能非常强大,因此,需要更大的权重值才能将它覆盖,这经常会导致权重战争。

《CSS3秘籍》(第三版)-读书笔记的更多相关文章

  1. Linux设备驱动程序 第三版 读书笔记(一)

    Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...

  2. effective java(第三版)---读书笔记

    第一章 引言 < Effective Java>这本书并不厚,而且并不适合初学者,适合有一定的工作经验的java攻城狮.这本书不是百科全书式的JAVA 手册,而是试图在讲述如何正确.高效地 ...

  3. javaScript高程第三版读书笔记

    看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...

  4. 《ECMAScript6标准入门》第三版--读书笔记

    2015年6月,ECMAScript 6正式通过,成为国际标准.尽管在目前的工作中还没有使用ES6,但是每项新技术出来总是忍不住想尝尝鲜,想知道ES6能为前端开发带来哪些变化?对自己的工作有哪些方面可 ...

  5. JavaScript高级程序设计第三版-读书笔记(1-3章)

    这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript   提供核心语言功能 DOM     提供访问 ...

  6. CSS权威指南-第三版--读书笔记

    第一章:CSS和文档 html是结构化语言,css是样式语言,html主要用来被强大的搜索引擎更好的索引,更好的让一个盲人通过语音浏览器来了解我们的网页,这也就是为什么说html是结构话语言,因为这是 ...

  7. CLR.via.C#第三版 读书笔记

    第一章 CLR的执行模型 1.1将源代码编译成托管代码 决定将.NET Framework作为自己的开发平台之后,第一步是决定要生成什么类型的应用程序或组件.假定你已经完成了这些次要的细节:一切都已经 ...

  8. 9Andrew.S.Tanenbaum计算机网络第三版读书笔记-总体概览

  9. 高性能mysql第三版读书笔记3

    innodb以前不支持高并发,在搞病房下就是悲剧,全部卡在mutex(缓冲池mutex)上,现在通过线程调度器控制线程怎么进入内核访问数据,参数为innodb_thread_concurrency,它 ...

  10. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

随机推荐

  1. 需求文档2_The Battle of Polytopia

    需求文档 ------------------------------------- 1. 游戏详细分析 The Battle of Polytopia简要介绍 探索型.策略型的对战塔防游戏,回合制. ...

  2. ACM_ICPC hdu-2111(简单贪心算法)

    一道非常简单的贪心算法,但是要注意输入的价值是单位体积的价值,并不是这个物品的总价值!#include <iostream> #include <stdio.h> #inclu ...

  3. 【dom4j】解析xml为map

    dom4j解析xml文件 <?xml version="1.0" encoding="utf-8"?> <workflows> < ...

  4. oracle 创建表空间

    --创建数据表空间 create tablespace hcm logging datafile 'G:\oracle\product\10.2.0\oradata\orcl\mydata.dbf' ...

  5. 【uTenux实验】信号量

    信号量(semaphore)是一个用来指示可用的资源并将可用资源的数量以数值的形式表示出来的对象.当使用一组资源时,信号量用来实现互斥控制和同步.uTenux提供了信号量出来的API,可以很方便地使用 ...

  6. php数据库访问

    从$res获取行数据的时候,处理mysql_fetch_row($res),还有三个方法,分别是 mysql_fetch_row($res); 返回一个所以的数组,速度较快. mysql_fetch_ ...

  7. java连接mysql :No Suitable Driver Found For Jdbc 解决方法

    今天出现编码出现了No suitable driver found for jdbc,又是找遍了网上的资料,基本上都说是以下个问题:    一是:连接URL格式出现了问题(Connection con ...

  8. PHP使用feof()函数读文件的方法

    这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下 本文实例讲述了PHP使用feof()函数读文件的方法 ...

  9. 课堂笔记--Strom并发模型

    Strom并发模型:     topology是如何运行的?(可与mapreduce对比)         第一层:cluster         第二层:supervisor(host.node.机 ...

  10. MSSQL导入导出数据

    /******* 导出到excel */ EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S&qu ...