W3C DOM2样式规范

现在这边贴出本章要的源代码,注意要结合前面用到的ADS库http://vdisk.weibo.com/s/Dq8NU

  • CSSStyleSheet对象属性:
  1. type :始终是txt/css
  2. disabled:是否被禁用
  3. href URL
  4. title :分组样式表的标签
  5. media:样式表应用的目标设备类型,如screen、print
  6. ownerRule : 制度的CSSRule对象,如果样式表是使用@import等类似方式导入的,该属性即表示其父规则
  7. inserRule(rule,index): 用于添加新的样式声明
  8. deleteRule(index):从演示表中移出规则
  • CSSStyleRule对象属性:
  1. type 继承自CSSRule对象的一个属性
  2. cssText
  3. parentStyleSheet
  4. parentRule
  5. selectorText
  6. style
  • CSSStyleDeclaration对象属性:
  1. cssText
  2. parentRule
  3. getPropertyValue
  4. removeProperty(propertyName)
  5. removeProperty(propertyName)
  6. setProperty(propertyName,value,priorty)

当DOM脚本遇到样式

  • 为应用样式而改动标记

我们最终的标记应该是:

  1. 对屏幕阅读器而言是可访问的
  2. 当禁用图像而CSS有效时是可以理解的
  3. 维护与访问性相关的特性,如alt和title属性。
  4. 避免使用不必要的标记--如果可能的话

CSS图像替换经典技术为FIR

<h2 id="advancedHeader"><span>Advanced DOM Scripting</span></h2>
/* 为父元素添加背景图像*/
#advancedHeader {
border:; padding:; /* remove styleing from other style sheets */ height:60px;
background: transparent url(http://advancedDOMScripting.com/images/advancED-replace.png) no-repeat;
}
/* 隐藏文本 */
#advancedHeader span {
display:none;
}

但是这种方法存在两个问题:

  1. 如果禁用图像,则什么都不会显示,因为span仍旧被隐藏着
  2. display:none属性会对支持CSS的屏幕阅读器隐藏内容,从而完全破坏了推昂替换中的可访问性原则

Dwyer方法(使用0尺寸的附加span标签,但是它在CSS有效而凸显禁用的情况下仍然不具有可访问性)

/* 为父元素添加背景图像*/
#advancedHeader {
border:; padding:; /* remove styleing from other style sheets */ height:60px;
background: transparent url(http://advancedDOMScripting.com/images/advancED-replace.png) no-repeat;
}
/*使用0尺寸的盒子隐藏文本*/
#advancedHeader span {
display:block;
width:;
height:;
overflow:hidden;
}

Phark方法(不需要额外的标签,而是使用负文本缩进来隐藏内容, 但是这种方法在CSS有效而图像被禁用的情况下还是会损坏可访问性)

/* 使用背景图像和负文本缩进隐藏文本 */
#advancedHeader {
border:; padding:; /* remove styleing from other style sheets */ text-indent: -100em;
overflow:hidden; height:60px;
background: transparent url(http://advancedDOMScripting.com/images/advancED-replace.png) no-repeat;
}

应外一种方法Shea方法仍然附加了<span>

<h2 id="advancedHeader" title="Advanced DOM Scripting">
<span></span>Advanced DOM Scripting
</h2>

但是这个方法没有隐藏文本,而是将带有实心不透明的背景图像的<span>元素,定位在了文本的上方,从而达到了遮盖文本的目的

/*父元素使用想对定位,子元素使用绝对定位*/
#advancedHeader {
border:; padding:; /* remove styleing from other style sheets */
height:60px;
position:relative;
}
/* 通过在绝对定位的span元素上使用不同命的毕竟隐藏文本 */
#advancedHeader span {
background: transparent url(http://advancedDOMScripting.com/images/advancED-replace.png) no-repeat;
display:block;
width:100%;
height:100%;
position:absolute;
}
  • 去掉额外的标记
/*图像被禁用的情况下为文本添加的样式 */
#advancedHeader {
color: #1A5B9D;
} /* 根据图像设置标题的大小*/
#advancedHeader.advancED {
border:; padding:; height:60px;
position:relative;
overflow:hidden;
}
/* 使用不透明图像隐藏文本*/
#advancedHeader.advancED span {
background: white url(http://advancedDOMScripting.com/images/advancED-replace.png) no-repeat;
display:block;
width:100%;
height:100%;
position:absolute; }

为了让页面更加有吸引力,在load事件会向标题元素加入额外的<span>标签,以及额外的.advanceED类名:

