• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: css 中文手册 -> css 选择器

    css 动态伪类选择器

    动态伪类是一类行为类样式,这些伪类并不存在于HTML中,只有当用户与页面进行交互时才能体现出来。

    • :link 超链接点击之前
    • :visited 链接被访问过之后
    • :hover “悬停”:鼠标放到标签上的时候
    • :active “激活”: 鼠标点击标签,但是不松手时。

    PS:以上样式,只能用于超链接a标签。

    动态伪类选择器为伪类选择器的一种,其语法如下:

    E:pseudo-class{property:value}

    其中E为HTML中的元素,pseudo-class是CSS的伪类选择器名称,property是CSS的属性, value为CSS属性值。

    动态伪类并不存在于HTML中,只有当用户和网站交互的时候才能体现出来。动态伪类包含两种,第一种是在链接中常看到的锚点伪类,另一种为用户行为伪类。

    除了E:active需要IE8和以上版本支持外,其他的动态伪类选择器所有浏览器都支持。

    用如下代码测试动态伪类选择器,实现按钮在被选中和点击时候的效果:

    <!doctype html>
    <html lang="en-us">
    <head>
    <meta charset="utf-8">
    <title>使用动态伪类选择器美化按钮</title>
    <styletype="text/css">
    .download-info{
    text-align:center;
    }
    /*默认状态下的按钮效果*/
    .btn{
    background-color:#0074cc;
    *background-color:#0055cc;
    /*css渐变制作背景图片*/
    background-image:-ms-linear-gradient(top,#0088cc,#0055cc);
    background-image:-webkit-gradient(linear,0,0,0100%,from(#0088cc),to(#0055cc));
    background-image:-webkit-linear-gradient(top,#0088cc,#0055cc);
    background-image:-o-linear-gradient(top,#0088cc,#0055cc);
    background-image:-moz-linear-gradient(top,#0088cc,#0055cc);
    background-image:linear-gradient(top,#0088cc,#0055cc);
    background-repeat:repeat-x;
    display:inline-block;
    *display:inline;
    border:1pxsolid#cccccc;
    *border:0;
    border-color:#ccc;
    /*css3的色彩模块*/
    border-color:rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25);
    border-radius:6px;
    color:#ffffff;
    cursor:pointer;
    font-size:20px;
    font-weight:normal;
    filter:progid:dximagetransform.microsoft.gradient(startcolorstr='#0088cc',endcolorstr='#0055cc',gradienttype=0);
    filter:progid:dximagetransform.microsoft.gradient(enabled=false);
    line-height:normal;
    padding:14px,24px;
    /*css3文字阴影特性*/
    text-shadow:0 -1px 0 rgba(0,0,0,0.25);
    text-decoration:none;
    vertical-align:middle;
    *zoom:1;
    
    }
    
    /*悬浮状态下按钮效果*/
    .btn:hover{
    background-position:0-15px;
    background-color:#0055cc;
    *background-color:#004ab3;
    color:#ffffff;
    text-shadow:0,-1px0rgba(0,0,0,0.25);
    /*css3动画效果*/
    -webkit-transition:background-position0.1slinear;
    -moz-transition:background-position0.1slineaar;
    -ms-transition:background-position0.1slinear;
    -0-transition:background-position0.1slinear;
    transition:background-position0.1slinear;
    }
    
    /*点击时按钮效果*/
    .btn:active{
    background-color:#0055cc;
    *background-color:#004ab3;
    background-color:#0040999;
    background-image:none;
    outline:0;
    /*css3盒子阴影特性*/
    box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.15);
    color:rgba(255,255,255,0.75);
    }
    /*获得焦点按钮效果*/
    .btn:focus{
    outline:thindotted#333;
    outline:5px auto-webkit-focus-ring-color;
    outline-offset:-2px;
    }
    </style>
    </head>
    <body>
    <div class="download-info">
    <ahred="#"class="btn">viewprojectongithub</a>
    </div>
    </body>
    </html>

    显示效果如下(使用的是.btn默认样式):


    当光标放在按钮上的时候的效果(使用的是.btn:hover时候的样式):

    当按钮被点击时候的效果(使用的是.btn:active对应的样式):

    爱恨原则(LoVe/HAte):

    锚点伪类的设置必须遵守一个“爱恨原则”LoVe/HAte, 也就是link-visited-hover-active.(L-V-H-A),另外在IE6, IE7, IE8中a:hover, a:active, a:visited并没有按照规范描述的算法来计算它们的针对性(specificity),

    而是根据链接的实际状态来决定使用哪个规则集里面的声明。

    IE6 IE7(Q) IE8(Q) 中 A 元素的 :visited :hover :active 伪类未按规范要求的算法来计算针对性