目录

  1. CSS3中属性选择器
  2. CSS3中结构伪类选择器
  3. UI元素状态伪类选择器
  4. 其它新增选择器

1 .CSS3中属性选择器

选择器(Selector,也译为选择符)是W3C在CSS 3工作草案中独立引入的一个概念(请参阅http://www.w3.org/TR/css3-selectors/)。实际上,在CSS 1和CSS 2已经非系统性地定义了很多常用选择器, 这些选择器基本上能够满足Web设计师常规的设计需求。

属性选择器 说明
E[attr] 只使用属性名,但没有确定任何的属性值
E[attr="value"] 指定属性名称,并指定了该属性的属性值
E[attr~="value"] 指定属性名,并且具有属性值,此属性值是一个词列表,并且以空格隔开,其中词列表中包含了一个value值。
E[attr^="value"] 指定了属性名,并且有属性值,属性值是以value开头
E[attr$= "value"] 指定了属性名,并且拥有属性值,而且属性值是以value结束的
E[attr*= "value"] 指定了属性名,并且有属性值,而且属性值包含了value
E[attr I = "value"] 指定了属性名,并且属性值是value或者以”value-”开头的指(zh-cn)

CSS 3遵循了惯用的编码规则,选用了^、3和*这3个通用匹配运算符,其中,^表示匹配起始符,表示匹配终止符,* 表示匹配任意字符,使用它们更符合编码习惯和惯用编程思维。

浏览器兼容情况

练习1. 百度文库图标
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>
            百度文库图标
        </title>
        <style>
            p{
                height: 40px;
                line-height: 40px;
                border: 1px solid black;
            }
            p a{
                font-size: 12px;
                font-family: "微软雅黑";
                background: url(img/ppt.gif) no-repeat;
                padding-left: 20px;
            }
            p a[href*=doc]{
                background: url(img/w.gif) no-repeat;
            }
            p a[href*=text]{
                background: url(img/text.gif) no-repeat;
            }
        </style>
    </head>
    <body>
        <p>
            <a href="http//:www.xiandai.com/doc/javascript.html">doc</a>
        </p>
        <p>
            <a href="http//:www.xiandai.com/ppt/javascript.html">ppt</a>
        </p>
        <p>
            <a href="http//:www.xiandai.com/text/javascript.html">text</a>
        </p>
        <p>
            <a href="http//:www.xiandai.com/ex/javascript.html">Ex</a>
        </p>
    </body>
</html>

2. CSS3中结构伪类选择器

结构伪类(Structural pseudo-classes) 是CSS 3新增的类型选择器。顾名思义,结构伪类就是利用文档结构树(DOM)实现元素过滤,也就是说,通过文档结构的相互关系来匹配 特定的元素,从而减少文档内对class属性和I D属性的定义,使得文档更加简洁。

结构伪类选择器 说明
E:nth-child(n) 表示E父元素中的第n个子节点且节点类型是E, p:nth-child(odd):匹配奇数行, p:ntn-child(even):匹配偶数行,p:nth-child(2n):匹配2的倍数
E:nth-last-child(n) 表示E元素中的第n个子节点且节点类型是E,从后往前计算
E:nth-of-type(n) 表示E父元素中E元素的第n个子节点
E:empty() 表示E元素中没有子节点。注意:子节点包含文本节点
E:first-child 表示E元素中的第一个子节点
E:last-child 表示E元素中的第二个子节点
E:first-of-type 表示E父元素中E元素的第一个子节点
E:last-of-type 表示E父元素中最后一个子节点且节点类型是E
E:only-child 表示E父元素中只有一个子节点。子节点不包含文本节点
E:only-of-type 表示E的父元素中只有一个子节点,且这唯一的子节点的类型必须是E。子节点不包含文本节点
练习2:新浪的头部导航
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>新浪的头部导航</title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            a{
                text-decoration: none;
                color: #666;
            }
            .list{
                list-style: none;
            }
            .list li{
                float: left;
                width: 10%;
                text-align: center;
                border-right: 1px solid #ddd;
                padding: 10px;
            }
            .list li a:nth-child(4n+1){
                font-weight: bold;
            }
            .list li:last-child{
                border-right: none;
            }
            .list li a {
                font-size: 12px;
                width: 23%;
                display: inline-block;
            }
            .list li a:hover{
                color: #1E9FFF;
            }
        </style>
    </head>
    <body>
        <ul class="list">
            <li>
                <a href="#">新闻</a>
                <a href="#">军事</a>
                <a href="#">社会</a>
                <a href="#">国际</a>
                <a href="#">财经</a>
                <a href="#">股票</a>
                <a href="#">基金</a>
                <a href="#">外汇</a>
                <a href="#">科技</a>
                <a href="#">手机</a>
                <a href="#">探索</a>
                <a href="#">众测</a>
            </li>
            <li>
                <a href="#">体育</a>
                <a href="#">NBA</a>
                <a href="#">英超</a>
                <a href="#">中超</a>
                <a href="#">娱乐</a>
                <a href="#">明星</a>
                <a href="#">电影</a>
                <a href="#">星座</a>
                <a href="#">汽车</a>
                <a href="#">报价</a>
                <a href="#">买车</a>
                <a href="#">新车</a>
            </li>
            <li>
                <a href="#">新闻</a>
                <a href="#">军事</a>
                <a href="#">社会</a>
                <a href="#">国际</a>
                <a href="#">财经</a>
                <a href="#">股票</a>
                <a href="#">基金</a>
                <a href="#">外汇</a>
                <a href="#">科技</a>
                <a href="#">手机</a>
                <a href="#">探索</a>
                <a href="#">众测</a>
            </li>
            <li>
                <a href="#">体育</a>
                <a href="#">NBA</a>
                <a href="#">英超</a>
                <a href="#">中超</a>
                <a href="#">娱乐</a>
                <a href="#">明星</a>
                <a href="#">电影</a>
                <a href="#">星座</a>
                <a href="#">汽车</a>
                <a href="#">报价</a>
                <a href="#">买车</a>
                <a href="#">新车</a>
            </li>
            <li>
                <a href="#">新闻</a>
                <a href="#">军事</a>
                <a href="#">社会</a>
                <a href="#">国际</a>
                <a href="#">财经</a>
                <a href="#">股票</a>
                <a href="#">基金</a>
                <a href="#">外汇</a>
                <a href="#">科技</a>
                <a href="#">手机</a>
                <a href="#">探索</a>
                <a href="#">众测</a>
            </li>
        </ul>
    </body>
</html>

3. UI元素状态伪类选择器

UI元素状态伪类(The UI element states pseudo-classes)也是CSS 3新增的全新类型选择器。其中UI是User Interface(用户界面)的简写,UI设计是指网页的人机交互、操作逻 辑、界面美观的整体设计。优秀的UI设计不仅是让网页更具个性和品位,还要让网页操作变得便利和简单,充分体现网站的定位和特点。

UI元素的状态一般包括:可用、不可用、选中、未选中、获取焦点、失去焦点、锁定、待机等。CSS 3定义了3种常用的状态伪类选择器。

UI元素伪类选择器 说明
E:target 表示当前URL片段的元素类型,这个元素必须是E
E:disable 表示不可点击的表单控件
E:enable 表示可点击的表单控件
E:checked 表示已选中的checkbox或radio
E:first-line 表示E元素中的第一行
E:first-letter 表示E元素中的第一个子符
E::selection 表示E元素在用户选中文字时
E:before 表示E生成内容在E元素之前
E:after 表示E生成内容在E元素后
练习1:target实现选项卡切换
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>target实现选项卡切换</title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            div{
                width: 100px;
                height: 100px;
                border: 1px solid #ddd;
                text-align: center;
                line-height: 100px;
                display: none;
            }
            div:target{
                display: block;
            }
        </style>
    </head>
    <body>
        <a href="#div1">div1</a>
        <a href="#div2">div2</a>
        <a href="#div3">div3</a>
        <div id="div1">1</div>
        <div id="div2">2</div>
        <div id="div3">3</div>
    </body>
</html>
练习2: 利用类型为radio实现选项卡
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>利用input类型为radio实现选项卡</title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            label{
                float: left;
                width: 50px;
                position: relative;
                margin-right: 5px;
            }
            label input{
                position: absolute;
                left: -500px;
                top: -500px;
            }
            label span{
                float: left;
                width: 50px;
                text-align: center;
                height: 50px;
                line-height: 50px;
                border: 1px solid #ddd;
                cursor: pointer;
            }
            label input:checked~span{
                background: #1E9FFF;
            }

        </style>
    </head>
    <body>
        <label>
            <input type="radio" name="tabs" id="tabs" value="" />
            <span>选项1</span>
        </label>
        <label>
            <input type="radio" name="tabs" id="tabs" value="" />
            <span>选项1</span>
        </label>
        <label>
            <input type="radio" name="tabs" id="tabs" value="" />
            <span>选项1</span>
        </label>
    </body>
</html>
练习5:利用和实现对话框小三角
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>三角形跟矩形组合成提示框</title>
        <style type="text/css">
            *{
                margin: 100px;
                padding: 0;
            }
            #demo{
                width: 100px;
                height: 100px;
                background-color: #fff;
                position: relative;
                border: 4px solid #000;
            }
            #demo:after,#demo:before{
                border: solid transparent; 
                content: ' '; 
                height: 0; 
                left: 100%; 
                position: absolute; 
                width: 0;
            }
            #demo:after {
                border-width: 14px;
                border-left-color: #fff;
                top: 15px;
            }

            #demo:before {
                border-width: 18px;
                border-left-color: #000;
                top: 11px;
            }
        </style>
    </head>
    <body>
        <div id="demo">

        </div>
    </body>
</html>