图解css3:核心技术与案例实战. 2.7 UI元素状态伪类选择器

简介:

2.7 UI元素状态伪类选择器

UI元素状态伪类选择器也是CSS3选择器模块组中的一部分,主要用于form表单元素上,以提高网页的人机交互、操作逻辑以及页面的整体美观,使表单页面更具个性与品位,而且使用户操作页面表单更便利和简单。

2.7.1 UI元素状态伪类选择器语法

UI元素的状态一般包括:启用、禁用、选中、未选中、获得焦点、失去焦点、锁定和待机等。在HTML元素中有可用和不可用状态,例如表单中的文本输入框;HTML元素中还有选中和未选中状态,例如表单中的复选按钮和单选按钮。这几种状态都是CSS3选择器中常用的状态伪类选择器,详细说明如表2-11所示。

表2-11 UI元素状态伪选择器语法

选择器     类型         功能描述

E:checked         选中状态伪类选择器     匹配选中的复选按钮或单选按钮表单元素

E:enabled         启用状态伪类选择器     匹配所有启用的表单元素

E:disabled         不可用状态伪类选择器         匹配所有禁用的表单元素

 

2.7.2 浏览器兼容性

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

除了IE浏览器外,各主流浏览器对UI元素状态选择器的支持都非常好,但IE 9也开始全面支持这些UI元素状态伪类选择器(如表2-12所示)。因此,考虑到IE 6~8是国内用户数最多的浏览器,使用UI元素状态伪类选择器需使用特别的方法来处理。

例如使用JavaScript库,选用内置已兼容了UI元素状态伪类选择器的JavaScript库或框架,然后在代码中引入它们并完成想要的效果。由Keith Clark编写的Selectivizr脚本是一个不错的选择。先将该脚本直接引入到页面中,再从7个JavaScript库中选择一个引入,UI元素状态伪类选择器就能够在IE上工作了。

除了使用JavaScript库外,还有一个比较原始而古老的做法,就是在不支持UI元素状态伪类选择器的IE浏览器下使用类名来处理。例如禁用的按钮效果,可以先在HTML标签中添加一个类名“disabled”,就可以在样式中添加样式。

 

.btn.disabled,/*等效于.btn:disabled,用于兼容IE低版本浏览器*/

.btn:disabled {

  …

}

2.7.3 实战体验:Bootstrap的表单元素UI状态

UI元素状态伪类选择器目前主要针对应用在表单元素上,让表单更可用、易用和好用,同时让表单设计更漂亮。这里介绍Twitter的表单元素状态是如何来控制的。

Bootstrap中部分表单元素状态的效果如图2-20所示。

 

图2-20 Bootstrap表单元素状态部分效果

图中展示了表单元素中常用的几种UI状态效果,接着来看其实现代码。

<!DOCTYPE HTML>

<html lang="en-US">

<head>

  <meta charset="UTF-8">

  <title></title>

  <style type="text/css">

/*表单基本样式,请查看对应示例代码*/

/*表单元素获得焦点效果*/

textarea:focus,

input[type="text"]:focus,

input[type="password"]:focus{

  border-color: rgba(82, 168, 236, 0.8);

  outline: 0;

  outline: thin dotted \9;

  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),

                 0 0 8px rgba(82, 168, 236, 0.6);

}

/*表单中下拉选择框、文件控件、单选按钮、复选按钮得到焦点时效果*/

select:focus,

input[type="file"]:focus,

input[type="radio"]:focus,

input[type="checkbox"]:focus {

  outline: thin dotted #333;

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

  outline-offset: -2px;

}

/*禁用的input、select、textarea表单元素效果*/

input[disabled],  /*等效于input:disabled*/

select[disabled], /*等效于select:disabled*/

textarea[disabled]/*等效于textarea:disabled*/

{

  cursor: not-allowed;

  background-color: #eeeeee;

  border-color: #ddd;

}

/*禁用的单选按钮和复选按钮效果*/

input[type="radio"][disabled],   /*等效于input[type="radio"]:disabled*/

