/*—————————————————
       作者:阿辛(Xinple)
       时间:2005-11-4 00:21
       地点:http://xinple.org
  ————————————————-*/

    今天晚上收到过眼的博客-行走在此间的一封Email,问我怎样实现一个类似下面的效果:

 


1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《11月的肖邦》!咋10月就出来了?香港有人bt被法院判了!美国下令关闭电驴服务Cao!
我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,荡下来很快的喔

 

  2.一直很想看得杜妻疯的《黑社会》终于出来了,经过广电总局的妙手,现在成了《龙城岁月》,根本失去了原有的味道,还剪去了10多分钟的戏份,可想而知,这10多分钟是对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍广电总局英明!不过要看的去bt荡下来吧,趁着现在bt还不是咱们这政权严打的对象…



他想textarea来实现,但是textarea的效果就是这样的:

 

发现不同了吗? 恩,使用textarea的话,HTML标签是不能工作的,因为textarea本来就是一个用来让你输入多行文本的表单,例如wordpress默认的日志撰写区域就是一个textarea,它可以直接输入任何HTML标签,不过可以使用属性readonly来让它不能写入文本。
例如

  1. <textarea cols="2" rows="6" readonly></textarea>

那么怎样实现在类似textarea在指定区域内滚动显示多行文本呢? 一个就是使用javascript,相信大家都用过那些“所见即所得”编辑器吧?其实他们大多就是使用JS来设置textarea的。可是现在问题是写JS比较麻烦,而且,textarea是用来输入数据的表单,而不是用来显示数据的。

比较好的解决方法就是使用div+CSS来搞定了。
CSS有个属性: overflow

语法:
overflow : visible | auto | hidden | scroll

 

参数:
visible :  不剪切内容也不添加滚动条。假如显式声明此默认值,对象将被剪切为包含对象的window或frame的大小。并且clip属性设置将失效
auto :  此为body对象和textarea的默认值。在需要时剪切内容并添加滚动条
hidden :  不显示超过对象尺寸的内容
scroll :  总是显示滚动条

说明:
检索或设置当对象的内容超过其指定高度及宽度时如何管理内容。
设置textarea对象为hidden值将隐藏其滚动条。
对于table来说,假如table-layout属性设置为fixed,则td对象支持带有默认值为hidden的overflow属性。如果设为hidden,scroll或者auto,那么超出td尺寸的内容将被剪切。如果设为visible,将导致额外的文本溢出到右边或左边(视direction属性设置而定)的单元格。
自IE5开始,此属性在MAC平台上可用。

那么,开始提出的那种效果可以这样实现:

  1. <div style="overflow: scroll; width: 382px; height: 160px;"> 
  2. 1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《<strong>11月的肖邦》!咋10月就出来了?</strong><em>香港有人bt被法院判了!美国下令关闭电驴服务</em><strong>Cao!</strong>
  3. 我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,<strong>荡下来很快的喔</strong>
  4.  
  5. 2.一直很想看得<strong>杜妻疯的《黑社会》</strong>终于出来了,经过<strong>广电总局的妙手</strong>,现在成了<strong>《龙城岁月》,</strong>根本失去了原有的味道,还剪去了<strong>10多分钟的戏份</strong>,可想而知,这10多分钟是<em>对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍</em><strong>广电总局英明!</strong>不过要看的去bt荡下来吧,<strong>趁着现在bt还不是咱们这政权严打的对象...</strong> 
  6. </div>

效果:

1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《11月的肖邦》!咋10月就出来了?香港有人bt被法院判了!美国下令关闭电驴服务Cao!
我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,荡下来很快的喔

 

2.一直很想看得杜妻疯的《黑社会》终于出来了,经过广电总局的妙手,现在成了《龙城岁月》,根本失去了原有的味道,还剪去了10多分钟的戏份,可想而知,这10多分钟是对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍广电总局英明!不过要看的去bt荡下来吧,趁着现在bt还不是咱们这政权严打的对象…

