这两个CSS选择器有什么区别?CSS选择器中哈希字符的两种用法有什么区别?
#someId
a#someId
看起来像.
会选择工作。第一个选择器意味着“选择ID为someID
的元素。”第二个是什么意思?我是否认为这意味着“选择ID为someID
的a
”?鉴于页面上只能有一个具有给定ID的元素,指定标签后的目的是什么?第二个选择器是否获得更高的specificity?
这两个CSS选择器有什么区别?CSS选择器中哈希字符的两种用法有什么区别?
#someId
a#someId
看起来像.
会选择工作。第一个选择器意味着“选择ID为someID
的元素。”第二个是什么意思?我是否认为这意味着“选择ID为someID
的a
”?鉴于页面上只能有一个具有给定ID的元素,指定标签后的目的是什么?第二个选择器是否获得更高的specificity?
是的,第二个选择器具有更高的特异性。
#someId
只是一个单一的ID,并将选择任何具有该ID的元素,而不管它是什么元素。 a#someId
既是一个元素也是一个ID,使得它更具体,因为它只会选择具有该ID的锚点a
元素。
有一个共同的招计算特异性和对比不同的选择,这是为了计数的ID,类和元素,如X,X,X的特异性。最具体的选择器是具有最高最左边数字的选择器(如果是平局,则移至下一个数字)。
#someId
只是一个ID,所以它是1,0,0。
a#someId
是一个ID和一个元素,所以它是1,0,1,因此更具体。
ID总是比类更具体,类总是比元素更具体。为了计算特异性,Psuedo-elements计算为元素,伪代数计为类。技术上256元= 1类和256类= 1个ID,但如果你有在你的方式更大的问题不用担心选择串多的事情。
唯一比ID更具体(除了包含多个ID的选择器字符串)是!important
的样式或通过元素上的style
属性声明的内联样式。
更多关于CSS的特异性:
这意味着,
选择具有一个ID
someId
是一个a
元素,它更具体。
#someId
选择与id
元素“someId”
a#someId
选择与id
锚元素“someId”
首先是假设更好的方法使用的是独特的id
小号如同建议的那样,以及它执行得更快的事实(CSS从右向左解析)
这不是一个关于具体是否足够具体的问题包括,在这种情况下只应使用id
选择器。但是,如果存在类名称或嵌套,更高级别的选择有助于更准确地针对特定元素。但是,不要忘记,矫枉过正同矫揉造作一样糟糕 - 它关乎平衡。
第二种形式a#someId是矫枉过正的,理论上在文档中不应该有两个具有相同id的元素。
我可以考虑使用它的一个原因是,如果您在页面中有一个元素改变了类型,但通过一些JavaScript操作维护了相同的id,并且您希望为该特定ID添加一些CSS。
例如与一些jQuery:
<style>
p#someId { ....}
a#someId { ....}
</style>
<script>
$('#someID').replaceWith('<a id="someId">Now a link</a>');
</script>
....
<p id='someId'>Not a link</p>
但在不同的页面上,仍然有可能使用相同的ID具有不同的元素... –
好点@Bartdude,我不会考虑这一点。我不会推荐它作为设计方法或任何其他方法,但绝对要记住这一点。 –
好吧,我不会建议它,但它肯定会发生一些“泛型”ID。或者即使很多人长时间在同一个网站上工作,也可能会在多个页面上使用相同的ID。但在那种情况下,选择者宁愿是一个修复而不是设计决定... –
你是对的,是的第二个选择是更具体。现在正如我在下面的几个评论中所说的那样,尽管看起来没有用处,但可以在不同的页面上分享不同的元素。如果样式表是在这些页面上共享的,除了ID –