input[type="checkbox"][disabled] /*等效于input[type="checkbox"]:disabled*/

{

  background-color: transparent;

}

.control-group.warning > label,

.control-group.warning .help-block,

.control-group.warning .help-inline {

  color: #c09853;

}

/*表单警告状态下效果*/

.control-group.warning .checkbox,

.control-group.warning .radio,

.control-group.warning input,

.control-group.warning select,

.control-group.warning textarea {

  color: #c09853;

  border-color: #c09853;

}

/*表单警告状态下并获得焦点下效果*/

.control-group.warning .checkbox:focus,

.control-group.warning .radio:focus,

.control-group.warning input:focus,

.control-group.warning select:focus,

.control-group.warning textarea:focus {

  border-color: #a47e3c;

  box-shadow: 0 0 6px #dbc59e;

}

.control-group.error > label,

.control-group.error .help-block,

.control-group.error .help-inline {

  color: #b94a48;

}

/*表单错误状态下效果*/

.control-group.error .checkbox,

.control-group.error .radio,

.control-group.error input,

.control-group.error select,

.control-group.error textarea {

  color: #b94a48;

  border-color: #b94a48;

}

/*表单错误状态并获取焦点时效果*/

.control-group.error .checkbox:focus,

.control-group.error .radio:focus,

.control-group.error input:focus,

.control-group.error select:focus,

.control-group.error textarea:focus {

  border-color: #953b39;

  box-shadow: 0 0 6px #d59392;

}

.control-group.success > label,

.control-group.success .help-block,

.control-group.success .help-inline {

  color: #468847;

}

/*表单成功状态下效果*/

.control-group.success .checkbox,

.control-group.success .radio,

.control-group.success input,

.control-group.success select,

.control-group.success textarea {

  color: #468847;

  border-color: #468847;

}

/*表单成功状态于并获得焦点下效果*/

.control-group.success .checkbox:focus,

.control-group.success .radio:focus,

.control-group.success input:focus,

.control-group.success select:focus,

.control-group.success textarea:focus {

  border-color: #356635;

  box-shadow: 0 0 6px #7aba7b;

}

.form-actions {

  padding: 17px 20px 18px;

  margin-top: 18px;

  margin-bottom: 18px;

  background-color: #f5f5f5;

  border-top: 1px solid #e5e5e5;

  *zoom: 1;

}

.form-actions:before,

.form-actions:after {

  display: table;

  content: "";

}

.form-actions:after {

  clear: both;

}

/*按钮基本样式*/

.btn {

  display: inline-block;

  *display: inline;

  /*由于篇幅,基本样式在此省略,详细请查阅随书代码*/

}

.btn:hover,

.btn:active,

.btn.active,

.btn.disabled,/*按钮禁用下效果,等效于.btn:disabled*/

.btn[disabled] {

  background-color: #e6e6e6;

  *background-color: #d9d9d9;

}

.btn:active,

.btn.active {

  background-color: #cccccc \9;

}

 

.btn:first-child {

  *margin-left: 0;

}

.btn:hover {

  color: #333333;

  text-decoration: none;

  background-color: #e6e6e6;

  *background-color: #d9d9d9;

  background-position: 0 -15px;

  -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:focus {

  outline: thin dotted #333;

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

  outline-offset: -2px;

}

.btn.active,

.btn:active {

  background-color: #e6e6e6;

  background-color: #d9d9d9 \9;

  background-image: none;

  outline: 0;

  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),

                      0 1px 2px rgba(0, 0, 0, 0.05);

}

/*表单按钮禁用状态下效果*/

.btn.disabled,/*等效于.btn:disabled*/

.btn[disabled] {

  cursor: default;

  background-color: #e6e6e6;

  background-image: none;

  opacity: 0.65;

  filter: alpha(opacity=65);

  box-shadow: none;

}

...//省略部分代码

