伪类选择器是在 CSS 选择器前加上冒号的选择器。您可能对其中的一些非常熟悉,例如 hover。
a:hover {
/* Yep, hover is a pseudo class */
}
它们在各种情况下都非常有用。有些是 CSS3,有些是 CSS2……这取决于每个特定的选择器。在 IE 之外,它们具有良好的浏览器支持。在 IE 中,即使是 IE8,支持也相当匮乏。但是,IE9 预览版完全支持它们。与链接相关的选择器可以工作,但其他功能很少。让我们简要了解一下每个选择器。不用担心,数量并不多。
与链接相关的伪类选择器
:link
– 也许是最容易引起混淆的与链接相关的伪选择器。难道所有的 <a>
都是链接吗?如果没有 href 属性,则不是。这仅选择具有 href 属性的链接,因此与 a[href]
本质上相同。如果 任意元素链接 成为现实,此选择器将变得更有用。
:visited
– 选择当前浏览器已访问过的链接。
:hover
– 当鼠标光标移到链接上时,该链接处于悬停状态,这将选择它。
:active
– 在激活链接(点击或以其他方式激活)时选择它。例如,对于按钮样式链接的“按下”状态或使所有链接更像按钮。
有一种有趣的技巧可以记住所有链接伪类选择器。查看每个选择器的第一个字母:LVHA … LOVE HATE。
输入和链接相关的伪类选择器
:focus
– 为链接定义悬停样式很棒,但这对那些使用键盘导航到达链接的用户没有帮助。:focus 将选择当前键盘焦点所在的链接。这不仅限于链接,还可以(实际上应该)用于输入和文本区域。 有些人会告诉你为任何具有 :hover 样式的元素定义 :focus 样式。
:target
– 目标伪类与 ID 结合使用,并在当前 URL 中的哈希标签与该 ID 匹配时匹配。因此,如果您位于 URL www.yoursite.com/#home,则选择器#home:target将匹配。这可能非常强大。例如,您可以创建一个选项卡区域,其中选项卡链接到哈希标签,然后面板通过匹配 :target
选择器(例如)并使用 z-index 移动到顶部来“激活”。
:enabled
– 选择处于启用默认状态并准备使用的输入。
:disabled
– 选择具有disabled属性的输入。许多浏览器会使输入变成淡灰色的,您可以使用此选择器控制它。
:checked
– 选择已选中的复选框。
:indeterminate
– 选择处于既未选中也未取消选中状态的单选按钮(例如,当页面加载带有单选按钮选项但未设置默认值时)。
:required
– 选择具有 required
属性的输入。:optional
– 选择没有 required
属性的输入。
:read-only
/ :read-write
– 根据 readonly
和 disabled
属性的组合选择元素。
基于位置/编号的伪类选择器
:root
– 选择文档根元素。几乎肯定会选择 元素,除非您是在某种奇怪的环境中工作,该环境也允许使用 CSS。也许是 XML。
:first-child
– 选择父元素中的第一个元素。
:last-child
– 选择父元素中的最后一个元素。
:nth-child()
– 根据提供的简单代数表达式(例如“2n”或“4n-1”)选择元素。能够执行诸如选择偶数/奇数元素、“每三个”、“前五个”等操作。在此处详细介绍,并提供了一个测试工具。
:nth-of-type()
– 与 :nth-child 类似,但用于同一级别元素类型不同的情况。例如,如果在一个 div 内有若干段落和若干图像,并且您想选择所有奇数图像。:nth-child 在这里不起作用,您将使用 div img:nth-of-type(odd)
。在处理定义列表及其交替的 <dt>
和 <dd>
元素时特别有用。
:first-of-type
– 选择任何父元素中此类型的第一个元素。因此,如果您有两个 div,每个 div 中都包含一个段落、图像、段落、图像。那么div img:first-of-type将选择第一个 div 中的第一个图像和第二个 div 中的第一个图像。
:last-of-type
– 与上面相同,只是会选择第一个 div 中的最后一个图像和第二个 div 中的最后一个图像。
:nth-last-of-type()
– 与 :nth-of-type 类似,但它从底部向上计数而不是从顶部向上计数。
:nth-last-child()
– 与 :nth-child 类似,但它从底部向上计数而不是从顶部向上计数。
:only-of-type
– 仅当元素是当前父元素中唯一的同类元素时才选择它。
关系伪类选择器
:not()
– 从现有匹配集中删除与 :not() 参数内选择器匹配的元素。例如,所有 div 除了那些具有“music”类的 div =div:not(.music)。规范指出 :not 选择器不能嵌套,但可以链接。某些浏览器(Firefox)也支持将逗号分隔的选择器作为选择器参数,尽管链接它们会是一个更安全的选择。也与属性选择器结合使用,例如input:not([disabled]).
:empty
– 选择不包含任何文本和子元素的元素。例如:
与文本相关的伪类选择器/元素
::first-letter
– 选择元素中文本的第一个字母。典型用法:首字母大写。
::first-line
– 选择元素中文本的第一行。典型用法:将第一个句子设置为小型大写字母,作为排版吸引眼球/引导。
:lang
– 此伪选择器位于 CSS3 规范中,但仅在 IE 8+ 中实现。将匹配任何具有或为具有匹配 lang 属性的元素的后代的元素。例如,:lang(fr)
将匹配任何段落,即使没有 lang 属性,如果父 body 具有 lang="fr"
作为属性。
快速说明
您可以像链接类和 ID 选择器一样链接伪选择器。在我们查看 :first-letter
和 :first-line
时,这尤其有用。您可能不想对页面上的每个段落都使用首字母大写,而只想对第一个段落使用,因此,p:first-child:first-letter { }
与内容相关的伪“元素”
::before
– 能够在特定元素之前添加内容。例如,在块引用之前添加一个引号,或者在特定段落之前添加一个图像以将其与其他内容区分开来。
::after
– 能够在特定元素之后添加内容。例如,在块引用之后添加一个结束引号。它也常用于 clearfix,在元素之后添加一个空空间来清除浮动,而无需任何额外的 HTML 标记。
伪元素与伪类
上面这两个选择器被恰当地称为伪“元素”(而不是选择器),因为它们不选择页面上存在的任何“真实”元素。这同样适用于这两个选择器,以及前面部分的 ::first-letter
和 ::first-line
。明白了吗?就像 ::first-letter
选择的第一个字母本身并不是一个元素,它只是现有元素的一部分,因此,是伪元素。
选择器样式 | 名称 | 作用 | 特异性 |
---|---|---|---|
:: | 伪元素 | 选择/创建一些实际的内容 | 0 0 0 1 |
: | 伪类 | 在特定条件下选择元素 | 0 0 1 0 |
标签限定
这些选择器可以进行标签限定,这意味着它们只有在同时满足元素(标签)和选择器匹配时才会应用。例如
p:first-child {
color: red;
}
只有当另一个元素的第一个子元素是 <p>
时,它才会匹配。如果不是,则不会匹配。
已弃用
:contains()
– 据我所知,这个选择器已经消失了。当前的 CSS3 规范已将其移除。我不知道具体原因,如果你知道的话,请告诉我。乍一看,它看起来非常有用(能够根据包含的文本内容选择对象)。这可能是因为存在一些问题,或者在选择器中包含内容是不希望的。我更希望它通过元素而不是文本进行选择,例如 p:contains(img)
,但可惜,没有这样的运气。
更新:现在有了 a :has()
选择器!
::selection
– 允许更改选中文本的样式。它最初是在 CSS 选择器级别 3 中起草的,但在达到推荐状态之前被移除。尽管如此,它在一些浏览器中得到了实现,这些浏览器可能会保留对它的实验性支持。对于 Firefox,您可以使用 ::-moz-selection。 更多信息请点击此处。
更新:::selection
现在完全成为标准了,可以放心地使用它!
jQuery 使用
jQuery 可以在其选择器中使用所有这些,这很棒。更棒的是,jQuery 还提供了其他可用的伪类选择器。
:first
– 匹配已匹配集合中的第一个实例。这与 :nth-child(1) 不同,后者只有在选择器匹配并且它是第一个子元素时才会选择。对于 :first,选择器匹配后,它会找到第一个匹配项,而不管子元素的位置。
:eq()
– jQuery 的选择器引擎不支持 现在 支持了。它从已匹配的集合中选择第 X 个元素。它也是从 0 开始索引(0 是第一个元素),这与 :nth-of-type
,但这非常相似。:nth-child
不同,后者第一个元素是 1。
:contains('text')
– 这个选择器在 CSS 中已被移除,但在 jQuery 中仍然有效。
:lt()
– 与 :nth-child(-n+X) 相同,即选择“前 X 个元素”。
:gt()
– 与 :nth-child(n+X) 相同,即选择除“前 (X-1) 个元素”之外的所有元素。
:even
– 与 :nth-child(even)
或 :nth-child(2n)
相同。
:odd
– 与 :nth-child(odd)
或 :nth-child(2n+1)
相同。
:has()
– 在匹配之前测试元素是否具有某个选择器的后代,例如 :has("div.intro")
。
实际上还有很多其他的 jQuery 选择器,它们都非常巧妙且有用(或者至少提高了可读性)。请查看 选择器文档 以了解更多信息。
jQuery 无法真正帮助你处理像 ::before
和 ::after
这样的伪元素,但你可以在 某些浏览器中访问它们的值。例如,如果一个 div 有一些 ::before
生成的内容,你可以像这样获取它的值:
var div = document.querySelector("div");
var content = window
.getComputedStyle(div, '::before')
.getPropertyValue('content');
特异性
类选择器和伪类选择器具有相同特异性权重。伪元素具有元素选择器的特异性。
li {} /* specificity = 0,0,0,1 */
li:first-child {} /* specificity = 0,0,1,1 */
li:first-line {} /* specificity = 0,0,0,2 */
li.red {} /* specificity = 0,0,1,1 */
通常,它们在 CSS 中以组合方式使用或在后面列出,因此希望不会造成太多问题……
ul li.friend { margin: 0 0 5px 0; }
ul li:last-child { margin: 0; }
在这种情况下,边距归零将起作用(假设它匹配相同的元素),但这仅仅是因为边距归零在后面列出(它们具有相同特异性)。所以……要注意这一点。
令人着迷的总结——非常有用,既可以作为对遗忘事物的提醒,也可以作为新的学习来源。
我敢打赌,我很快就会用到 :target……
感谢 Chris 对此进行总结。像往常一样,干得漂亮 :-)
不错的总结,谢谢 =)!
我也从未使用过 :target,直到现在。以后得试试。非常有用的文章,谢谢。
谢谢!你做过浏览器支持测试吗?一个帮助我决定何时可以使用这些选择器的表格将不胜感激 :-)
我一直都在寻找类似的东西。谢谢
我实际上没有意识到有这么多!
基于链接的选择器是标准的,我想每个人都知道每个选择器的作用并在日常工作中使用它们。
我从未真正发现自己需要使用很多,但现在我查看并理解了它们的作用,我可能需要开始使用一些……特别是 :focus、:enabled 和 :disabled。对于我的联系表单添加一些额外功能来说,这真的很好。
与文本相关的那些也很酷,:first-letter 在所有浏览器中都受支持吗?
感谢提供所有这些信息,我只需要尝试记住它们的作用。
非常有趣的总结。我不是 CSS 专家,我喜欢这些对可以做什么的见解。
非常好!父/子选择器将使一些棘手的 JavaScript 消失。
确实是一个不错的总结!
有很多伪类是我以前不知道的。
再次感谢。
回复我的第一条评论:http://www.quirksmode.org/css/contents.html
一些伪类的爱!
另一篇非常有用的文章,非常感谢你的付出,谢谢 Chris
非常有用!继续努力 Chris!
嗨,
谢谢分享如此精彩的总结。
也许你应该提到伪类和伪元素之间的区别,以及使用双冒号(::)还是单冒号(:)。
干杯!
dave
不错,Chris!我之前不知道:not和:empty伪类。可惜这两个IE都不支持。该死的IE!
很棒的文章。我平时不太常用:nth-last-child(N)和:nth-last-of-type(N),但可能以后会更多地用到。
不错的总结!
浏览器版本的兼容性列表是否像“除了IE版本小于9之外,其他浏览器都支持”这么简单?我有很多客户在浏览器版本方面落后……很遗憾。
哦,这里有个小错别字
"你可以像……一样链接pseduo选择器"
很棒的内容。伪类很棒……唯一的问题是浏览器兼容性。感谢列出这个列表!
“也常用于clearfix,其中一个空空间是……”
clearfix HACK不是一个好东西。CSS需要一种官方的、有文档记录的清除浮动的方法。
当然,clearfix HACK至少在未来10年内都会存在,但这并不意味着我们应该忽略这个问题,而不使用合适的css属性来解决它。
我喜欢你关于overflow属性用于清除浮动的值的帖子。
但是,需要明确的是,clearfix本身并不是hack。它完全有效的CSS。在IE 6/7中使用hack才能使其工作。
好的,你说得对。但为了获得一个简单、非常需要的行为,不得不定义所有这些东西,这感觉并不“舒服”。
你能写一篇关于父容器在子元素浮动时为何会坍塌的文章吗?在我构建的任何布局中,我都想不出任何我想要容器坍塌的场景。我想我更喜欢IE旧的行为,即始终环绕浮动元素。在我的布局中,这在99.99999%的情况下是最合理的。
这是一个好主意。这很奇怪……但它确实有这样工作的原因。实际上,如果它以另一种方式工作,我认为我们会抱怨更多。
我不同意,但我需要看看你认为问题会更严重的情况。
如果在一个页面上有很多图片和很多文本,并且每个图片标签都带有段落标签,并且由于某种原因所有段落都设置为clearfix,那么如果很多图片的高度都高于其段落,看起来就不会很好。
但在我的工作中,大多数时候当我使用图片标签时,它都在自己的p/div/figure中,并带有1句描述。因此,如果该figure浮动,则可以根据需要与多个段落块并排显示。
这与你是否“想要”容器坍塌无关。容器坍塌的原因是,当你向元素添加“float”时,它就会从文档流中移除。引用SitePoint关于清除浮动的CSS参考:“浮动框从流中移除,因此它不会影响周围的块级框。”(这是标准行为,并且是使浮动正常工作所必需的。)
对。浮动就像绝对定位的远房表亲。它们从文档流中移除……有点。
浮动的“非常需要的行为”是它们不会影响(未浮动的)块级元素,但内联元素(如文本)会围绕它们流动。
这就是为什么在段落中的图像中添加“float: left;”会按预期工作:图像移到左边,段落不移动,文本围绕图像流动。完美。
但是,这使得它们在复杂布局中成为难以捉摸的怪物。它们可能是创建复杂布局的最糟糕方法……除了其他所有方法。
@Lee:是的,如果图像在段落中向左浮动,并且图像比段落长,则希望下一个段落也围绕图像流动。我认为这就是float的设计初衷——只是很遗憾,当避免使用表格时,我们不得不将它用于其他所有用途。
官方方法是display: table和display: table-cell等。但猜猜谁不支持它,从而使其在现实生活中变得毫无用处。提示:与仅支持其中一些伪选择器的浏览器相同。
你忘记了a:focus,我通常用它来代替a:active以支持制表符(突出显示当前制表符链接)。
非常好的总结。
可惜:contains接受选择器(如Jquery的:has()方法)可能不会实现。我认为地球上每个开发者都希望它能够做到a:contains(img)。
一些挑剔的意见
对于:first-child,我会这样描述:“仅当元素是其父元素的第一个子元素时才选择它。”对于:last-child也是如此。我将你当前的描述(“选择其父元素中其类型中的第一个元素”)理解为更接近:first-of-type的含义。
:before和:after在技术上是伪元素,而不是伪类。正如你所指出的,区别在于(a)你
可以必须添加内容(如果未添加内容,许多浏览器将不会显示它们),并且它们可以接受更多类型的样式(例如clear:both;,这就是它用于clearfix方法的原因)。我们什么时候才能获得父选择器?例如,如果我们想要为包裹在img标签周围的父a标签设置一个属性……这几乎总是有点麻烦。我最新的解决方案是只给链接的图像一个class .imglink,它覆盖我的其他链接样式,这样我不会得到奇怪的背景或其他奇怪的行为,但如果可以为img:parent a(或任何语法如何工作——a:parent img?)设置一个css规则,那会简单得多。你在CSS3中听说过这方面的内容吗?(或者我们是否已经有了类似的东西而我错过了?)
我应该说我给父“a”标签添加了imglink类……<a class=”imglink”><img…
我在其他地方问过同样的问题。我曾经收到过一个声称熟悉webkit和firefox代码的人的回复,他们说阻止它发生的两个问题是速度和浏览器应用css的顺序。
我真不敢相信速度的借口。几乎每个javascript库都允许你找到一个元素,然后沿着dom树向上遍历到它的父元素和祖先元素。如果jquery和prototype可以做到,为什么浏览器不能更快地做到呢?
jQuery及其朋友仅在你明确要求它们时才进行DOM遍历,但浏览器必须在每次动态页面更新以及某些用户交互时重新计算哪些CSS规则匹配。想象一下,如果你有
div:ancestor(a:hover) { font-weight: bold }
浏览器每次用户在A标签中移动鼠标进出时都必须一直遍历到根节点的DOM,然后可能需要重新调整文档的大片区域!
好文章。我还没有找到太多能很好地解释伪类选择器的网站。w3schools甚至没有涵盖最基本的那些。不过,为了吹毛求疵,你确实也涵盖了一些伪元素选择器,它们与伪类的名称并不相同。 :)
尽管如此,这篇文章已被添加书签!
对于任何喜欢探索CSS强大功能的人来说,这是一篇不错的文章:http://www.smashingmagazine.com/2009/08/17/taming-advanced-css-selectors/
优秀的文章,Chris。
IE6 / IE7(IE8?)中是否都能正常工作?
很棒的文章!我以前不知道所有其他的伪选择器。特别是那个可以让我们选择无序列表的最后一个和第一个元素的那个!它节省了为它们创建额外类的时间和空间(根据需要)。
一如既往,解释得很好也很容易理解。我会将“菜鸟”重定向到w3schools和css-tricks ;-)
我引用html规范
始终,一组单选按钮中只有一个被选中。如果一组单选按钮的任何元素都没有指定`CHECKED`,则用户代理必须最初选中该组的第一个单选按钮。
那么,这如何证明在css中添加不确定的伪类呢?
此外,p:empty{display:none;} 看起来像是修复用户可以移除原本显示在 p 元素中的数据的简单方法,但它的作用过于强大。在一些奇怪的情况下,它也会将 display:none 设置为绝对不为空的 p 元素。
所以,如果你想知道为什么某些东西不见了,跳过这个步骤,直接在服务器端修复它 ;-)
:root 在我的 html5 页面中似乎也不太好用(幸运的是它并不重要,我只是想测试一下)
我很想看到一个 :empty 使非空元素消失的测试用例,这将是一个值得记录的好东西。
关于规范和“恰好一个”业务,这很有趣。想知道哪个文档类型……有链接吗?
它讲述了“恰好一个”的部分
http://www.w3.org/TR/html401/interact/forms.html#h-17.2.1
由于我对 html5 作为 css3 的“合作伙伴”更感兴趣,所以我检查了差异文档。但我找不到 html4 和 5 在单选按钮上的任何区别。
http://dev.w3.org/html5/html4-differences/
我可能错过了一些规范,我不能说我读过 w3 曾经创建的每一个文档。
关于另一个主题;
自从我发现这个 bug 已经有一段时间了。我只是通过在我的样式表顶部添加 p:empty{display:hidden;} 重新创建了它。
在我看来,当时我没有测试其他浏览器,如果我测试了,我就会知道我现在知道的事情:它只影响 webkit。
它应该是什么样子的截图
http://geuze.name/other/how_it_should_be.png
然后是 Safari
http://geuze.name/other/bug_safari:empty.png
然后是 Chrome(5)
http://geuze.name/other/bug_chrome:empty.png
一旦你将鼠标悬停在元素上,bug 就会消失(这使得它仍然令人讨厌地可见)
也许使用的样式表不是最好的(对此相当肯定),但我没有看到它失败的原因,除了它可能是 webkit 中的一个(罕见)bug。
我的意思是 p:empty{display:none;}
我刚从庆祝圣帕特里克节回来;)
是的,这意味着没有一个主要的浏览器完全符合 HTML4 规范。HTML5 规范已经认识到这一点:http://dev.w3.org/html5/spec/forms.html#radio-button-group(大绿色文本,以防你错过它)
在我看来,这是糟糕的用户界面。最流行的选项应该被选中。如果选择“无”是有效的,那么单选组不适合,因为用户无法轻松地将组恢复到其不确定状态。
不错!CSS 老爸确实有很多“孩子”。
你好,
有人知道伪类和伪元素之间的真正区别吗?
两者非常不同,但我仍然无法区分它们。
我在一些网站上读到有伪选择器、伪类选择器和伪元素选择器。我太困惑了!
我唯一使用的伪元素是 a:link、a:visited、a:hover。我以为它们被称为伪类!
有人能帮我澄清一下吗?
谢谢!
非常棒的文章,Chris!
我喜欢 clearfix 方法,并且可能从现在开始实施它。谢谢!
喜欢这些揭示一些未充分使用和相对未知代码的文章。这就像发现一扇带有布满灰尘的把手的大门……
只是希望另一边有地板;)
:contains() 很可能将作为 :matches() 或 :any() 返回,尽管它很可能不会进入 CSS3,很可能是 CSS4 或作为 UA 扩展。
你可以在www-style 邮件列表存档中看到正在进行的当前讨论。
最近经常使用 nth-child。没想到使用 :first-letter 和 :last-letter 来创建风格化的引用或块引用。真的希望 CSS3 为像导航中的链接这样的元素提供“当前”伪类 :-)
谢谢,我是 CSS 新手,这对我很有用
我理解对吗?
通过学习,我认为我可以做到所说的!
很棒的总结,Chris,一些我以前不知道的东西,所以这将非常方便。
不错的总结。
Cris,正如预期的那样——精彩且内容丰富的文章。
我一定会添加 p:first-child:first-letter {font-size:16px } 来看看它是否对我的博客读者有任何积极的影响。
– Aery
p:first-child:first-letter
这在任何浏览器(FF、Safari、IE 等)中都不起作用。我哪里做错了?
p:first-letter 可以工作,但这不是我想要的。
Chris,这是一个很棒的解释!
如果有一个包含这些内容的图表,甚至可能包括每个浏览器支持哪些内容,那就太好了。**有人知道是否存在这样的图表吗?**即使它不像你上面的文章那样全面?
这个网站提供的知识总是如此有趣且令人赞赏!但老实说,只要 IE 不正常工作,它在未来,怎么说呢,10 年内都无法使用?
提到的浏览器所需的回退使得所有这些很棒的 css 处理几乎没有必要。
:target 实际上将非常有用并节省页面加载时间。然后你只需要为 IE 编写一个 JavaScript 修复,而其他浏览器只需要加载 CSS。此外,能够检查哈希也很酷,无需 PHP 或 JS。
感谢这篇文章。
嘿,Chris,很棒的文章。我总是忘记在我的表单上应用 :focus,这只是我需要养成习惯的事情之一!
快速说明标题后的一个小错误
“You can chain pseduo……” 应该改为
“You can chain pseudo……”
另一篇很棒的文章。现在记下其中的一些,以便我在下一个项目中记住包含它们。谢谢,Chris。
如果你想将自闭合元素的属性添加到页面中,你推荐使用什么?(这在 XML 中更有意义。)我可以使用 :before 或 :after,但前面或后面什么也没有。希望你明白我的意思。
Chris,很棒的文章,伙计!等不及要详细阅读它了!
SitePoint CSS 参考(http://reference.sitepoint.com/css/specificity)介绍了如何计算特异性
…
计算类选择器(例如,.test)、属性选择器(例如,[type=”submit”])和伪类(例如,:hover)的数量。
…
要计算 c,请计算选择器中其他属性和伪类的数量。
所以,我认为伪类选择器的特异性不低于普通类选择器
真相是什么?
我认为 SitePoint 是错误的。我刚刚进行了一个测试(当前的 Firefox 和 Safari),一个真实的类选择器(.test)每次都战胜了伪选择器(:nth-child)的特异性之战。我甚至测试了切换文档顺序,以防它们完全相同。
我对此感到不安,所以我也进行了测试(FF3.6.2 和 Chrome4.0.280)
请查看
http://teamtom.net/homokozo/pseudo-class-spec-test/pseudo-class-specificity-test-1a.html
每个第二个元素由 :nth-child 渲染为绿色,第一个列表元素由类渲染为蓝色
然后是这个
http://teamtom.net/homokozo/pseudo-class-spec-test/pseudo-class-specificity-test-1b.html
第一个元素也变成了绿色,因为我更改了定义的顺序
这证明了 li:nth-child(2n-1) 和 li.first 的特异性相同,并且最后一个获胜
你怎么看?
你说得对,我的测试有缺陷。在修复我自己的测试时,我发现第二个选择器,即使是伪选择器,也胜过了真正的类选择器,证明它们具有相同的价值。
我更新了文章使其更准确。我也希望我能记得最初在哪里看到那个图表,因为有人把它弄错了。
问题?
包含左右侧边栏的 div id=asidegroup 可以设置为不透明度 0.2,然后在悬停时设置为不透明度 1.0……悬停一个,两个都弹出显示。在这里,我们为一个物理位置中的两个对象设置了一个物理 div 容器的样式,并且它运行良好!
现在,假设我们希望页面上散布的所有山雀快照在悬停任何一只山雀时都扑动和鸣叫……我们该怎么做?现在,请更进一步。假设我们希望所有**女孩**山雀快照在悬停任何一个女孩时都扑动和鸣叫,同样,当悬停**男孩**时,男孩山雀也一样……在这里,我们希望在一个样式组中隔离某些页面对象,该样式组包含物理上隔离的、可能与类关联的对象(但它也可以是命名 ID 组)。我们该怎么做?
我在康奈尔鸟类学页面和黄石火山页面上看到过类似的东西,但那些是火星探测器脚本。我们希望探索使用 HTML5 和 CSS3 的样式分组。
Chris,你和 TeamTom 的方法在程序化规模上是多种非常不同的文字处理器实体的混合。例如,其中 :active 捕获黄色,然后 :focus’ 捕获这里的黄色,然后背景作为上次访问链接的提醒保留,直到页面表面被点击 - Internet Explorer。而 Chrome 无法在字面实例之间保留活动焦点指令,因为它深入到主要、原始链接相关的焦点实现中。无论如何,就像 active 会留下焦点印记一样,将 active 设置在最高可靠性位置(此页面的顶部,哈哈),那么 focus 虽然侵入性较小,但也始终如一地以与悬停相同的可靠性将程序界面留下印记。我注意到你已经删除了我之前发布的帖子(我想它并没有被所有人完全理解),我们在其中挑战了使用 focus 作为“分隔符”的 Nth of n。在许多方面,focus 比 hover 更可靠,尽管它的公众形象被谷歌之类的人粗暴地散布,他们急于尽可能快地实现尽可能少的功能。让我们不要欺骗自己,对吧?我的意思是,我们在这里共享的公共界面只是互联网的一小部分,每个界面都提供一组独特的程序化插值。在界面指挥官(或突击队员)设定分数的地方,:focus 也将位于页面顶部。这是否太深奥(或特殊)了?
你在 last-child 的描述中有一个错误。
你说“…of its type…”,但它应该是“如果最后一个元素碰巧是那种类型”或类似的。
而那是 nth-last-of-type 的定义,而不是 last-child……太好了,有人 4 年前就发现了它 ¬¬ 并在上面评论了它。