ADS.addEvent(window, 'load', function() {
// 取得标题
var header = ADS.$('advancedHeader');
//创建图像元素
var image = document.createElement('IMG'); //当图像载入成功后在添加span和类名
ADS.addEvent(image, 'load', function() { var s = document.createElement('SPAN');
// 将span添加为标题的子元素
ADS.prependChild(header,s); // 创建必要的title属性
if(!header.getAttribute('title')) {
var i, child;
var title = '';
//循环遍历子元素以组合title属性
for(i=0 ; child = header.childNodes[i] ; i++ ) {
if(child.nodeValue) title += child.nodeValue;
}
header.setAttribute('title',title);
}
// 修改类名称以标明变更并应用CSS
header.className = 'advancED';
}); // 载入图像
// 这种硬编码的方式并不理想
// 本意后面还将讨论这点
image.src = 'http://advancedDOMScripting.com/images/image-replace.png'; });

添加额外得累对于页面退化和保持整洁非常重要

另外说一句。其实本章我看的也是迷迷糊糊^ ^;

JavaScript DOM高级程序设计 5动态修改样式和层叠样式表1(源代码)--我要坚持到底!的更多相关文章

  1. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!

    把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...

  2. JavaScript DOM 高级程序设计读书笔记二

    响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...

  3. JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!

    对象事件 load和unload(载入页面的时候调用load,关闭页面的时候调用unload) abort和error 对于载入图像时出现错误的情况,可以使用error事件侦听器来进行说明: ADS. ...

  4. JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!

    一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...

  5. JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!

    作为一名Web开发者,最讨厌的事情就是重复性任务,摆脱乏味的日常重复性事物的一种方法,是借助可重用的对象或者说与你现在建立的ADS库类似的库,另外一种让事情变得有意思,且能够加速开发进程的方式是编写能 ...

  6. JavaScript DOM高级程序设计1.2-循序最佳实践--我要坚持到底!

    我这人,最大的毛病就是浮躁. 下面开始我再一次的学习之旅,希望我能坚持到最后.记笔记除了分享以外,更重要的是让自己看见自己学习之路. 先把ADS库贴出来http://vdisk.weibo.com/s ...

  7. JavaScript DOM 高级程序设计读书笔记一

    创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...

  8. JavaScript DOM高级程序设计 7.向应用程序加入Ajax--我要坚持到底!

    有时候,或许是因为理解能力,也或许是因为浮躁,看东西总是不入心,而且还老是想跳过本节,或者赶紧看完本节,这样的恶性循环,让我在即没有真正的学习到知识,又打击我的学习信心,还浪费了我很多事件,我想,当遇 ...

  9. JavaScript DOM高级程序设计 3.-DOM2和HTML2--我要坚持到底!

    由一个HTML进行说明,我就不敲了,直接copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...

随机推荐

  1. 使用XFire+Spring构建Web Service

    XFire是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用. 相 对于Axis来说,目 ...

  2. Natural Language Processing with Python - Chapter 0

    一年之前,我做梦也想不到会来这里写技术总结.误打误撞来到了上海西南某高校,成为了文科专业的工科男,现在每天除了膜ha,就是恶补CS.导师是做计算语言学的,所以当务之急就是先自学计算机自然语言处理,打好 ...

  3. 1076. Forwards on Weibo (30)

    时间限制 3000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Weibo is known as the Chinese v ...

  4. android include中的控件调用

    项目中经常会有一些布局是重用的,但是如何来更好的利用这些布局中的控件 转: http://zhidao.baidu.com/link?url=GU93U8Wu31dfp7mKEx52hMJkxjFLC ...

  5. (转)《深入理解java虚拟机》学习笔记9——并发编程(一)

    随着多核CPU的高速发展,为了充分利用硬件的计算资源,操作系统的并发多任务功能正变得越来越重要,但是CPU在进行计算时,还需要从内存读取输出,并将计算结果存放到内存中,然而由于CPU的运算速度比内存高 ...

  6. Button控件

    1.通过设置AutoSize(bool)属性来控制按钮的大小以适应文本的长度 btn_One.AutoSize = true;//设置按钮基于内容自动调整大小 2.当按钮得到焦点是自动放大,失去焦点时 ...

  7. ios 下引用第三方类库报错

    在最近刚接触的ios的一个项目中用到了腾讯的登录sdk,从git下下来之后编译报错,找不到文件,文件明明已经加入到项目中,为何找不到,由于刚接触ios开发,所有不知道什么原因,经过Google才知道 ...

  8. js模拟触发事件

     html标签元素封装着实用的[事件],但在很多时候,需要[模拟触发事件],比如 [按钮单机事件]  可以实实在在点击按钮触发该事件,但体验而言,很多时候需要js逻辑处理让实现 触发事件的效果这时就用 ...

  9. Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  10. iOS sqlite 增删改查 简单封装(基于 FMDB)

    /** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...