# /* ID */ . /* 类名 */ element(div) /* 标签 */ A, E /* 所有A元素和B元素 */ A E /* 元素A的任一后代元素E (后代节点指A的子节点,子节点的子节点,以此类推) */ :first-child/* 第一个子元素 */ :last-child/* 最后一个子元素 */ :nth-child(n) /* 第n个子元素 */ :hover/* 鼠标悬停 */ :active/* 被激活(点击) */
关系形选择器
1 2 3 4 5 6
A, E /* 所有A元素和B元素 */ A E /* 元素A的任一后代元素E (后代节点指A的子节点,子节点的子节点,以此类推) */ A > E /*元素A的任一子元素E(也就是直系后代)*/ E:first-child/*任一是其父母结点的第一个子节点的元素E*/ A + E /*选择紧接在元素A之后的所有 兄弟元素E*/ A ~ E /*同一个父元素下,并且前面有A元素的E*/
inline unsigned CSSSelector::specificityForOneSelector() const { // FIXME: Pseudo-elements and pseudo-classes do not have the same specificity. This function // isn't quite correct. switch (m_match) { caseId: return0x10000; // ID选择器权重
casePseudoClass: // FIXME: PsuedoAny should base the specificity on the sub-selectors. // See http://lists.w3.org/Archives/Public/www-style/2010Sep/0530.html if (pseudoClassType() == PseudoClassNot && selectorList()) returnselectorList()->first()->specificityForOneSelector(); FALLTHROUGH; caseExact: caseClass: caseSet: caseList: caseHyphen: casePseudoElement: caseContain: caseBegin: caseEnd: return0x100; // class选择器权重