图解css3:核心技术与案例实战. 2.4 动态伪类选择器

简介:

2.4 动态伪类选择器

伪类选择器对于大家来说最熟悉的莫过于“:link”、“:visited”、“:hover”、“:active”,因为这些是大家平时常用到的伪类选择器。而CSS3的伪类选择器可以分成六种:动态伪类选择器、目标伪类选择器、语言伪类选择器、UI状态伪类选择器、结构伪类选择器和否定伪类选择器。

伪类选择器语法书写时和其他的CSS选择器写法有所区别,都以冒号(:)开头。例如:

E:pseudo-class {property:value}

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

CSS3伪类选择器有什么功能?选定元素能带来什么便利?带着这些问题,依次学习CSS3伪类选择器的使用方法,首先是动态伪类选择器。

2.4.1 动态伪类选择器语法

动态伪类早在CSS中就有,其并不是CSS3才有的,动态伪类并不存在于HTML中,只有当用户和网站交互的时候才能体现出来。动态伪类包含两种,第一种是在链接中常看到的锚点伪类,另一种为用户行为伪类。其详细说明如表2-5所示。

表2-5 动态伪类选择器语法

选择器     类型         功能描述

E:link         链接伪类选择器     选择匹配的E元素,而且匹配元素被定义了超链接并未被访问过。常用于链接锚点上

E:visited   链接伪类选择器     选择匹配的E元素,而且匹配元素被定义了超链接并已被访问过。常用于链接锚点上

E:active    用户行为伪类选择器     选择匹配的E元素,且匹配元素被激活。常用于锚点与按钮上

E:hover    用户行为伪类选择器     选择匹配的E元素,且用户鼠标在停留在元素E上。IE 6及以下浏览器仅支持a:hover

E:focus     用户行为伪类选择器     选择匹配的E元素,且匹配的元素获得焦点

 

意     锚点伪类的设置必须遵守一个“爱恨原则”LoVe/HAte,也就是“link-visited-hover-active”。另外,在 IE 6、IE 7(Q)、IE 8(Q) 中,a:hover、a:active 和 a:visited 并没有按照规范描述的算法来计算它们的针对性,而是根据链接的实际状态来决定使用哪个规则集里的声明。它们三个的针对性比 a:link 强,详细参阅 http://www.w3help.org/zh-cn/causes/RS3005。

 

2.4.2 浏览器兼容性

浏览器兼容性如表2-6所示。

表2-6 动态伪类选择器浏览器兼容性

选择器                                         

选择器                                         

E:link         √     √     √     √     √

E:visited           √     √     √     √     √

E:active    8 +√        √     √     √     √

E:hover    √     √     √     √     √

E:focus     8 +√        √     √     √     √

 

意     E:hover在IE 6浏览器中仅支持链接锚点a:hover。

 

2.4.3 实战体验:美化按钮

在众多网站上按钮在不同状态下效果不一,用以增强用户体验,这也是一种非常好的设计体验与细节。实现并不复杂,下面一起来看Twitter的Bootstrap如何美化按钮。

实现页面中按钮在不同行为状态下的样式风格,常见的行为状态如默认状态、悬浮状态、用户点击时状态和按钮获得焦点状态。

通过Twitter的Bootstrap制作的按钮效果如图2-14所示。

根据用户的行为不同,按钮效果可以分为:默认状态、悬浮状态、点击时状态、焦点状态和点击后状态,可以按照CSS3的动态伪选择器,在不同状态下给按钮赋予不同的样式风格。

根据这一设计思路,可以轻松美化按钮,看下面的示例代码,演示的效果如图2-14所示。

<!DOCTYPE HTML>

<html lang="en-US">