好了,到此,问题已经基本解决,那么,要让它变好看点,让自己写的东东更加让自己“幸福”,就要设置其他属性了,比如滚动条(scollbar),边框,字体,颜色等等。这些就要稍微了解一点HTML或者CSS了。

  1. <div style="
  2. overflow: auto; width: 400px; height: 180px;
  3. font: 12px Verdana;
  4. color:#000;
  5. background-color:#FFF;
  6. border: 1px dotted #999;
  7. scrollbar-face-color: #CBDDF1;
  8. scrollbar-highlight-color: #547CBB;
  9. scrollbar-shadow-color: #547CBB;
  10. scrollbar-3dlight-color: #ffffff;
  11. scrollbar-arrow-color:  #547CBB;
  12. scrollbar-track-color: #FFFFFF;
  13. scrollbar-darkshadow-color: #FFFFFF;"> 
  14. 1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《<strong>11月的肖邦》!咋10月就出来了?</strong><em>香港有人bt被法院判了!美国下令关闭电驴服务</em><strong>Cao!</strong>
  15. 我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,<strong>荡下来很快的喔</strong>
  16.  
  17. 2.一直很想看得<strong>杜妻疯的《黑社会》</strong>终于出来了,经过<strong>广电总局的妙手</strong>,现在成了<strong>《龙城岁月》,</strong>根本失去了原有的味道,还剪去了<strong>10多分钟的戏份</strong>,可想而知,这10多分钟是<em>对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍</em><strong>广电总局英明!</strong>不过要看的去bt荡下来吧,<strong>趁着现在bt还不是咱们这政权严打的对象...</strong> 
  18. </div>

效果:

1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《11月的肖邦》!咋10月就出来了?香港有人bt被法院判了!美国下令关闭电驴服务Cao!
我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,荡下来很快的喔

 

2.一直很想看得杜妻疯的《黑社会》终于出来了,经过广电总局的妙手,现在成了《龙城岁月》,根本失去了原有的味道,还剪去了10多分钟的戏份,可想而知,这10多分钟是对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍广电总局英明!不过要看的去bt荡下来吧,趁着现在bt还不是咱们这政权严打的对象…

posted @ 2008-01-06 22:24 胡枫 阅读(381) 评论(0) 编辑

        现在浏览器多了,做web页面还是比较痛苦的,当然,如果你不在乎自己做的页面在有些浏览器上面惨不忍睹那也是种不错的心态(至少少了点头痛的机会),可是你老板或者上司或者你的用户同意吗?-__!

        下面我就介绍我知道的hack方法吧。我现在比较常用的,并且感觉用的不动脑子的方法是:

  1. #yourId/.yourClass {/*normal*/}
  2. * html #yourId/.yourClass {/*IE6 and below*/}
  3. *+html #yourId/.yourClass {/*IE7 only*/}
  4. @media all and (min-width:0px){
  5.     #yourId/.yourClass { /*opera*/ }
  6. }

用法:直接写CSS,用firefox作为第一浏览器看效果,然后IE6下不一样,就用* HTML重写那个ID容器或者类;如果IE 7不一样,就用*+HTML重写,如果opera下面不一样,就用@media那个,当然这写重写的需要放在原来的后面。呵呵,就这么简单。这个方法用了之后可能会上瘾,可是会有诸如增加CSS文件容量等不爽,甚至有时候还会出现直接用这个写几段不同的。所以还是建议能熟悉了解个浏览器具体是在什么属性上支持不一样(例如border宽度IE6认为是不能算在width里面的,但是firefox是认为算width一起的),先尽力写几个浏览器通用的CSS,不到必不得已不用这个hack方法。

原理:firefox认为是CSS语法错误,所以忽略。但是不同IE版本识别不同,不忽略,所以能实现hack,并且*+HTML还能通过W3C验证,呵呵,爽吧。opera那个就不多说了,也是类似原理,但是看起来比较崩溃,要说明的是,firefox下没问题的话,opera基本也没什么问题的,所以不太会用到这个hack。

