之类的东西a:link
或div::after
...
有关差异的信息似乎很少。
之类的东西a:link
或div::after
...
有关差异的信息似乎很少。
Answers:
关于CSS 3选择器的建议很清楚,但是无论如何我都会尝试显示差异。
引入了伪类概念以允许基于位于文档树之外或无法使用其他简单选择器表达的信息进行选择。
伪类始终由“冒号”(
:
)组成,后跟伪类的名称,并可选地由括号之间的值组成。选择器中包含的所有简单选择器序列都允许使用伪类。在前导类型选择器或通用选择器(可能省略)之后,可以在简单选择器序列中的任何位置使用伪类。伪类名称不区分大小写。一些伪类是互斥的,而其他伪类可以同时应用于同一元素。伪类可以是动态的,从某种意义上说,当用户与文档进行交互时,元素可能会获取或丢失伪类。
伪类的重要性质在第一句话中指出:“伪类概念允许选择 ”。它使样式表的作者可以根据“位于文档树外部”的信息(例如,链接(:active
,:visited
)的当前状态)在元素之间有所不同。这些没有保存在DOM中的任何位置,并且没有DOM接口可以访问这些选项。
另一方面,:target
可以通过DOM操作进行访问(您可以使用window.location.hash
来使用JavaScript查找对象),但这 “无法使用其他简单的选择器来表达”。
因此,基本上伪类将细化集合中选择元素作为任何其他的简单的选择器在一个简单的选择的序列。请注意,一系列简单选择器中的所有简单选择器都将同时进行评估。有关伪类的完整列表,请检查CSS3选择器建议。
下面的示例将为所有偶数行着色为灰色(#ccc
),将所有不可除以5除以白色的不均匀行着色,并将其他所有行设为洋红色。
table tr:nth-child(2n) td{
background-color: #ccc;
}
table tr:nth-child(2n+1) td{
background-color: #fff;
}
table tr:nth-child(2n+1):nth-child(5n) td{
background-color: #f0f;
}
伪元素创建了除文档语言指定的抽象之外的有关文档树的抽象。例如,文档语言不提供访问元素内容的首字母或第一行的机制。伪元素允许作者引用本来无法访问的信息。伪元素还可以为作者提供一种引用源文档中不存在的内容的方式(例如,
::before
和::after
伪元素可以访问生成的内容)。伪元素由两个冒号(
::
)组成,后跟伪元素的名称。
::
当前文档引入了该符号,以便在伪类和伪元素之间建立区别。为了与现有样式表兼容,用户代理还必须接受CSS级别1和2引入的伪元素的先前单冒号表示法(即:first-line,:first-letter,:before和:after)。本规范中引入的新伪元素不允许这种兼容性。每个选择器只能出现一个伪元素,如果存在,它必须出现在代表选择器主题的简单选择器序列之后。
注意:此规范的未来版本可能会为每个选择器允许多个伪元素。
这里最重要的部分是“伪元素允许作者引用[..]否则无法访问的信息 ”,并且它们“还可以为作者提供一种引用源文档中不存在的内容的方式(例如,::before
和::after
伪元素可以访问生成的内容。 ”。最大的不同是,它们实际上创建了一个新的虚拟元素,可以在其上应用规则甚至伪类选择器。他们不过滤元件,他们基本内容过滤(::first-line
,::first-letter
),敷在一个虚拟容器,它的作者可以风格但是他想要的(当然,几乎)。
例如,::first-line
伪元素无法使用JavaScript进行重构,因为它很大程度上取决于当前使用的字体,字体大小,元素宽度,浮动元素(以及一天中的时间)。嗯,这并不完全正确:人们仍然可以计算所有这些值并提取第一行,但是这样做非常麻烦。
我猜最大的区别是“每个选择器只能出现一个伪元素”。该说明说,这可能会发生变化,但是从2012年起,我认为我们将来不会看到任何不同的行为(它仍在CSS4中)。
以下示例将使用伪类:lang
和伪元素将语言标签添加到给定页面上的每个引用中::after
:
q:lang(de)::after{
content: " (German) ";
}
q:lang(en)::after{
content: " (English) ";
}
q:lang(fr)::after{
content: " (French) ";
}
q:not(:lang(fr)):not(:lang(de)):not(:lang(en))::after{
content: " (Unrecognized language) ";
}
伪类在选择器序列中充当简单选择器,从而根据非表示特征对元素进行分类,伪元素创建新的虚拟元素。
从Sitepoint文档中:
一个伪类是类似于HTML的一类,但它不是在标记明确指定。一些伪类是动态的-它们是由于用户与文档交互而应用的。- http://reference.sitepoint.com/css/pseudoclasses。这些就像
:hover, :active, :visited
。伪元素匹配文档树中未明确存在的虚拟元素。伪元素可以是动态的,因为它们表示的虚拟元素可以更改,例如,当浏览器窗口的宽度改变时。它们还可以表示由CSS规则生成的内容。- http://reference.sitepoint.com/css/pseudoelements。这些就像
before, :after, :first-letter
。
下面是简单的答案:
当我们需要根据元素的状态应用CSS时,我们使用伪类。如:
:hover
)的悬停:focus
)上时应用CSS 。等等当我们需要将css应用于元素的特定部分或新插入的content时,我们使用伪元素。如:
::first-letter
)::before
,::after
)的内容之前或之后插入内容以下是这两个示例:
<html>
<head>
<style>
p::first-letter { /* pseudo-element */
color: #ff0000;
}
a:hover { /* pseudo-class */
color: red;
}
</style>
</head>
<body>
<a href="#" >This is a link</a>
<p>This is a paragraph.</p>
</body>
</html>
伪类
伪类是选择HTML文档某些部分的方法,原则上不是基于HTML文档树本身及其元素或诸如名称,属性或内容之类的特征,而是基于其他幻像条件(例如语言编码或动态状态)元素
元素的原始伪类定义的动态状态会随着时间的流逝或通过用户干预而进入和退出。CSS2在此概念上进行了扩展,以包括虚拟概念文档组件或文档树的推断部分,例如第一个孩子。伪类的运行就像将幻象类添加到各种元素中一样。
限制:与伪元素不同,伪类可以出现在选择器链中的任何位置。
伪类代码示例:
a:link /* This selects any "a" element whose target has not been visited.*/
{
padding : 4px;
text-decoration : none;
width : 10%;
color : #000000; /* black text color */
background-color : #99FF99; /* set to a pastel green */
border-top : 2px solid #ccffcc; /* highlight color */
border-left : 2px solid #ccffcc; /* highlight color */
border-bottom : 2px solid #003300; /* shadow color */
border-right : 2px solid #003300; /* shadow color */
}
a:visited /* This selects any "a" element whose target has been visited.*/
{ padding : 4px;
text-decoration : none;
color : #000000; /* black text color */
background-color : #ccccff; /* set to a lavender */
border-top : 2px solid #ffffff; /* highlight color */
border-left : 2px solid #ffffff; /* highlight color */
border-bottom : 2px solid #333366; /* shadow color *
border-right : 2px solid #333366; /* shadow color */
}
a:hover /* This selects any "a" element which is in a hover state. This is a state during pointer movement within the rendering region of an element. The user designates an element but does not activate it. */
{
color : #000000; /* black text color */
background-color : #99cc99; /* desaturated color */
border-top : 2px solid #003300; /* shadow color */
border-left : 2px solid #003300; /* shadow color */
border-bottom : 2px solid #ccffcc; /* highlight color */
border-right : 2px solid #ccffcc; /* highlight color */
}
a:focus /* This selects any "a" element which currently has focus. Focus is a state during which an element accepts keyboard input or other forms of text input. */
{
padding : 4px;
text-decoration : none;
width : 10%;
color : #000000; /* black text color */
background-color : #ffff99; /* set to a pastel yellow */
border-top : 2px solid #ffffcc; /* highlight color */
border-left : 2px solid #ffffcc; /* highlight color */
border-bottom : 2px solid #666633; /* shadow color */
border-right : 2px solid #666633; /* shadow color */
}
a:active /* This selects any "a" element which is in a state of activation. Active is a state during pointer activation (eg: press and release of a mouse) within the rendering region of an element.*/
{
padding : 4px;
text-decoration : none;
width : 10%;
color : #000000; /* black text color */
background-color : #ff99ff; /* set to a pink */
border-top : 2px solid #ffccff; /* highlight color */
border-left : 2px solid #ffccff; /* highlight color */
border-bottom : 2px solid #663366; /* shadow color */
border-right : 2px solid #663366; /* shadow color */
}
演示上述伪类代码的呈现页面
伪元素
PSEUDO-ELEMENTS用于解决元素的子部分。它们允许您在元素内容的一部分上设置样式,超出文档中指定的样式。换句话说,它们允许定义实际上不在文档元素树中的逻辑元素。逻辑元素允许在CSS选择器中处理隐含的语义结构。
限制:伪元素只能应用于外部和文档级上下文,而不能应用于内联样式。伪元素在规则中可以出现的位置受到限制。它们只能出现在选择器链的末尾(在选择器的主题之后)。它们应位于选择器中找到的任何类或ID名称之后。每个选择器只能指定一个伪元素。为了在单个元素结构上处理多个伪元素,必须创建多个样式选择器/声明语句。
伪元素可用于常见的印刷效果,例如初始大写和大写大写。它们还可以解决不在源文档中生成的内容(带有“ before”和“ after”)。下面是一些带有属性和值的伪元素的样式表示例。
/ *以下规则选择标题1的首字母,并将字体设置为2em(草书),背景为绿色。第一个字母为块级元素选择第一个呈现的字母/字符。* /
h1:first-letter {
font-size : 2em;
font-family : "Lucida Handwriting", "Lucida Sans", "Lucida Console", cursive;
background-color : #ccffcc;
}
/* The following rule selects the first displayed line in a paragraph and makes it bold. First-line selects the first rendered line on the output device of a block-level element. */
p:first-line {
font-weight : bold;
}
/* The following rule selects any content placed before a blockquote and inserts the phrase "Quote of the day:" in bold small caps with a green background. */
blockquote:before {
content : "Quote of the day:";
background-color : #ccffcc;
font-weight : bold;
font-variant : small-caps;
}
/* The following rule selects any content placed before a "q" element and inserts the smart open quote. */
q:before {
content : open-quote;
}
/* The following rule selects any content placed after a "q" element and inserts the smart close quote. */
q:after{
content : close-quote;
}
资料来源:链接