<head>

  <meta charset="UTF-8">

  <title>使用动态伪类选择器美化按钮</title>

  <style type="text/css">

    .download-info {

      text-align: center;

    }

    /*默认状态下的按钮效果*/

    .btn {

      background-color: #0074cc;

      *background-color: #0055cc;

      /*CSS3渐变制作背景图片*/

      background-image: -ms-linear-gradient(top, #0088cc, #0055cc);

      background-image: -webkit-gradient(linear, 0 0, 0 100%,

                                               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: 1px solid #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;

      text-align: center;

      /*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-decoration: none;

      text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);

      /*CSS3动画效果*/

      -webkit-transition: background-position 0.1s linear;

      -moz-transition: background-position 0.1s linear;

      -ms-transition: background-position 0.1s linear;

      -o-transition: background-position 0.1s linear;

      transition: background-position 0.1s linear;

    }

    /*点击时按钮效果*/

    .btn:active {

      background-color: #0055cc;

      *background-color: #004ab3;

      background-color: #004099 \9;

      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.05);

      color: rgba(255, 255, 255, 0.75);

    }

    /*获得焦点按钮效果*/

    .btn:focus {

      outline: thin dotted #333;

      outline: 5px auto -webkit-focus-ring-color;

      outline-offset: -2px;

    }

  </style>

</head>

<body>

  <div class="download-info">

    <a href="#" class="btn">View project on GitHub</a>

  </div>

</body>

</html>

这个美化按钮实例涉及一些CSS3的特性,此时不懂不要害怕,本书后续章节中会为大家逐一介绍。在此例中只需要知道哪些属性是CSS3的特性就足够了。同时实例中采用了“渐进增强,优雅降级”,在不支持CSS3的浏览器中,同样可以看到按钮在不同状态下的效果,只是失去了渐变、阴影等效果,但并不影响网站的功能与用户的体验,IE 8下的效果如图2-15所示。

相关文章
|
5天前
|
前端开发 UED
CSS 支持伪类和伪元素,可用于指定文档中不同状态的样式
CSS 提供关键帧和过渡动画两种方式创建动态效果。关键帧动画通过定义一系列样式的关键帧,浏览器自动插入过渡帧形成动画,如示例中背景颜色变化的循环。过渡动画则在属性改变时(如鼠标悬停)触发,展示平滑转换,如 div 元素尺寸变化。通过调整帧时间、顺序和样式,可实现更复杂的动画,增强网站交互体验。
24 4
|
12天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
12天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
12天前
|
前端开发 JavaScript UED
【专栏:HTML 与 CSS 前端技术趋势篇】Web 性能优化:CSS 与 HTML 的未来趋势
【4月更文挑战第30天】本文探讨了CSS和HTML在Web性能优化中的关键作用,包括样式表压缩、选择器优化、DOM操作减少等策略。随着未来趋势发展,CSS模块系统、自定义属性和响应式设计将得到强化,HTML新特性也将支持复杂组件构建。同时,应对浏览器兼容性、代码复杂度和性能功能平衡的挑战是优化过程中的重要任务。通过案例分析和持续创新,我们可以提升Web应用性能,创造更好的用户体验。
|
12天前
|
移动开发 前端开发 UED
【专栏:HTML与CSS前端技术趋势篇】渐进式增强与优雅降级在前端开发中的实践
【4月更文挑战第30天】前端开发中的渐进式增强和优雅降级是确保跨浏览器、跨设备良好用户体验的关键策略。渐进式增强是从基础功能开始,逐步增加高级特性,保证所有用户能访问基本内容;而优雅降级则是从完整版本出发,向下兼容,确保低版本浏览器仍能使用基本功能。实践中,遵循HTML5/CSS3规范,使用流式布局和响应式设计,检测浏览器特性,并提供备选方案,都是实现这两种策略的有效方法。选择合适策略优化网站,提升用户体验。
|
12天前
|
前端开发 开发者 UED
【专栏:HTML与CSS前端技术趋势篇】网页设计中的CSS Grid与Flexbox之争
【4月更文挑战第30天】本文对比了CSS Grid和Flexbox两种布局工具。Flexbox擅长一维布局,简单易用,适合导航栏和列表;CSS Grid则适用于二维布局,能创建复杂结构,适用于整个页面布局。两者各有优势,在响应式设计中都占有一席之地。随着Web标准发展,它们的结合使用将成为趋势,开发者需掌握两者以应对多样化需求。
|
12天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
12天前
|
前端开发 UED
【专栏:HTML与CSS实战项目篇】创建一个具有复杂布局的电商详情页
【4月更文挑战第30天】构建复杂布局的电商详情页涉及页面结构规划、样式设计和交互效果实现。首先规划顶部导航栏、商品图片展示区、商品信息区、用户评价区和相关商品推荐区。在样式设计上,注重色彩搭配、字体选择、布局与间距及图片处理。交互效果包括图片放大、添加到购物车按钮、滚动监听和评论互动,以提升用户体验。实际开发中需考虑跨设备兼容性和用户体验优化。
|
12天前
|
移动开发 前端开发 JavaScript
【专栏:HTML与CSS实战项目篇】使用HTML5与CSS3制作一个动态表单验证页面
【4月更文挑战第30天】本文介绍了使用HTML5和CSS3创建动态表单验证页面的方法。首先,简述HTML5用于构建网页内容,CSS3用于描述样式。接着,分四步展示实现过程:1) 设计包含输入框和提示信息的表单结构;2) 使用CSS3创建样式,增强视觉效果;3) 使用JavaScript监听输入事件,动态验证表单并显示错误信息;4) 测试和调试确保跨平台兼容性。通过学习,开发者能掌握创建带验证功能的表单,提升用户体验。
|
12天前
|
编解码 前端开发 JavaScript
【专栏:HTML与CSS实战项目篇】打造一个动态新闻网站
【4月更文挑战第30天】构建动态新闻网站,运用HTML和CSS提升编程技能和网页设计理解。项目包括首页、新闻列表页和详情页,设计简洁易用,包含顶部导航、轮播图和新闻列表。页面布局注重吸引力和易用性,色彩搭配选用冷色调为主,辅以亮色点缀。字体选择清晰易读,布局保持整洁。交互效果如轮播图、导航栏高亮和响应式设计增强用户体验。本文提供基础新闻网站构建指南,为进一步功能扩展和优化打下基础。