[读书笔记] CSS权威指南1: 选择器
通配选择器可以与任何元素匹配,就像是一个通配符 /*每一个元素的字体都设置为红色*/* { 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}
#content { margin: 0;} 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">Mercuryplanet><span class="cloudy barren">Venusplanet><span class="life-bearing cloudy">Earthplanet>/*为了把class属性中有barren的所有元素变为斜体,可以写作:*/span[class~="barren"] { font-style: italic;} p.warning和p[class~="warning"]应用到HTML文档时是等价的
用于选取带有以指定值开头的属性值的元素,该值必须是整个单词。 <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: 0;} 需要注意的是:
伪类和伪元素选择器利用伪类和伪元素选择器,可以为文档中不一定具有存在的结构指定样式,或者为某些元素(甚至是文档本身)的状态所指示的幻像类指定样式。会根据另外某种条件而非文档结构向文档中的某些部分应用样式,而且无法通过研究文档的标记准确地推断出采用何种方式应用样式。
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;}
/*作为某元素(可以是任意元素)的第一个子元素的所有P元素设置为粗体。最常见的错误是认为p:first-child之类的选择器会选择p元素的第一个子元素。*/p:first-child { font-weight: bold;}
从对应的模式来讲,:lang()伪类就像是|=属性选择器。 *:lang(fr) { font-style: italic;} 伪选择器和属性选择器之间的主要差别在于语言信息可以从很多来源得到,而且其中一些可能在元素之外。CSS2.1指出:
因此,伪类比属性选择器稍微健壮一些。 结合伪类: /*鼠标指针停留在未访问链接上时,可以让这些链接变成红色,而鼠标指针停留在已访问链接上时,链接变成紫红色。*/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中的第一个字母。可能如下所示:
|
: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就是不合法的,因为伪元素在选择器主体前面出现。