选择器

常用的选择器

  • 元素(标签/简单)选择器--p,h1等、
  • ID选择器--#id名、
  • 类选择器--.类名、
  • 后代选择器(可以将类或者ID应用于它们的祖先,然后使用后代选择器来定位,选择所有后代)--空格连接。

伪类:根据文档之外的其他条件为文档应用样式,如表单元素或链接的状态。

  • :link和:visited称为链接伪类,只能用于锚元素;
  • :hover,:active,:foucs称为动态伪类,理论上适用于任何元素。ie6忽略:foucs,Ie7在任何元素上都支持:hover,忽略:active,:foucs。
  • 值得指出的是,通过把伪类链接在一起,可以创建更复杂的行为,比如在已访问链接和未访问链接上实现不同的鼠标悬停效果。
    /*makes all visited links olive on hover*/
    a:visited:hover { color: olive; }

通用选择器:*

最强大但最少用,在与其他选择器结合使用时,通用选择器可以用来对某个元素的所有后代应用样式,或者跳过一级后代。

高级选择器

1、子选择器(>)

后代选择器选择一个元素的所有后代,子选择器只选择元素的直接后代,即子元素,如下,外层列表中的列表项会显示图标,但是嵌套列表中的列表项不受影响。

<ul id="nav">
    <li><a href="#">Home</a></li>
    <li><a href="#">Service</a>
        <ul>
            <li><a href="#">Design</a></li>
            <li><a href="#">Development</a></li>
            <li><a href="#">Consultancy</a></li>
        </ul>
    </li>
    <li><a href="#">Contact Us</a></li>
</ul><style>
    #nav > li {           
        background: url(folder.png) no-repeat left top;
        padding-left: 20px;
    }
</style>

IE7和更高版本都支持子选择器。但是IE7中有一个小bug,如果父元素和子元素之间有HTM注释,就会出问题。在IE6和更低版本中,可以使用通用选择器模拟子选择器的效果。为此,先在所有后代上应用你希望子元素具有的样式,然后,使用通用选择器覆盖子元素的后代上的样式。上面的效果也可用下面的代码实现:

    #nav li {        /*现在所有后代上应用希望子元素的样式*/
        background: url(folder.png) no-repeat left top;
        padding-left: 20px;
    }
    
    #nav li * {       /*覆盖子元素的后代上的样式*/
        background-image: none;
        padding-left: 0;
    }

2、相邻同胞选择器(+)

可选择紧接在某一元素后的元素,且二者有相同父元素。与子选择器一样,如果在目标元素之间有注释,这在IE7中也会出现问题。

如下:接在h2后面的第一个p的会被应用样式

<h2>Peru Celebrates Guinea Pig festival</h2>
<p>The guinea pig festival in Peru </p>
<p>Guinea pigs can be fried</p>
<style>
h2 + p {
    font-size: 1em;
  font-weight: bold;
    color: #777;
}
</style>

3、属性选择器([])

属性选择器可以根据某个属性是否存在或属性的值来寻找元素,因此能够实现某些非常有意思和强大的效果。

/*根据某个属性是否存在应用样式*/
acronym[title]{
/*对具有title的acronym应用样式*/
}

/*根据属性值应用样式*/
a[rel="nofollow"]{
/*对rel值为nofollow的a应用样式*/
}

/*根据属性值之一寻找元素*/
a[rel~="co-worker"] {
/*对rel值有一个为co-worker的a应用样式*/
}

4、层叠和特殊性

同一个元素可能有两个或者更多规则,CSS通过一个称为层叠的过程处理这样的冲突。

CSS层叠的重要度次序如下:

  1. 标有!important的用户样式(浏览网页的用户自己设置的样式)
  2. 标有!important的作者样式(作者样式是有站点开发者编写)
  3. 作者样式
  4. 用户样式
  5. 浏览器/用户代理应用的样式(浏览器自己定义的默认样式)

具有更加特殊性选择器的规则优先于具有一般选择器的规则,如果两个规则的特殊性相同,那么后定义的规则优先。(可以通过将任何规则指定为!important来提高它的重要度,让它优先于任何规则,甚至优先于作者加上的!important标志的规则。)

特殊性

为计算规则的特殊性,每种选择器都有一个数字值,将规则的每个选择器的值加在一起,就可以计算出规则的特殊性。

4个等级的定义如下:

  1. 第一等:代表内联样式,如: style=””,权值为1000。
  2. 第二等:代表ID选择器,如:#content,权值为100。
  3. 第三等:代表类,伪类和属性选择器,如.content,权值为10。
  4. 第四等:代表类型选择器和伪元素选择器,如div,权值为1。

注意:通用选择器(*),子选择器(>)和相邻同胞选择器(+)并不在这四个等级中,所以他们的权值都为0。

可通过在主体标签上添加类或ID来应用特殊性

继承

元素后代继承父元素的某些属性。

如果在主体设置字号,页面上的任何标题都没有采用此样式。不是因为标题没有继承文本字号,而是浏览器的默认样式表设置了标题字号。继承而来的样式特殊性为空,所以直接应用于元素的任何样式总会覆盖继承而来的样式。

 CSS 权重优先级顺序简单表示为:

!important > 行内样式 > ID > 类、伪类、属性 > 标签名 > 继承 > 通配符

属性继承

可继承的属性:font-size, font-family, color

不可继承的样式:border, padding, margin, width, height

原文地址:https://www.cnblogs.com/lmjZone/p/7880283.html