还需要其他浏览器hack方法?抱歉,我就知道这么多,因为我电脑上只有这么几个浏览器,呵呵,公司要求或者我自己想要把握的用户群够了。

        ————————————-

另外就是!important这个方法了(firefox遇到这个优先级就最高,但是IE6不认,所以下面重新定义可以覆盖),不过这个貌似是以前甚至现在都很多人在用的,但是我个人感觉不是很爽,不能像上面的那样明确的搞定某个浏览器。比如现在IE7对规范CSS支持已经比IE6好了不知道多少,但是还是会有和firefox有的差异,所以用important的方式,控制起来并不像上面的那么一目了然。

各种浏览器CSS hack方法
posted @ 2008-01-06 22:06 胡枫 阅读(97) 评论(0) 编辑
posted @ 2008-01-06 22:03 胡枫 阅读(131) 评论(0) 编辑
每一项都是js中的小技巧,但十分的实用! 
1.document.write(""); 输出语句
2.JS中的注释为//
3.传统的HTML文档顺序是:document->html->(head,body)
4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document)
5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value)
6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();
7.JS中的值类型:String,Number,Boolean,Null,Object,Function
8.JS中的字符型转换成数值型:parseInt(),parseFloat()
9.JS中的数字转换成字符型:(""+变量)
10.JS中的取字符串长度是:(length)
11.JS中的字符与字符相连接使用+号.
12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<=
13.JS中声明变量使用:var来进行声明
14.JS中的判断语句结构:if(condition){}else{}
15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}
16.循环中止的命令是:break
17.JS中的函数定义:function functionName([parameter],){statement[s]}
18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.
19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self
20.状态栏的设置:window.status="字符";
21.弹出提示信息:window.alert("字符");
22.弹出确认框:window.confirm();
23.弹出输入提示框:window.prompt();
24.指定当前显示链接的位置:window.location.href="URL"
25.取出窗体中的所有表单的数量:document.forms.length
26.关闭文档的输出流:document.close();
27.字符串追加连接符:+=
28.创建一个文档元素:document.createElement(),document.createTextNode()
29.得到元素的方法:document.getElementById()
30.设置表单中所有文本型的成员的值为空:
var form = window.document.forms[0]
for (var i = 0; i<form.elements.length;i++){
if (form.elements.type == "text"){
form.elements.value 
= "";
}
}
31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)
32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length
33.单选按钮组判断是否被选中也是用checked.
34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)
35.字符串的定义:var myString = new String("This is lightsword");
36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();
37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.
38.取字符串中指定位置的一个字符:StringA.charAt(9);
39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数
41.定义日期型变量:var today = new Date();
42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注意:此日期时间从0开始计]
43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName
44.parent代表父亲对象,top代表最顶端对象
45.打开子窗口的父窗口为:opener
46.表示当前所属的位置:this
47.当在超链接中调用JS函数时用:(javascript :)来开头后面加函数名
48.在老的浏览器中不执行此JS:<!-- //-->
49.引用一个文件式的JS:<script type="text/javascript" src="aaa.js"></script>
50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript>
51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<a href="a.html" onclick="location.href='b.html';return false">dfsadf</a>
52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError
53.JS中的换行:\n
54.窗口全屏大小:<script>function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</script>
55.JS中的all代表其下层的全部元素
56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1
57.innerHTML的值是表单元素的值:如<p id="para">"how are <em>you</em>"</p>,则innerHTML的值就是:how are <em>you</em>
58.innerTEXT的值和上面的一样,只不过不会把<em>这种标记显示出来.
59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.
60.isDisabled判断是否为禁止状态.disabled设置禁止状态
61.length取得长度,返回整型数值
62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc
63.window.focus()使当前的窗口在所有窗口之前.
64.blur()指失去焦点.与FOCUS()相反.
65.select()指元素为选中状态.
66.防止用户对文本框中输入文本:onfocus="this.blur()"
67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length
68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()
69.状态栏文字的设置:window.status='文字',默认的状态栏文字设置:window.defaultStatus = '文字.';
70.添加到收藏夹:external.AddFavorite("http://www.dannyg.com","jaskdlf");
71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;
72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener的多重继续.
73.JS中的self指的是当前的窗口
74.JS中状态栏显示内容:window.status="内容"
75.JS中的top指的是框架集中最顶层的框架
76.JS中关闭当前的窗口:window.close();
77.JS中提出是否确认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}
78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn");
79.JS中的打印:window.print()
80.JS中的提示输入框:window.prompt("message","defaultReply");
81.JS中的窗口滚动条:window.scroll(x,y)
82.JS中的窗口滚动到位置:window.scrollby
83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout
84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);
85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.onbeforeunload=verifyClose;
86.当窗体第一次调用时使用的文件句柄:onload()
87.当窗体关闭时调用的文件句柄:onunload()
88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳转到相应的锚记),href(全部的信息)
89.window.location.reload()刷新当前页面.
90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)
91.document.write()不换行的输出,document.writeln()换行输出
92.document.body.noWrap=true;防止链接文字折行.
93.变量名.charAt(第几位),取该变量的第几位的字符.
94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.
95.字符串连接:string.concat(string2),或用+=进行连接
96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)
97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.
98.string.match(regExpression),判断字符是否匹配.
99.string.replace(regExpression,replaceString)替换现有字符串.
100.string.split(分隔符)返回一个数组存储值.
101.string.substr(start[,length])取从第几位到指定长度的字符串.
102.string.toLowerCase()使字符串全部变为小写.
103.string.toUpperCase()使全部字符变为大写.
104.parseInt(string[,radix(代表进制)])强制转换成整型.
105.parseFloat(string[,radix])强制转换成浮点型.
106.isNaN(变量):测试是否为数值型.
107.定义常量的关键字:const,定义变量的关键字:var

