css3选择器总结

1.基本选择器

  通配符选择器  * {margin: 0;}

  元素选择器  body {background: #ddd;}

  类选择器  .list {border: 1px solid #ccc;}

  ID选择器  #list {color: #ddd;}

  后代选择器  .list li {height: 10px;}

  

2.基本选择器扩展

  子元素选择器  #list > .item {color: pink;}

    也称为直接后代选择器,只能匹配到直接后代

  相邻兄弟选择器  .list .item + .inner {color: #ddd;} 

    只会匹配紧跟着的兄弟元素

  通用兄弟选择器  #list .item ~ div {border: 1px solid #ddd;}

    可以匹配到所有的兄弟元素(不需要紧跟着)

  选择器分组  h1,h2,h3 {color: pink;}

    这里的逗号称之为  结合符

3.属性选择器

  存在 和 值 两种属性选择器

    [attr]  该选择器判断是否包含 attr 属性的所有元素, 不论 attr 的值为何

    [attr = val]  该选择器仅选择 attr 属性值为 val 的所有元素

    [attr ~= val]  根据部分属性值选择  如果需要根据属性值中的词列表的某个词进行选择,则需要使用波浪号(~)。

      假设您想选择 class 属性中包含 important 的元素,可以用下面这个选择器做到这一点:

      p[class~='important'] {color: #ddd;}

    [abc^='def']  选择abc属性值以 'def' 开头的所有元素

    [abc$='def']  选择abc属性值以 'def' 结尾的所有元素

    [abc*='def']  选择abc属性值中包含 'def' 的所有元素

    [abc |= 'def']  特定属性选择器,选择abc属性等于 def 或 以 def- 开头的所有元素

4.伪类与伪元素选择器

  链接伪类

    :link  表示作为超链接,并指向一个未访问的地址的所有锚

    :visited  表示作为超链接,指向一个已访问的地址的所有锚

    :target  表示一个特殊的元素,她的id是URI的片段标识符

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>target伪元素选择器</title>
  <!--
    :target 是CSS3新增的一个伪类,可用于选取当前活动的目标元素。当URL末尾带有锚名称 #,就可以
    指向文档内某个具体的元素。这个被链接的元素就是目标元素(target element)。它需要一个id去
    匹配文档中的 target。
  -->
  <style type='text/css'>
  #content1, #content2 {
    display: none;
  }

  #content1:target, #content2:target {
    display: block;
  }
  </style>
</head>
<body>
<div>
  <ul class='nav'>
    <li><a href="#content1">列表1</a></li>
    <li><a href="#content2">列表2</a></li>
  </ul>
  <!--
    一开始页面中的 #content1 与 #content2 都是隐藏的,当点击列表1触发href="#content1" 时,
    页面的 URL 会发生变化:由 url 变成 url#content1
    接下来会触发 #content1:target{ } 这条 CSS 规则,#content1 元素由 display:none 变成display:block ,点击列表2亦是如此。
  -->
  <div id="content1">列表1内容:123</div>
  <div id="content2">列表2内容:abc</div>
</div>
</body>
</html>

  动态伪类  hover active 基本可以作用于所有的元素

     :hover  悬浮在元素上

    :active  被用户激活的元素(点击按住时)

    由于 a 标签的 :link 和 :visited 可以覆盖所有 a 标签的状态,所以当 :link :visited :hover :active 身上时,: link 和 :visited 不能放在最后

    隐私与:visited选择器

      只有下列的属性才能被应用到以访问链接(:visited只有一下三个属性起作用)

        color

        background-color

        border-color

  表单伪类

    :enabled  匹配可编辑的表单

    :disable  匹配被禁用的表单

    :checked  匹配被选中的表单

    :focus  匹配获得焦点的表单

  结构性伪类

    index 的值从1开始计数

    index可以为变量n(只能是n)

    index可以为 even odd

      #wrap ele:nth-child(index)  表示匹配#wrap中第index子元素,并且这个子元素必须是ele

      #wrap ele:nth-of-type(index)  表示匹配#wrap中的第index的ele子元素

      除此之外 :nth-child 和 :nth-of-type 有一个很重要的区别 nth-of-type以元素为中心

      :nth-child(index)系列

        :fist-child

        :last-child

        :nth-last-child(index)

        :onth-child(相当于:first-child :last-child 或者 :nth-child(1) :nth-last-child(1)) (两个组合)

      :nth-of-type(index)系列

        :first-of-type

        :last-of-type

        :nth-last-type(index)

        :only-of-type(相当于:first-of-type :last-of-type 或者 :nth-of-type(1) :nth-oast-of-type(1))(两个组合)

      :not  div > a:not(:last-of-type){border-right; 1px solid #ddd;}   a 标签添加右边框,最后一个不加

      :empty (内容必须是空的,有空格都不行,有attr可以)

      :lang  选择带有lang属性的元素添加样式

      :first-line  向文本的首行设置特殊样式

      :first-letter  向文本首字母设置特殊样式

      :before  在元素的内容前面插入新内容

      :after  在元素的内容之后插入新内容

      :selection  选中的元素添加样式

5.css声明的优先级

  选择器的特殊性

    选择器的特殊性由选择器本身的组件确定,特殊性值表述为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.结合符对选择器特殊性没有一点贡献

      6.内联声明的特殊性都是1,0,0,0

      7.继承没有特殊性

      特殊性 1,0,0,0 大于所有以0开头的特殊性

      选择器的特殊性最终都会授予其对应的声明

      如果多个规则与同一个元素匹配,而且有些声明互相冲突时,特殊性越大的越占优势

      注意:id 选择器 和 属性选择器

        div[id='test'](0,0,1,1) 和 test(0,1,0,0)

    重要

      有时某个声明比较重要超过了所有其他声明,css2.1就称之为重要声明,并允许在这些声明的结束分号之前

      插入 !important 来标志,必须要准确的放置 !important 否则声明无效。

      !important 总是要放在声明的最后,即分号的前面

      标志为!important 的声明并没有特殊的特殊性值,不过要与非重要声明分开考虑。

      实际上所有的重要声明会被浏览器分为一组,重要声明的冲突会在其内部解决

      非重要声明会被分为一组,非重要声明的冲突也会在其内部解决

      如果一个重要声明和非重要声明冲突,胜出的总是重要声明 

    继承

      继承没有特殊性

原文地址:https://www.cnblogs.com/zhangning187/p/cssxzq.html