注意   以上样式代码摘选于Bootstrap中的表单元素样式(详细内容参见http://twitter.github.com/ bootstrap/base-css.html#forms)。

 

上面案例主要展示的是表单元素得到焦点和禁用两种状态使用方法,在使用UI状态选择器时特别注意,HTML结构中要存在这种状态,例如禁用的输入框,需要在HTML的对应元素上添加禁用属性。

<input class="input-xlarge disabled" id="disabledInput"

        type="text" placeholder="Disabled input here..." disabled="">

相关文章
|
22小时前
|
前端开发
CSS选择器
CSS选择器
|
6天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
6天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
6天前
|
前端开发 JavaScript UED
【专栏:HTML 与 CSS 前端技术趋势篇】Web 性能优化:CSS 与 HTML 的未来趋势
【4月更文挑战第30天】本文探讨了CSS和HTML在Web性能优化中的关键作用,包括样式表压缩、选择器优化、DOM操作减少等策略。随着未来趋势发展,CSS模块系统、自定义属性和响应式设计将得到强化,HTML新特性也将支持复杂组件构建。同时,应对浏览器兼容性、代码复杂度和性能功能平衡的挑战是优化过程中的重要任务。通过案例分析和持续创新,我们可以提升Web应用性能,创造更好的用户体验。
|
6天前
|
移动开发 前端开发 UED
【专栏:HTML与CSS前端技术趋势篇】渐进式增强与优雅降级在前端开发中的实践
【4月更文挑战第30天】前端开发中的渐进式增强和优雅降级是确保跨浏览器、跨设备良好用户体验的关键策略。渐进式增强是从基础功能开始,逐步增加高级特性,保证所有用户能访问基本内容;而优雅降级则是从完整版本出发,向下兼容,确保低版本浏览器仍能使用基本功能。实践中,遵循HTML5/CSS3规范,使用流式布局和响应式设计,检测浏览器特性,并提供备选方案,都是实现这两种策略的有效方法。选择合适策略优化网站,提升用户体验。
|
6天前
|
前端开发 开发者 UED
【专栏:HTML与CSS前端技术趋势篇】网页设计中的CSS Grid与Flexbox之争
【4月更文挑战第30天】本文对比了CSS Grid和Flexbox两种布局工具。Flexbox擅长一维布局,简单易用,适合导航栏和列表;CSS Grid则适用于二维布局,能创建复杂结构,适用于整个页面布局。两者各有优势,在响应式设计中都占有一席之地。随着Web标准发展,它们的结合使用将成为趋势,开发者需掌握两者以应对多样化需求。
|
6天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
6天前
|
前端开发 开发者
【专栏:CSS基础篇】CSS选择器详解:精准定位网页元素
【4月更文挑战第30天】本文介绍了CSS选择器在Web开发中的重要性,详细阐述了基础选择器(元素、类、ID、属性和伪类/伪元素)及复杂选择器(后代、子元素、相邻兄弟和一般兄弟)的用法。通过理解并巧妙运用这些选择器,开发者能更高效地控制页面样式,提高代码的可维护性。CSS预处理器如Sass、LESS进一步增强了选择器的功能,助力创建优雅且强大的样式表,实现精准的网页设计。
|
7天前
|
前端开发 测试技术 持续交付
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
【4月更文挑战第30天】本文探讨了 Flutter 应用中UI测试和自动化测试的重要性,包括保障质量、提高效率和增强开发信心。Flutter提供`flutter_test`库进行Widget测试,以及`flutter_driver`进行集成测试。UI测试涵盖界面布局、交互和状态变化的验证,最佳实践建议尽早引入测试、保持用例简洁,并结合手动测试。未来,随着Flutter技术发展,UI测试和自动化测试将更加完善,助力开发高质量应用。
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
|
7天前
|
前端开发 搜索推荐 UED
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
【4月更文挑战第30天】探索Flutter的高级UI组件,如`TabBar`、`Drawer`、`BottomSheet`,提升应用体验和美观度。使用高级组件能节省开发时间,提供内置交互逻辑和优秀视觉效果。示例代码展示了如何实现底部导航栏、侧边导航和底部弹出菜单。同时,自定义组件允许个性化设计和功能扩展,但也带来性能优化和维护挑战。参考Flutter官方文档和教程,深入学习并有效利用这些组件。
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用