有用的js程序代码:
//去左空格;
function ltrim(s){
return s.replace( /^\s*/"");
}

//去右空格;
function rtrim(s){
return s.replace( /\s*$/"");
}

//左右空格;
function trim(s){
return rtrim(ltrim(s));
}

//检查非法字符
//
str 要检查的字符
//
badwords 非法字符 &|<>=
function checkbadwords(str, badwords) {
if (typeof (str) != "string" || typeof (badwords) != "string") {
return (false);
}
for (i=0; i<badwords.length; i++) {
bad 
= badwords.charAt(i);
for (j=0; j<str.length; j++) {
if (bad == str.charAt(j)) {
return false;
break;
}
}
}
return true;
}

//检查合法字符,限制只能输入的字符
//
str 要检查的字符
//
goodwords 合法字符 1234567890abcdefghijklmnopqrstuvwxyz
function checkgoodwords(str, goodwords) {
if (typeof (str) != "string" || typeof (goodwords) != "string") {
return (false);
}
for (i=0; i<str.length; i++) {
this_str 
= str.charAt(i);
for (j=0; j<goodwords.length; j++) {
if (this_str == goodwords.charAt(j)) {
break;
}
if(j==goodwords.length-1){
return false;
}
}
}
return true;
}

//函 数 名:chkinteger
//
功能介绍:检查是否为数字
//
参数说明:要检查的字符串
//
返 回 值:false:不是 true:是
function chkinteger(checkStr) {
var checkOK = "0123456789+-";
var allValid = true;
for (i=0; i<checkStr.length; i++) {
ch 
= checkStr.charAt(i);
if (checkOK.indexOf(ch) == -1) {
allValid 
= false;
break;
}
if ((ch == '+' || ch == '-'&& i>0) {
allValid 
= false;
break;
}
}
return (allValid);
}

//函 数 名:chklength
//
功能介绍:检查字符串的长度
//
参数说明:要检查的字符串
//
返 回 值:字节长度值
function chklength(checkStr) {
var n = 0;
for (i=0; i<checkStr.length; i++) {
chcode 
= checkStr.charCodeAt(i);
if (chcode>=0 && chcode<=255) {
n
++;
else {
+= 2;
}
}
return (n);

posted @ 2008-01-06 21:58 胡枫 阅读(48) 评论(0) 编辑