div+css布局入门
这是在网页设计师上看到的一篇文章,很适合入门div+css布局的人看,转了过来收藏,hoho~~
你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对应的什么CSS语句。当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
结构化HTML
我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
开始思考
首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
标志和站点名称
主页面内容
站点导航(主菜单)
子菜单
搜索框
功能区(例如购物车、收银台)
页脚(版权和有关法律声明)
我们通常采用DIV元素来将这些结构定义出来,类似这样:
<div id="header"></div>
<div id="content"></div>
<div id="globalnav"></div>
<div id="subnav"></div>
<div id="search"></div>
<div id="shop"></div>
<div id="footer"></div>
这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。
使用选择器是件美妙的事
id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的相分离.)
良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中,table就是表格,而不是其他什么(比如被用来布局和定位)。
亲自实践一下结构化
上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
<div id="navcontainer">
<div id="globalnav">
<ul>a list</ul>
</div>
<div id="subnav">
<ul>another list</ul>
</div>
</div>
嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
用CSS替换传统方法
下面的列表将帮助你用CSS替换传统方法:
HTML属性以及相对应的CSS方法
HTML属性 CSS方法 说明
align="left"
align="right" float: left;
float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
当你使用float属性,必须给这个浮动元素定义一个宽度。
marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
a:visited: #339;
a:hover: #999;
a:active: #00f;
在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
border="3"
cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
你可以使用 table, td or th 这些选择器.
如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse;
<br clear="left">
<br clear="right">
<br clear="all">
clear: left;
clear: right;
clear: both;
许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
cellpadding="3"
vspace="3"
hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
align="center" text-align: center;
margin-right: auto; margin-left: auto;
Text-align 只适用于文本.
象div,p这样的块级怨毒可以通过margin-right: auto; 和margin-left: auto;来水平居中
一些令人遗憾的技巧和工作环境
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
理解浮动行为
Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
更多帮助
已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css-discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多
[yes] [yes]
浏览模式: 标准 | 列表2006年05月的文章
div+css布局入门[转贴]
Submitted by on 2006, May 28, 1:20 AM
点一次广告,才可以显示地址的[转]
Submitted by on 2006, May 25, 11:09 PM
<!-- 开始 -->
<script language="JavaScript" type="text/javascript">
function will() {
if (event.srcElement.tagName=='A'||event.srcElement.tagName=='IMG') {
window.focus();
oUrl.style.display = "";
yAd.style.display = "none";
document.cookie='goodfont=yes';
}
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) { // if cookie exists
offset += search.length
// set index of beginning of value
end = document.cookie.indexOf(";", offset);
// set index of end of cookie value
if (end == -1)
end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
</script>
<!-- 广告代码开始 -->
<base target="_blank" onclick="javascript:will()" />
<div id="A">
<SPAN id=A onclick=will()>
<A onclick=will() href="#" target=_blank>
广告</A>
</SPAN>
</div>
<!-- 广告代码结束 -->
<div id="oUrl" style="display:'none'">
<script language="javascript">function JyDownH(htmlurl){var newwin=window.open(htmlurl,'','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no');return false;}
</script>
<A href='URL' target=_blank>真实下载地址</A>
</div>
<!-- 结束 -->
<script language="JavaScript" type="text/javascript">
function will() {
if (event.srcElement.tagName=='A'||event.srcElement.tagName=='IMG') {
window.focus();
oUrl.style.display = "";
yAd.style.display = "none";
document.cookie='goodfont=yes';
}
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) { // if cookie exists
offset += search.length
// set index of beginning of value
end = document.cookie.indexOf(";", offset);
// set index of end of cookie value
if (end == -1)
end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
</script>
<!-- 广告代码开始 -->
<base target="_blank" onclick="javascript:will()" />
<div id="A">
<SPAN id=A onclick=will()>
<A onclick=will() href="#" target=_blank>
广告</A>
</SPAN>
</div>
<!-- 广告代码结束 -->
<div id="oUrl" style="display:'none'">
<script language="javascript">function JyDownH(htmlurl){var newwin=window.open(htmlurl,'','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no');return false;}
</script>
<A href='URL' target=_blank>真实下载地址</A>
</div>
<!-- 结束 -->
[转贴]终极防范上传漏洞!
Submitted by on 2006, May 19, 1:29 AM
终极防范上传漏洞!
其实无论是组件还是非组件上传,都有这个漏洞,以下代码请需要得朋友仔细阅读,只要读懂代码就能融会贯通。
这里以ASPUPLOAD组件上传为例
以下3个关键函数:
function killext(byval s1) '干掉非法文件后缀
dim allowext
allowext=".JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.RA,.AVI,.MPG,.MPEG,.ASF,.ASX,.WMA,.MOV,.RAR,.ZIP,.EXE,.DOC,.XLS,.CHM,.HLP,.PDF"
s1=ucase(s1)
if len(s1)=0 then
killext=""
else
if not chk(allowext,s1,",") then
killext=".shit"
else
killext=s1
end if
end if
end function
function chk(byval s1,byval s2,byval fuhao) '检查字符串包含
dim i,a
chk=false
a=split(s1,fuhao)
for i = 0 to ubound(a)
if trim(a(i))=trim(s2) then
chk=true
exit for
end if
next
end function
function gname(byval n1) '以日期自动产生目录和文件名,参数1生成目录,参数2生成文件名(无后缀)
dim t,r
t=now()
randomize(timer)
r=int((rnd+1-1)*9999)
select case n1
case 1
gname=year(t)&right("00"&month(t),2)&right("00"&day(t),2)
case 2
gname=right("00"&hour(t),2)&right("00"&minute(t),2)&right("00"&second(t),2)&right("0000"&r,4)
end select
end function
调用方法:
dim oup,ofile,ext,myfile
Set oup = Server.CreateObject("Persits.Upload")
oup.SetMaxSize 10000000, True
call oup.Save() '这里是上传到服务器内存,并没有实际文件产生
set ofile = oup.files(1)
ext=killext(ofile.ext)
myfile="/" & ganme(1) & "/" & gname(2) & ext
call ofile.saveas(server.mappath(myfile))
附加说明:
黑客如果用 nc 上传非法文件,最终得到的文件只是
如 200511051234559103.shit
之类的“狗屎”文件!
相关关键字: 漏洞
------------------------------------------
作者:apollosun
落伍者
其实无论是组件还是非组件上传,都有这个漏洞,以下代码请需要得朋友仔细阅读,只要读懂代码就能融会贯通。
这里以ASPUPLOAD组件上传为例
以下3个关键函数:
function killext(byval s1) '干掉非法文件后缀
dim allowext
allowext=".JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.RA,.AVI,.MPG,.MPEG,.ASF,.ASX,.WMA,.MOV,.RAR,.ZIP,.EXE,.DOC,.XLS,.CHM,.HLP,.PDF"
s1=ucase(s1)
if len(s1)=0 then
killext=""
else
if not chk(allowext,s1,",") then
killext=".shit"
else
killext=s1
end if
end if
end function
function chk(byval s1,byval s2,byval fuhao) '检查字符串包含
dim i,a
chk=false
a=split(s1,fuhao)
for i = 0 to ubound(a)
if trim(a(i))=trim(s2) then
chk=true
exit for
end if
next
end function
function gname(byval n1) '以日期自动产生目录和文件名,参数1生成目录,参数2生成文件名(无后缀)
dim t,r
t=now()
randomize(timer)
r=int((rnd+1-1)*9999)
select case n1
case 1
gname=year(t)&right("00"&month(t),2)&right("00"&day(t),2)
case 2
gname=right("00"&hour(t),2)&right("00"&minute(t),2)&right("00"&second(t),2)&right("0000"&r,4)
end select
end function
调用方法:
dim oup,ofile,ext,myfile
Set oup = Server.CreateObject("Persits.Upload")
oup.SetMaxSize 10000000, True
call oup.Save() '这里是上传到服务器内存,并没有实际文件产生
set ofile = oup.files(1)
ext=killext(ofile.ext)
myfile="/" & ganme(1) & "/" & gname(2) & ext
call ofile.saveas(server.mappath(myfile))
附加说明:
黑客如果用 nc 上传非法文件,最终得到的文件只是
如 200511051234559103.shit
之类的“狗屎”文件!
相关关键字: 漏洞
------------------------------------------
作者:apollosun
落伍者
[转贴]终极防范SQL注入漏洞!
Submitted by on 2006, May 19, 1:26 AM
其实SQL注入漏洞并不可怕,知道原理 + 耐心仔细,就可以彻底防范!
下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。
注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象:
function killn(byval s1) '过滤数值型参数
if not isnumeric(s1) then
killn=0
else
if s1<0 or s1>2147483647 then
killn=0
else
killn=clng(s1)
end if
end if
end function
function killc(byval s1) 过滤货币型参数
if not isnumeric(s1) then
killc=0
else
killc=formatnumber(s1,2,-1,0,0)
end if
end function
function killw(byval s1) '过滤字符型参数
if len(s1)=0 then
killw=""
else
killw=trim(replace(s1,"'",""))
end if
end function
function killbad(byval s1) 过滤所有危险字符,包括跨站脚本
If len(s1) = 0 then
killbad=""
else
killbad = trim(replace(replace(replace(replace(replace(replace(replace(replace(s1,Chr(10), "<br>"), Chr(34), """), ">", ">"), "<", "<"), "&", "&"),chr(39),"'"),chr(32)," "),chr(13),""))
end if
end function
--------------------------------------------
apollosun
落伍者
下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。
注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象:
function killn(byval s1) '过滤数值型参数
if not isnumeric(s1) then
killn=0
else
if s1<0 or s1>2147483647 then
killn=0
else
killn=clng(s1)
end if
end if
end function
function killc(byval s1) 过滤货币型参数
if not isnumeric(s1) then
killc=0
else
killc=formatnumber(s1,2,-1,0,0)
end if
end function
function killw(byval s1) '过滤字符型参数
if len(s1)=0 then
killw=""
else
killw=trim(replace(s1,"'",""))
end if
end function
function killbad(byval s1) 过滤所有危险字符,包括跨站脚本
If len(s1) = 0 then
killbad=""
else
killbad = trim(replace(replace(replace(replace(replace(replace(replace(replace(s1,Chr(10), "<br>"), Chr(34), """), ">", ">"), "<", "<"), "&", "&"),chr(39),"'"),chr(32)," "),chr(13),""))
end if
end function
--------------------------------------------
apollosun
落伍者
推荐一个MD5在线解密、加密的网站
Submitted by on 2006, May 19, 1:21 AM
动易2005 SP2最新漏洞补丁程序(临时方案)
Submitted by on 2006, May 10, 1:24 AM
漏洞描述:攻击者通过作者文集的批量操作功能,利用系统对字符串没有完全过滤的弱点,进行SQL注入。
漏洞级别:严重
解决方案:(临时)
一、用提供的补丁包中的两个文件替换系统中的文件。
二、开启后台管理验证码:Admin_ChkCode.asp文件中将EnableSiteManageCode设置为True,并修改SiteManageCode的默认值。
三、最好可以开启前台用户操作部分的审核功能,比如文集的审核等。
四、注意检查系统管理员中是否有非法的管理员帐号。
[file=uploads/200605/09_172543_2005sp2.rar]点击下载[/file]
漏洞级别:严重
解决方案:(临时)
一、用提供的补丁包中的两个文件替换系统中的文件。
二、开启后台管理验证码:Admin_ChkCode.asp文件中将EnableSiteManageCode设置为True,并修改SiteManageCode的默认值。
三、最好可以开启前台用户操作部分的审核功能,比如文集的审核等。
四、注意检查系统管理员中是否有非法的管理员帐号。
[file=uploads/200605/09_172543_2005sp2.rar]点击下载[/file]
[转贴][转自落伍者]托管服务器经典问题汇总
Submitted by on 2006, May 9, 2:50 AM
托管服务器经典问题汇总
为了让落伍里的朋友更好为自己的服务器找到一个好归宿,更好的发展自己的网站,苦心经营的事业,4月初就萌发了写这篇文章的念头,所以前期一直整理以前落伍朋友们在和我谈托管的时候告诉我的一些情况,另外把平时看到的这方面好文章也好好的再重看了一遍。也许我下面写的内容是你在那边看到过的类似内容,甚至就是你在QQ上告诉我的情况和经验,我想这篇文章毕竟是经验总结,而不是技术创新,而且我也是参照一些优秀的文章,再加上自己的经验进行总结的,所以难免会有朋友以前看到过的类似内容。首先申明,文章中可能会有代理商和小托管商们不想看到的内容,我这篇文章是站在一个客户的角度为自己的服务器选择一个好的归宿,所以难免会有一些代理商不喜欢看到的内容,希望能得到你们的谅解。
现在进入正题:
一、限制流量与限制带宽
现在有很多托管商大玩文字游戏,在托管合同里写明:不限制流量。这个看上去非常不错,而实际情况是,流量不等于带宽,不限制流量不代表不限制带宽,很多说不限制流量的托管商,实际上是这样做的,把你得端口限制成10M或5M,假如你网站上有一些图片,限制了端口打开就会慢很多,但要是放在说限制流量的地方托管,端口没有限制,你峰值可以跑好高,好的机房100M共享峰值可以跑50M-60M的,那样打开图片的速度就和限制端口的时候不是一个概念了。其实现在有很多客户的实际流量并不会很高,但对打开网站的时候速度要求比较高,这种情况就需要寻找那些不限制端口速度的托管商,而不是找那些合同上说不限制流量的托管商。这个问题其实就好比说,一个自来水龙头,不限制流量,但是限制流速,龙头只拧开细细一丝,虽然不限制流量,但是10分钟也放不满一桶水。但如果是放在限制流量的地方,比如一天要求你最多只能放100桶水,但速度都非常快,放一桶水只需要1分钟,而你实际上的用水量一天也才50桶的时候,你就知道那种方式对你好了。我这边有个广东的客户对这个问题就看得比较透,他在QQ里首先一句话就问我,你们这边限制流量嘛,我其实这个时候都蛮郁闷的,因为一般的情况客户问这个问题我们要好好解释一翻才可以的,可这位朋友马上就说不错,只要我们服务器的流量不是特别大,你们就不会限制我的端口速度,后面问了些价格和双线路的情况,当时就说好了过2个月托管在上海的机器要到期,到期了就搬到我这边来, 4月中旬这个客户就把上海托管的一台机器搬过来了,8月份广州还有2台到期也要搬过来。
还有一些托管商,明确表示:我们不但不限制流量,而且不限制带宽!听着这个就更厉害了,其实人家还有后面一句话:我不限制你,也不限制别人。都不限制,那么一个机柜里好几台机器都是做下载的,最终大家速度慢如老牛,你去找托管商理论 ,人家可能会回答:这个问题比较麻烦,我不限制你的流量和带宽,也就不能限制别人的流量和带宽,带宽总量就这么多。最终才明白,这种无限制是最可怕的,很可能最慢。如果大家还不明白,我再举个例子,比 如在十字路口,一般都会有红绿灯,对于两条路来说,那就是有“限制”的,但正是这样的限制才能保证交通畅顺,但是如果大家都觉得红绿灯是在浪费时间,交通部门把它给拿掉的话,那么车子就一脑儿都堵上去了,这时候你通过十字路口的速度恐怕会非常慢,这种“不限制”却成了最大“限制”了。
二、托管价格与服务
落伍里经常有朋友问我,服务器托管在那里比较好。有些人认为选贵的总不会错,其实有些时候情况不是这样的,这个主要是看你这台服务器做什么用途的,有那些具体的需求,比如要是你服务器主要是做下载的,那你就不能放到双线路机房去,因为双线路机房带宽都是花高价格到电信和网通去买的,而你做下载的要消耗很多带宽,流量太大肯定会限制你速度的,而双线路机房相对价格都比较高的,到时候你花了高价格,速度又被限制的很低,得不偿失的。像这样的情况建议托管到2级(地市级)机房,这些机房带宽虽然稳定性及接点比不上省会城市的机房,但带宽相对省会城市机房要宽松的多,而且一般情况下价格也要便宜很多,可能有些经济不怎么发达的地方,2000元多点就可以托管一台服务器,而且可以跑很大的带宽。所以说贵不一定好,要看到底适合不适合自己。
当然,我也不是在这里说选择便宜的没什么关系,很多朋友一味追求低价,大家也都知道便宜没好货的道理,我在这里也不是说价格低的地方就一定不好,但价格便宜的,速度快服务好的托管商确实不多,机率很低。我还是建议朋友们不要把服务器托管到价格很低的地方,不要拿自己辛苦经营的网站去冒这个风险,为了省这点钱拿自己的事业去冒风险真得不值得。
市场上有很多托管商变数非常大,很多时候不能始终如一的经营,因为现在做服务器托管门槛很低,管理上不严格,一个稍微懂点服务器维护的人就可以去机房租一个机柜搞,但是小公司和个人的不稳定因素太多,有相关资料显示,这些托管商基本上半年左右就会有一大部分有变化,一但遇到自己以前没有预见到的一些不好情况,就可能乱换地方,乱换IP,甚至散手不管的情况都时有发生。
许多小公司的技术力量太弱,这在维护十几台服务器的时候还不明显,一旦靠低价吸引来的客户多了,弊端就显示出来了,比如几十台服务器的时候,一两个技术员维护起来就很困难了。客户多了,问题自然也就多起来,死机、重启、速度慢、去机房检修线路、杀毒、机房出问题等等,客户半夜三更打手机咆哮是常事,本来收钱就少,而且要是问题出到一起来,电话不断,连续几天都不能休息好,你说能不烦吗?烦透了,所以有些时候会有人把电话提起来,手机一关,万事皆休。
当然,我这里不是故意说小公司的坏话,我自己是做托管的,知道做托管服务的辛酸,例如4月30号晚上,本来白天上家四台机器,就和工程师一起加班到11点多,后面回来刚睡着,大概1点50分钟的时候手机响了,大连的一个客户说机器出了问题,而且因为是5.1节,技术员明天中午要赶回家见对象,谈婚事,所以希望我马上帮忙去机房重装下系统,没办法,客户机器要马上用,总不能耽误这为技术员兄弟的美事吧,所以马上起来骑车半小时赶到机房去帮客户重装,装好了回到家天都快亮了。这之中的辛苦不是一般人能想象的,做过IDC的人就知道干IDC比做保姆还麻烦很多。我觉得只要小公司认真做事,负责任,有耐力,是完全可以选择的,但是有些事情真的不以人的意志为转移,我经常遇到很多小公司,开始雄心万丈,不到半年,就出大问题。因为这期间正是客户多不多少不少,麻烦事情多的阶段,很多人挺不过去,就倒了。我们其实凭心而论,有些时候真得很难挺过去,就1-2人维护那么多机器,要是一有点什么状况,半夜电话不断,经常是连续2-3个星期不能睡个安稳觉,问题一堆一堆的等着解决,有装不完的系统在等着装,确实很难挺过去,毕竟我们都不是圣人。所以尽量要选择有实力的规范的大公司,至少不会出现不接电话,人间蒸发等类似的事情。
三、如何选择托管商
1、看承诺(合同)?还是看口碑?
经常有朋友在QQ里向我提要求,要我们保证这个保证哪个,我基本回答不能保证,因为有些事情是不好保证的,经常有落伍的朋友说某某托管商100M共享,保证10M,其实我觉得这个话是明显在骗人,既然是共享,何以能保证10M?我和客户说一直能说峰值大概可以跑到50M左右,但不能保证最低的速度,要是网段被攻击的时候肯定不好保证10M的,还有就是托管别太重承诺,就算合同上写了也不能算的,你注意下,托管合同会不会写明赔偿的事,一般情况都不写的,合同上写不会发生的事,所以即使出了问题,你基本也不会等到赔偿的,所以承诺是没有用的,我觉得在IDC行业中,口碑更重要些,要找那些承诺少,帮你做实事的人,经常有客户问我,你们这个不能保证,哪个又不能保证,那我怎么放心把我的服务器放你们那边托管啊,这个时候我一般都会这样告诉客户,我们这边将近托管了3000台服务器,而且我们的价格这么高,客户肯定不傻的,都一直往我们这边加机器,那就肯定有他的道理的。
2、尽量跨过不必要的中间商
尽量跨过不必要的中间商,因为中间商越多,将来的不稳定因素就越多,可能发生互相推诿,很难办。要尽量直接找机房(因为现在很多商业IDC也非常乐意做直接单台的客户的)或者找到那些直接从机房租用机柜的托管商。而且正规机房的规矩都是只认直接客户,间接客户打电话要求重起机器或其他什么事情的话都不会同意的,因为这个牵涉到一个责任的事,比如一个代理商在我们机房放个40来台机器,有30多个客户,要是间接客户打电话过来要求重起机器我们也不会帮忙重起的,这个是个安全的问题,机房值班人员并不清楚你是不是机器的真正拥有人,要是有人故意搞麻烦问题就大了。2月份河南有个做游戏的客户就出现了这样的情况,他通过河南一个代理把机房放到我们机房,后面机器死机了,打电话给代理没人接,打手机又是关机,他后面就在QQ里让我帮忙打电话让机房重起下,可机房的规矩是只认上架单上相关责任负责人的,所以我也只能是有心无力了,最好这个客户有些停了一个晚上,第二天上午上班后才开机。虽然这是个小事情,却能反映去代理关系多了以后解决问题的复杂性和解决问题的速度。
3、考察托管商和机房
考察托管商比较考察机房重要,因为以后有什么情况你都是找托管商的,不是找机房,就像我们机房有几十个租柜子做生意的托管商,服务水平和态度就相差甚远。考察代理商主要考察规模、历史、人数,因为毕竟这些因素都是到时候机器出了问题,代理商能否很快的帮忙解决的主要因素,比如说要是几台机器同时出出问题,一个技术员的公司,再好服务态度也不能马上全部帮忙解决,毕竟一个人处理问题的速度是有限的。对托管商不是很熟悉的时候,最好看下他是否有ICP证,一般能办到这个证的,服务应该不会很差,至少不会出现托管的机器被丢的事。
考察机房主要是看规模和历史,不要光看设备,新机房得设备一般都非常好的,而且也不能光看速度,因为新建的机房开始机器少,速度肯定OK的。但是这种新机房考虑到初期的启动成本,往往通往互联网主干线的总出口较小,经营一段时间,客户多了,速度就会变得很慢。而且许多新机房因为人才、设备、经验、规章跟不上,经常会出现很多奇怪的问题,并且出现问题后,由于经验不足,解决的方式上也是和老牌机房没办法比拟的。
后记:大体内容暂时就写这么多了,一起写了11个多小时,累死了,以后想到了需要补充的再加,朋友们要是感觉还有那些需要补充的内容也在跟贴的时候说出来,感觉说的好的我也补充进来,发挥大家的智慧,一起努力,争取打造一篇托管指导性的文章,希望能对需要托管的朋友有一点点帮助。
本文参考过的文章:托管之真知灼见(出处:WWW.SINA.COM,时间大概是05年上半年)
本文落伍首发,欢迎朋友们转载,转载时麻烦说明下出处:落伍者(www.im286.com)——世导IDC李逵
为了让落伍里的朋友更好为自己的服务器找到一个好归宿,更好的发展自己的网站,苦心经营的事业,4月初就萌发了写这篇文章的念头,所以前期一直整理以前落伍朋友们在和我谈托管的时候告诉我的一些情况,另外把平时看到的这方面好文章也好好的再重看了一遍。也许我下面写的内容是你在那边看到过的类似内容,甚至就是你在QQ上告诉我的情况和经验,我想这篇文章毕竟是经验总结,而不是技术创新,而且我也是参照一些优秀的文章,再加上自己的经验进行总结的,所以难免会有朋友以前看到过的类似内容。首先申明,文章中可能会有代理商和小托管商们不想看到的内容,我这篇文章是站在一个客户的角度为自己的服务器选择一个好的归宿,所以难免会有一些代理商不喜欢看到的内容,希望能得到你们的谅解。
现在进入正题:
一、限制流量与限制带宽
现在有很多托管商大玩文字游戏,在托管合同里写明:不限制流量。这个看上去非常不错,而实际情况是,流量不等于带宽,不限制流量不代表不限制带宽,很多说不限制流量的托管商,实际上是这样做的,把你得端口限制成10M或5M,假如你网站上有一些图片,限制了端口打开就会慢很多,但要是放在说限制流量的地方托管,端口没有限制,你峰值可以跑好高,好的机房100M共享峰值可以跑50M-60M的,那样打开图片的速度就和限制端口的时候不是一个概念了。其实现在有很多客户的实际流量并不会很高,但对打开网站的时候速度要求比较高,这种情况就需要寻找那些不限制端口速度的托管商,而不是找那些合同上说不限制流量的托管商。这个问题其实就好比说,一个自来水龙头,不限制流量,但是限制流速,龙头只拧开细细一丝,虽然不限制流量,但是10分钟也放不满一桶水。但如果是放在限制流量的地方,比如一天要求你最多只能放100桶水,但速度都非常快,放一桶水只需要1分钟,而你实际上的用水量一天也才50桶的时候,你就知道那种方式对你好了。我这边有个广东的客户对这个问题就看得比较透,他在QQ里首先一句话就问我,你们这边限制流量嘛,我其实这个时候都蛮郁闷的,因为一般的情况客户问这个问题我们要好好解释一翻才可以的,可这位朋友马上就说不错,只要我们服务器的流量不是特别大,你们就不会限制我的端口速度,后面问了些价格和双线路的情况,当时就说好了过2个月托管在上海的机器要到期,到期了就搬到我这边来, 4月中旬这个客户就把上海托管的一台机器搬过来了,8月份广州还有2台到期也要搬过来。
还有一些托管商,明确表示:我们不但不限制流量,而且不限制带宽!听着这个就更厉害了,其实人家还有后面一句话:我不限制你,也不限制别人。都不限制,那么一个机柜里好几台机器都是做下载的,最终大家速度慢如老牛,你去找托管商理论 ,人家可能会回答:这个问题比较麻烦,我不限制你的流量和带宽,也就不能限制别人的流量和带宽,带宽总量就这么多。最终才明白,这种无限制是最可怕的,很可能最慢。如果大家还不明白,我再举个例子,比 如在十字路口,一般都会有红绿灯,对于两条路来说,那就是有“限制”的,但正是这样的限制才能保证交通畅顺,但是如果大家都觉得红绿灯是在浪费时间,交通部门把它给拿掉的话,那么车子就一脑儿都堵上去了,这时候你通过十字路口的速度恐怕会非常慢,这种“不限制”却成了最大“限制”了。
二、托管价格与服务
落伍里经常有朋友问我,服务器托管在那里比较好。有些人认为选贵的总不会错,其实有些时候情况不是这样的,这个主要是看你这台服务器做什么用途的,有那些具体的需求,比如要是你服务器主要是做下载的,那你就不能放到双线路机房去,因为双线路机房带宽都是花高价格到电信和网通去买的,而你做下载的要消耗很多带宽,流量太大肯定会限制你速度的,而双线路机房相对价格都比较高的,到时候你花了高价格,速度又被限制的很低,得不偿失的。像这样的情况建议托管到2级(地市级)机房,这些机房带宽虽然稳定性及接点比不上省会城市的机房,但带宽相对省会城市机房要宽松的多,而且一般情况下价格也要便宜很多,可能有些经济不怎么发达的地方,2000元多点就可以托管一台服务器,而且可以跑很大的带宽。所以说贵不一定好,要看到底适合不适合自己。
当然,我也不是在这里说选择便宜的没什么关系,很多朋友一味追求低价,大家也都知道便宜没好货的道理,我在这里也不是说价格低的地方就一定不好,但价格便宜的,速度快服务好的托管商确实不多,机率很低。我还是建议朋友们不要把服务器托管到价格很低的地方,不要拿自己辛苦经营的网站去冒这个风险,为了省这点钱拿自己的事业去冒风险真得不值得。
市场上有很多托管商变数非常大,很多时候不能始终如一的经营,因为现在做服务器托管门槛很低,管理上不严格,一个稍微懂点服务器维护的人就可以去机房租一个机柜搞,但是小公司和个人的不稳定因素太多,有相关资料显示,这些托管商基本上半年左右就会有一大部分有变化,一但遇到自己以前没有预见到的一些不好情况,就可能乱换地方,乱换IP,甚至散手不管的情况都时有发生。
许多小公司的技术力量太弱,这在维护十几台服务器的时候还不明显,一旦靠低价吸引来的客户多了,弊端就显示出来了,比如几十台服务器的时候,一两个技术员维护起来就很困难了。客户多了,问题自然也就多起来,死机、重启、速度慢、去机房检修线路、杀毒、机房出问题等等,客户半夜三更打手机咆哮是常事,本来收钱就少,而且要是问题出到一起来,电话不断,连续几天都不能休息好,你说能不烦吗?烦透了,所以有些时候会有人把电话提起来,手机一关,万事皆休。
当然,我这里不是故意说小公司的坏话,我自己是做托管的,知道做托管服务的辛酸,例如4月30号晚上,本来白天上家四台机器,就和工程师一起加班到11点多,后面回来刚睡着,大概1点50分钟的时候手机响了,大连的一个客户说机器出了问题,而且因为是5.1节,技术员明天中午要赶回家见对象,谈婚事,所以希望我马上帮忙去机房重装下系统,没办法,客户机器要马上用,总不能耽误这为技术员兄弟的美事吧,所以马上起来骑车半小时赶到机房去帮客户重装,装好了回到家天都快亮了。这之中的辛苦不是一般人能想象的,做过IDC的人就知道干IDC比做保姆还麻烦很多。我觉得只要小公司认真做事,负责任,有耐力,是完全可以选择的,但是有些事情真的不以人的意志为转移,我经常遇到很多小公司,开始雄心万丈,不到半年,就出大问题。因为这期间正是客户多不多少不少,麻烦事情多的阶段,很多人挺不过去,就倒了。我们其实凭心而论,有些时候真得很难挺过去,就1-2人维护那么多机器,要是一有点什么状况,半夜电话不断,经常是连续2-3个星期不能睡个安稳觉,问题一堆一堆的等着解决,有装不完的系统在等着装,确实很难挺过去,毕竟我们都不是圣人。所以尽量要选择有实力的规范的大公司,至少不会出现不接电话,人间蒸发等类似的事情。
三、如何选择托管商
1、看承诺(合同)?还是看口碑?
经常有朋友在QQ里向我提要求,要我们保证这个保证哪个,我基本回答不能保证,因为有些事情是不好保证的,经常有落伍的朋友说某某托管商100M共享,保证10M,其实我觉得这个话是明显在骗人,既然是共享,何以能保证10M?我和客户说一直能说峰值大概可以跑到50M左右,但不能保证最低的速度,要是网段被攻击的时候肯定不好保证10M的,还有就是托管别太重承诺,就算合同上写了也不能算的,你注意下,托管合同会不会写明赔偿的事,一般情况都不写的,合同上写不会发生的事,所以即使出了问题,你基本也不会等到赔偿的,所以承诺是没有用的,我觉得在IDC行业中,口碑更重要些,要找那些承诺少,帮你做实事的人,经常有客户问我,你们这个不能保证,哪个又不能保证,那我怎么放心把我的服务器放你们那边托管啊,这个时候我一般都会这样告诉客户,我们这边将近托管了3000台服务器,而且我们的价格这么高,客户肯定不傻的,都一直往我们这边加机器,那就肯定有他的道理的。
2、尽量跨过不必要的中间商
尽量跨过不必要的中间商,因为中间商越多,将来的不稳定因素就越多,可能发生互相推诿,很难办。要尽量直接找机房(因为现在很多商业IDC也非常乐意做直接单台的客户的)或者找到那些直接从机房租用机柜的托管商。而且正规机房的规矩都是只认直接客户,间接客户打电话要求重起机器或其他什么事情的话都不会同意的,因为这个牵涉到一个责任的事,比如一个代理商在我们机房放个40来台机器,有30多个客户,要是间接客户打电话过来要求重起机器我们也不会帮忙重起的,这个是个安全的问题,机房值班人员并不清楚你是不是机器的真正拥有人,要是有人故意搞麻烦问题就大了。2月份河南有个做游戏的客户就出现了这样的情况,他通过河南一个代理把机房放到我们机房,后面机器死机了,打电话给代理没人接,打手机又是关机,他后面就在QQ里让我帮忙打电话让机房重起下,可机房的规矩是只认上架单上相关责任负责人的,所以我也只能是有心无力了,最好这个客户有些停了一个晚上,第二天上午上班后才开机。虽然这是个小事情,却能反映去代理关系多了以后解决问题的复杂性和解决问题的速度。
3、考察托管商和机房
考察托管商比较考察机房重要,因为以后有什么情况你都是找托管商的,不是找机房,就像我们机房有几十个租柜子做生意的托管商,服务水平和态度就相差甚远。考察代理商主要考察规模、历史、人数,因为毕竟这些因素都是到时候机器出了问题,代理商能否很快的帮忙解决的主要因素,比如说要是几台机器同时出出问题,一个技术员的公司,再好服务态度也不能马上全部帮忙解决,毕竟一个人处理问题的速度是有限的。对托管商不是很熟悉的时候,最好看下他是否有ICP证,一般能办到这个证的,服务应该不会很差,至少不会出现托管的机器被丢的事。
考察机房主要是看规模和历史,不要光看设备,新机房得设备一般都非常好的,而且也不能光看速度,因为新建的机房开始机器少,速度肯定OK的。但是这种新机房考虑到初期的启动成本,往往通往互联网主干线的总出口较小,经营一段时间,客户多了,速度就会变得很慢。而且许多新机房因为人才、设备、经验、规章跟不上,经常会出现很多奇怪的问题,并且出现问题后,由于经验不足,解决的方式上也是和老牌机房没办法比拟的。
后记:大体内容暂时就写这么多了,一起写了11个多小时,累死了,以后想到了需要补充的再加,朋友们要是感觉还有那些需要补充的内容也在跟贴的时候说出来,感觉说的好的我也补充进来,发挥大家的智慧,一起努力,争取打造一篇托管指导性的文章,希望能对需要托管的朋友有一点点帮助。
本文参考过的文章:托管之真知灼见(出处:WWW.SINA.COM,时间大概是05年上半年)
本文落伍首发,欢迎朋友们转载,转载时麻烦说明下出处:落伍者(www.im286.com)——世导IDC李逵
转贴:动易系统---鼠标点标题带美化效果
Submitted by on 2006, May 7, 10:10 PM
转贴,在动易论坛看的
效果:

加在后台的风格里
/* --增加鼠标效应的css定义开始-- */
.header {
font-family: tahoma, verdana;
font-size: 12px;
color: #ffffff;
font-weight: normal;
background-color:#308701;
}
.selet_bg {
background-color: #ffffff;
}
.f_one {
background-color: #ffffff;
}
下面的加在模板后面:
<script language='JavaScript' src='/js/plus.js'></script>
plus.js文件代码
var pltsPop=null;
var pltsoffsetX = 10;
var pltsoffsetY = 15;
var pltsPopbg="#ffff00";
var pltsPopfg="#111111";
var pltsTitle="";
document.write('<div id=pltsTipLayer style="display: none;position: absolute; z-index:10001"></div>');
function pltsinits()
{
document.onmouseover = plts;
document.onmousemove = moveToMouseLoc;
}
function plts()
{ var o=event.srcElement;
if(o.alt!=null && o.alt!=""){o.dypop=o.alt;o.alt=""};
if(o.title!=null && o.title!=""){o.dypop=o.title;o.title=""};
pltsPop=o.dypop;
if(pltsPop!=null&&pltsPop!=""&&typeof(pltsPop)!="undefined")
{
pltsTipLayer.style.left=-1000;
pltsTipLayer.style.display='';
var Msg=pltsPop.replace(/\n/g,"<br>");
Msg=Msg.replace(/\0x13/g,"<br>");
var re=/\{(.[^\{]*)\}/ig;
if(!re.test(Msg))pltsTitle="[www.86MS.com]86美术网";
else{
re=/\{(.[^\{]*)\}(.*)/ig;
pltsTitle=Msg.replace(re,"$1")+" ";
re=/\{(.[^\{]*)\}/ig;
Msg=Msg.replace(re,"");
Msg=Msg.replace("<br>","");}
var attr=(document.location.toString().toLowerCase().indexOf("list.asp")>0?"nowrap":"");
var content =
'<table style="FILTER:alpha(opacity=90) shadow(color=#bbbbbb,direction=150);" id=toolTipTalbe border=0><tr><td width="100%"><table class=selet_bg cellspacing="0" cellpadding="0" style="width:100%" style="font size:11px;">'+
'<tr id=pltsPoptop><th height=12 valign=bottom class=header><p id=topleft align=left>↖'+pltsTitle+'</p><p id=topright align=right style="display:none">'+pltsTitle+'↗</font></th></tr>'+
'<tr><td "+attr+" class=f_one style="padding-left:10px;padding-right:10px;padding-top: 4px;padding-bottom:4px;line-height:135%">'+Msg+'</td></tr>'+
'<tr id=pltsPopbot style="display:none"><th height=12 valign=bottom class=header><p id=botleft align=left>↙'+pltsTitle+'</p><p id=botright align=right style="display:none">'+pltsTitle+'↘</font></th></tr>'+
'</table></td></tr></table>';
pltsTipLayer.innerHTML=content;
toolTipTalbe.style.width=Math.min(pltsTipLayer.clientWidth,document.body.clientWidth/2.2);
moveToMouseLoc();
return true;
}
else
{
pltsTipLayer.innerHTML='';
pltsTipLayer.style.display='none';
return true;
}
}
function moveToMouseLoc()
{
if(pltsTipLayer.innerHTML=='')return true;
var MouseX=event.x;
var MouseY=event.y;
//window.status=event.y;
var popHeight=pltsTipLayer.clientHeight;
var popWidth=pltsTipLayer.clientWidth;
if(MouseY+pltsoffsetY+popHeight>document.body.clientHeight)
{
popTopAdjust=-popHeight-pltsoffsetY*1.5;
pltsPoptop.style.display="none";
pltsPopbot.style.display="";
}
else
{
popTopAdjust=0;
pltsPoptop.style.display="";
pltsPopbot.style.display="none";
}
if(MouseX+pltsoffsetX+popWidth>document.body.clientWidth)
{
popLeftAdjust=-popWidth-pltsoffsetX*2;
topleft.style.display="none";
botleft.style.display="none";
topright.style.display="";
botright.style.display="";
}
else
{
popLeftAdjust=0;
topleft.style.display="";
botleft.style.display="";
topright.style.display="none";
botright.style.display="none";
}
pltsTipLayer.style.left=MouseX+pltsoffsetX+document.body.scrollLeft+popLeftAdjust;
pltsTipLayer.style.top=MouseY+pltsoffsetY+document.body.scrollTop+popTopAdjust;
return true;
}
pltsinits();
效果:

加在后台的风格里
/* --增加鼠标效应的css定义开始-- */
.header {
font-family: tahoma, verdana;
font-size: 12px;
color: #ffffff;
font-weight: normal;
background-color:#308701;
}
.selet_bg {
background-color: #ffffff;
}
.f_one {
background-color: #ffffff;
}
下面的加在模板后面:
<script language='JavaScript' src='/js/plus.js'></script>
plus.js文件代码
var pltsPop=null;
var pltsoffsetX = 10;
var pltsoffsetY = 15;
var pltsPopbg="#ffff00";
var pltsPopfg="#111111";
var pltsTitle="";
document.write('<div id=pltsTipLayer style="display: none;position: absolute; z-index:10001"></div>');
function pltsinits()
{
document.onmouseover = plts;
document.onmousemove = moveToMouseLoc;
}
function plts()
{ var o=event.srcElement;
if(o.alt!=null && o.alt!=""){o.dypop=o.alt;o.alt=""};
if(o.title!=null && o.title!=""){o.dypop=o.title;o.title=""};
pltsPop=o.dypop;
if(pltsPop!=null&&pltsPop!=""&&typeof(pltsPop)!="undefined")
{
pltsTipLayer.style.left=-1000;
pltsTipLayer.style.display='';
var Msg=pltsPop.replace(/\n/g,"<br>");
Msg=Msg.replace(/\0x13/g,"<br>");
var re=/\{(.[^\{]*)\}/ig;
if(!re.test(Msg))pltsTitle="[www.86MS.com]86美术网";
else{
re=/\{(.[^\{]*)\}(.*)/ig;
pltsTitle=Msg.replace(re,"$1")+" ";
re=/\{(.[^\{]*)\}/ig;
Msg=Msg.replace(re,"");
Msg=Msg.replace("<br>","");}
var attr=(document.location.toString().toLowerCase().indexOf("list.asp")>0?"nowrap":"");
var content =
'<table style="FILTER:alpha(opacity=90) shadow(color=#bbbbbb,direction=150);" id=toolTipTalbe border=0><tr><td width="100%"><table class=selet_bg cellspacing="0" cellpadding="0" style="width:100%" style="font size:11px;">'+
'<tr id=pltsPoptop><th height=12 valign=bottom class=header><p id=topleft align=left>↖'+pltsTitle+'</p><p id=topright align=right style="display:none">'+pltsTitle+'↗</font></th></tr>'+
'<tr><td "+attr+" class=f_one style="padding-left:10px;padding-right:10px;padding-top: 4px;padding-bottom:4px;line-height:135%">'+Msg+'</td></tr>'+
'<tr id=pltsPopbot style="display:none"><th height=12 valign=bottom class=header><p id=botleft align=left>↙'+pltsTitle+'</p><p id=botright align=right style="display:none">'+pltsTitle+'↘</font></th></tr>'+
'</table></td></tr></table>';
pltsTipLayer.innerHTML=content;
toolTipTalbe.style.width=Math.min(pltsTipLayer.clientWidth,document.body.clientWidth/2.2);
moveToMouseLoc();
return true;
}
else
{
pltsTipLayer.innerHTML='';
pltsTipLayer.style.display='none';
return true;
}
}
function moveToMouseLoc()
{
if(pltsTipLayer.innerHTML=='')return true;
var MouseX=event.x;
var MouseY=event.y;
//window.status=event.y;
var popHeight=pltsTipLayer.clientHeight;
var popWidth=pltsTipLayer.clientWidth;
if(MouseY+pltsoffsetY+popHeight>document.body.clientHeight)
{
popTopAdjust=-popHeight-pltsoffsetY*1.5;
pltsPoptop.style.display="none";
pltsPopbot.style.display="";
}
else
{
popTopAdjust=0;
pltsPoptop.style.display="";
pltsPopbot.style.display="none";
}
if(MouseX+pltsoffsetX+popWidth>document.body.clientWidth)
{
popLeftAdjust=-popWidth-pltsoffsetX*2;
topleft.style.display="none";
botleft.style.display="none";
topright.style.display="";
botright.style.display="";
}
else
{
popLeftAdjust=0;
topleft.style.display="";
botleft.style.display="";
topright.style.display="none";
botright.style.display="none";
}
pltsTipLayer.style.left=MouseX+pltsoffsetX+document.body.scrollLeft+popLeftAdjust;
pltsTipLayer.style.top=MouseY+pltsoffsetY+document.body.scrollTop+popTopAdjust;
return true;
}
pltsinits();
