ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

为什么是link-visited-hover-active(1/3)

来源:网络整理     时间:2016-03-05     关键词:

本篇文章主要介绍了"为什么是link-visited-hover-active",主要涉及到方面的内容,对于HTMLjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 前言通常我们在设置链接的一些伪类(link,visited,hover,active)样式时,要让不同的状态显示正确的样式,我们需要按一定的顺序设置这些伪类的样...

前言

通常我们在设置链接的一些伪类(linkvisitedhoveractive)样式时,要让不同的状态显示正确的样式,我们需要按一定的顺序设置这些伪类的样式。这里我就按CSS2规范中推荐的顺序进行介绍,即 link-visited-hover-active,可记为 LoVe-HAte

要想弄明白为什么是这个顺序,首先我们需要知道,CSS在确定应当向一个元素应用哪些样式时,这通常不仅需要考虑 继承,还要考虑声明的 特殊性,另外需要考虑声明本身的来源,这个过程就成为 层叠。下面我们分别来看看 特殊性继承层叠 这3种机制之间的关联。

特殊性

在实际的应用中,我们都知道一个元素可以通过多种选择器来进行选择,如ID选择器、类选择器等等,具体可看CSS选择器详解。由不同选择器组成的选择元素的方式暂且称之为 规则 吧。考虑以下3对规则,当然每对规则都选择同样的元素:

/* 规则1 */
h1 {
    color: red;
}
body h1 {
    color: purple;
}

/* 规则2 */
h2.grape {
    color: purple;
}
h2 {
    color: silver;
}

/* 规则3 */
html > body table tr[id="totals"] td ul > li {
    color: maroon;
}
li#answer {
    color: navy;
}

显然,每一对规则中只有一个胜出,因为所匹配的元素只能是某一种颜色。那么怎么知道哪一个规则更强呢?

答案就在于每个选择器的特殊性。通过计算选择器的特殊性值,特殊性最高的规则将会胜出并被利用。 这里先预留一个问题,如果特殊性相等的两个规则将如何确定应用?后面的层叠再介绍。

特殊性值

特殊性值表述为4个部分,如:0,0,0,0。一个选择器的具体特殊性如下确定:

  1. 对于选择器中给定的各个ID属性值,加0,1,0,0。
  2. 对于选择器中给定的各个类属性值、属性选择或者伪类,加0,0,1,0。
  3. 对于选择器中给定的各个元素和伪元素,加0,0,0,1。
  4. 结合符和通配选择器 * 对特殊性没有任何贡献,加0,0,0,0。
  5. 内联样式特殊性为1,0,0,0,因此内联声明的特殊性最高。
  6. 标志为 !important 的声明并没有特殊的特殊性值,此时该声明为重要声明,超过所有非重要声明。

通过以上的介绍,我们就可以计算出本节刚开始介绍的3组规则的特殊性值及被应用的规则:

/* 规则1 */
h1 { /* 0,0,0,1 */
    color: red;
}
body h1 { /* 0,0,0,2 (元素应用该规则) */
    color: purple;
}

/* 规则2 */
h2.grape { /* 0,0,1,1 (元素应用该规则) */
    color: purple;
}
h2 { /* 0,0,0,1 */
    color: silver;
}

/* 规则3 */
html > body table tr[id="totals"] td ul > li { /* 0,0,1,7 */
    color: maroon;
}
li#answer { /* 0,1,0,1 (元素应用该规则) */
    color: navy;
}

继承

基于继承机制,样式不仅应用到指定的元素,还会应用到它的后代元素。下面的例子帮你了解继承是如何工作的:

相关图片

相关文章