腾讯网无障碍前端架构说明
前端开发
W3C要求
- 必须有DOCTYPE
- 必须指定字符编码
语言
线性阅读
- 不以表格作为布局使用
- 采用定位的时候,将css去除,查看内容的阅读顺序是否符合有意义
焦点与键盘
- 禁止移除焦点
- 不可禁用键盘操作
本来已经不想写了,因为年纪越大,越懒得动笔,不过看到各种各样的帖子之后,很想跟所谓的新人和非新人,写点东西,算是共勉吧。
对于刚参加工作的人,我最想说的一个词是煎熬,如果你有上进心或者有责任心的话,这个词,其实很形象,许多刚参加工作的人,可能最早碰到的感觉就如同煎熬一般,非常的不适应工作的状态,当然现在也有很多人,一进入工作中,就一点也没有这种感觉,因为他们不在乎,什么事情都无所谓,自然也就不会有煎熬的感觉。
我自己参加工作的时候,煎熬两个词对于我而言似乎经常提起,刚参加工作的时候,我见人就在犹豫不知道该怎么称呼他们,生怕叫错了称呼,给人印象不好,每天第一个到单位,拖地扫厕所,碰到什么事情,第一个就去做,即使是这样,你还会得罪人,不时有人给你脸色看,你好心帮同事做点事情,做好了,还好,做不好,就什么责任都往你头上推,让你辩解也不是,不辩解也不是,然后就是繁重的生活压力,我自己02年来杭州,一个月工资是800不到点,每个月住在遥远的城北,每天要六点多上班,一起住的有四个人,每天我第一个走,回到房子的时候,最晚的就是我,所以虽然住一起,却根本见不到面。
这样的日子,我想不叫煎熬是很难的事情,我自己是中国最好的金融类学校毕业,当年毕业的同学基本上都进的是各个部委里,我在大学里,成绩说不上最好,也不能说差,如果不是万恶的911,粉碎了我们的梦想,按照当时的成绩,我可能会在大洋彼岸的某个学校里读书工作,不过一切都是如果,现实是残酷的,所以因为这种原因来到的杭州,更是让我对煎熬两个字有了更深刻的理解,那简直是种痛入骨髓的悲哀,于是我每天都想着解脱,想着离开。
那时候我曾经写过一篇类似的文章,文章里说,“相对于大学的精彩和辉煌,第一年的工作给我带来的只是痛苦、失败和孤独的煎熬,这一年的起初,我几乎已经对自己失去了信心,已经无法在去想象更多的东西,每天都在忍受工作之后与大学生活错位所带来的郁闷。”
终于有一次爆发了,我一个人什么都不顾及,离开了岗位,独自一个人跑回了北京,那是02年12月18日,到北京的时候,北京下了个大雪,我先回了趟学校,站在学校的操场上非常的恍惚,想到过去四年里在这里留下的所谓的一系列辉煌和精彩的过往,然后在想到现实的不如意,我在201(我曾经最喜欢去的一个自习室)哭的一塌糊涂,然后就离开了校园,这里已经没有我那么怀念的那些人和那些东西了。
我们在学习前端的过程中,有时候会出现一些奇怪的现象,Collapsing Margins便是其中之一,有时候我们想要某个元素离的第一个子元素能够下移一些,于是给它设置了margin-top,但奇怪的是这个margin-top属性却传递给了父元素,导致父元素的位置下移:
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> body { margin: 0; } .parent { height: 200px; background: #0099ff; } .child { width: 230px; margin-top: 50px; } </style> </head> <body> <div class="parent"> <div class="child">Child</div> </div> </body> </html>
这是个BUG吗?为什么各种浏览器都会有这样的“BUG”呢?其实,W3C规范认为margin折叠会使页面布局更加合理,比如两个段落(<p>)之间,段前间距跟段后间距应该只保留最大的一个,而不应该两者相加而导致段落之间间隙过大。下面,我们就来探究一下这个奇怪的Collapsing Margins。
今天在做项目的时候需要用到JavaScript农历转换算法,从网上搜索并整理了一下,重新写出一个JavaScript农历转换类,不敢独占,特此与大家分享。
Date.prototype.format = function(mask) {
var d = this;
var zeroize = function (value, length) {
if (!length) length = 2;
value = String(value);
for (var i = 0, zeros = ''; i < (length - value.length); i++) {
zeros += '0';
}
return zeros + value;
};
return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function($0) {
switch($0) {
case 'd': return d.getDate();
case 'dd': return zeroize(d.getDate());
case 'ddd': return ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'][d.getDay()];
case 'dddd': return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d.getDay()];
case 'M': return d.getMonth() + 1;
case 'MM': return zeroize(d.getMonth() + 1);
case 'MMM': return ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()];
case 'MMMM': return ['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()];
case 'yy': return String(d.getFullYear()).substr(2);
case 'yyyy': return d.getFullYear();
case 'h': return d.getHours() % 12 || 12;
case 'hh': return zeroize(d.getHours() % 12 || 12);
case 'H': return d.getHours();
case 'HH': return zeroize(d.getHours());
case 'm': return d.getMinutes();
case 'mm': return zeroize(d.getMinutes());
case 's': return d.getSeconds();
case 'ss': return zeroize(d.getSeconds());
case 'l': return zeroize(d.getMilliseconds(), 3);
case 'L': var m = d.getMilliseconds();
if (m > 99) m = Math.round(m / 10);
return zeroize(m);
case 'tt': return d.getHours() < 12 ? 'am' : 'pm';
case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
case 'Z': return d.toUTCString().match(/[A-Z]+$/);
default: return $0.substr(1, $0.length - 2);
}
});
};