heting

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  40 随笔 :: 9 文章 :: 45 评论 :: 0 Trackbacks

2010年8月6日 #

 

create or replace package CARD_SERVICE_DAY_VIEW_PARAM  is 
   
function set_param(num varcharreturn varchar
   
function get_param  return varchar

   
end CARD_SERVICE_DAY_VIEW_PARAM; 
commit;
   
   
create or replace package body CARD_SERVICE_DAY_VIEW_PARAM is 
       paramValue 
varchar(10); 
       
function set_param(num varcharreturn varchar is 
       
begin 
         paramValue:
=num; 
         
return num; 
        
end;  
       
       
function get_param return varchar is 
       
begin 
         
return paramValue; 
       
end
       
   
end CARD_SERVICE_DAY_VIEW_PARAM;    
commit;

create or replace view CARD_SERVICE_DAY_VIEW as 
select
cs.id,
cs.card_id,
cs.lock_money,
to_char(cs.check_time,
'yyyy-MM-dd hh24:mi'as check_time,
cs.name,cs.phone,( months_between(to_date(CARD_SERVICE_DAY_VIEW_PARAM.get_param(),
'yyyyMMdd'),
to_date(to_char(cs.CHECK_TIME,
'yyyyMMdd'),'yyyyMMdd'))  ) as curr_batch,
(
select count(1from transaction where card_id=cs.card_id and tran_time between cs.check_time and to_date(CARD_SERVICE_DAY_VIEW_PARAM.get_param(),'yyyyMMdd'and (curr_bal-money)<cs.lock_money) as condition,
(
select count(1from service_transaction where batch=(months_between(to_date(CARD_SERVICE_DAY_VIEW_PARAM.get_param(),'yyyyMMdd'),to_date(to_char(cs.CHECK_TIME,'yyyyMMdd'),'yyyyMMdd'))) and s_id=cs.id) as hasAudit 
from card_service cs 
where cs.state='T' 
and 
months_between(to_date(CARD_SERVICE_DAY_VIEW_PARAM.get_param(),
'yyyyMMdd'),to_date(to_char(cs.CHECK_TIME,'yyyyMMdd'),'yyyyMMdd')) in (1,2,3,4,5,6
order by cs.card_id
commit;
posted @ 2010-10-11 15:26 贺挺 阅读(529) | 评论 (0)编辑 收藏

window.showdialog完全手册,解决模态窗口,传值和返回值问题2009-08-28 13:31基本介绍:
showModalDialog() (IE 4+ 支持)
showModelessDialog() (IE 5+ 支持)
window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。

使用方法:
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])

参数说明:
sURL--必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
vArguments--可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取

得传递进来的参数。
sFeatures--可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
1.dialogHeight :对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,

在定义modal方式的对话框时,用px做单位。
2.dialogWidth: 对话框宽度。
3.dialogLeft: 离屏幕左的距离。
4.dialogTop: 离屏幕上的距离。
5.center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。
6.help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。
7.resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改变大小。默认no。
8.status: {yes | no | 1 | 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。
9.scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。
下面几个属性是用在HTA中的,在一般的网页中一般不使用。
10.dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。
11.edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。
12.unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。

参数传递:
1.要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:


<script>
var obj = new Object();
obj.name="51js";
window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px");
</script>
modal.htm
<script>
var obj = window.dialogArguments
alert("您传递的参数为:" + obj.name)
</script>


2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如:

<script>
str =window.showModalDialog("modal.htm",,"dialogWidth=200px;dialogHeight=100px");
alert(str);
</script>
modal.htm
<script>
window.returnValue="/";
</script>
 

posted @ 2010-08-26 11:00 贺挺 阅读(240) | 评论 (0)编辑 收藏

AxWindowsMediaPlayer的详细用法
AxWindowsMediaPlayer的详细用法收藏
找我把,剛做過,相當熟悉


属性/方法名: 说明: 
[基本属性]   
URL:String; 指定媒体位置,本机或网络地址 
uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible 
playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪 
enableContextMenu:Boolean; 启用/禁用右键菜单 
fullScreen:boolean; 是否全屏显示 
[controls] wmp.controls //播放器基本控制 
controls.play; 播放 
controls.pause; 暂停 
controls.stop; 停止 
controls.currentPosition:double; 当前进度 
controls.currentPositionString:string; 当前进度,字符串格式。如“00:23” 
controls.fastForward; 快进 
controls.fastReverse; 快退 
controls.next; 下一曲 
controls.previous; 上一曲 
[settings] wmp.settings //播放器基本设置 
settings.volume:integer; 音量,0-100 
settings.autoStart:Boolean; 是否自动播放 
settings.mute:Boolean; 是否静音 
settings.playCount:integer; 播放次数 
[currentMedia] wmp.currentMedia //当前媒体属性 
currentMedia.duration:double; 媒体总长度 
currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24” 
currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址 
currentMedia.setItemInfo(const string); 通过属性名设置媒体信息 
currentMedia.name:string; 同 currentMedia.getItemInfo("Title") 
[currentPlaylist] wmp.currentPlaylist //当前播放列表属性 
currentPlaylist.count:integer; 当前播放列表所包含媒体数 
currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia 
AxWindowsMediaPlayer控件的属性收藏
MediaPlayer1.Play          播放  
MediaPlayer1.Stop          停止  
MediaPlayer1.Pause          暂停  
MediaPlayer1.PlayCount        文件播放次数  
MediaPlayer1.AutoRewind       是否循环播放  
MediaPlayer1.Balance         声道  
MediaPlayer1.Volume         音量  
MediaPlayer1.Mute          静音  
MediaPlayer1.EnableContextMenu    是否允许在控件上点击鼠标右键时弹出快捷菜单  
MediaPlayer1.AnimationAtStart    是否在播放前先播放动画  
MediaPlayer1.ShowControls      是否显示控件工具栏  
MediaPlayer1.ShowAudioControls    是否显示声音控制按钮  
MediaPlayer1.ShowDisplay       是否显示数据文件的相关信息  
MediaPlayer1.ShowGotoBar       是否显示Goto栏  
MediaPlayer1.ShowPositionControls  是否显示位置调节按钮  
MediaPlayer1.ShowStatusBar      是否显示状态栏  
MediaPlayer1.ShowTracker       是否显示进度条  
MediaPlayer1.FastForward       快进  
MediaPlayer1.FastReverse       快退  
MediaPlayer1.Rate          快进/快退速率  
MediaPlayer1.AllowChangeDisplaySize 是否允许自由设置播放图象大小  
MediaPlayer1.DisplaySize       设置播放图象大小  
    1-MpDefaultSize         原始大小  
    2-MpHalfSize           原始大小的一半  
    3-MpDoubleSize          原始大小的两倍  
    4-MpFullScreen          全屏  
    5-MpOneSixteenthScreen      屏幕大小的1/16  
    6-MpOneFourthScreen       屏幕大小的1/4  
    7-MpOneHalfScreen        屏幕大小的1/2  
MediaPlayer1.ClickToPlay       是否允许单击播放窗口启动Media Player  
 

http://blog.csdn.net/brouse8079/archive/2007/10/17/1829885.aspx

 

AxWindowsMediaPlayer常用属性
2008-03-18 21:28
2. Ctlcontrols属性

Ctlcontrols属性是AxWindowsMediaPlayer的一个重

要属性, 此控件中有许多常用成员。

(1) 方法play

用于播放多媒体文件,其格式为:

窗体名.控件名.Ctlcontrols.play()

如: AxWindowsMediaPlayer1.Ctlcontrols.play()

‘此处缺省窗体名是Me

(2) 方法pause

用于暂停正在播放的多媒体文件,其格式为:

窗体名.控件名.Ctlcontrols.pause()

如: AxWindowsMediaPlayer1.Ctlcontrols.pause()

(3) 方法stop

用于停止正在播放的多媒体文件,其格式为:

窗体名.控件名.Ctlcontrols.stop()

如: AxWindowsMediaPlayer1.Ctlcontrols.stop()

(4) 方法fastforward

用于将正在播放的多媒体文件快进,其格式为:

窗体名.控件名.Ctlcontrols.fastforward()

如:

AxWindowsMediaPlayer1.Ctlcontrols.forward()

(5) 方法fastreverse

窗体名.控件名.Ctlcontrols.fastreverse()

如:

AxWindowsMediaPlayer1.Ctlcontrols.fastreverse

()

6. 属性CurrentPosition

用于获取多媒体文件当前的播放进度,其值是数值类

型,使用格式为:

窗体名.控件名.Ctlcontrols.currentPosition

d1=AxWindowsMediaPlayer1.Ctlcontrols.currentPosi

tion

其中d1 是一个整型变量。

7. 属性Duration

用于获取当前多媒体文件的播放的总时间,其值为数

值类型,其使用格式为:

窗体名.控件名.currentMedia.duration

如:d2

=AxWindowsMediaPlayer1.currentMedia.duration

其中d2是一个整型变量。
controls.currentPositionString:string; 当前进

度,字符串格式。如“00:23”


属性/方法名: 说明: 
[基本属性]   
URL:String; 指定媒体位置,本机或网络地址 
uiMode:String; 播放器界面模式,可为Full, Mini,

None, Invisible 
playState:integer; 播放状态,1=停止,2=暂停,

3=播放,6=正在缓冲,9=正在连接,10=准备就绪

player.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange);

private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
  // Test the current state of the player and display a message for each state.
  switch (e.newState)
  {
  case 0: // Undefined
  currentStateLabel.Text = "Undefined";
  break;

  case 1: // Stopped
  currentStateLabel.Text = "Stopped";
  break;

  case 2: // Paused
  currentStateLabel.Text = "Paused";
  break;

  case 3: // Playing
  currentStateLabel.Text = "Playing";
  break;

  case 4: // ScanForward
  currentStateLabel.Text = "ScanForward";
  break;

  case 5: // ScanReverse
  currentStateLabel.Text = "ScanReverse";
  break;

  case 6: // Buffering
  currentStateLabel.Text = "Buffering";
  break;

  case 7: // Waiting
  currentStateLabel.Text = "Waiting";
  break;

  case 8: // MediaEnded
  currentStateLabel.Text = "MediaEnded";
  break;

  case 9: // Transitioning
  currentStateLabel.Text = "Transitioning";
  break;

  case 10: // Ready
  currentStateLabel.Text = "Ready";
  break;

  case 11: // Reconnecting
  currentStateLabel.Text = "Reconnecting";
  break;

  case 12: // Last
  currentStateLabel.Text = "Last";
  break;

  default:
  currentStateLabel.Text = ("Unknown State: " + e.newState.ToString());
  break;
  }
}
 

 


enableContextMenu:Boolean; 启用/禁用右键菜单 
fullScreen:boolean; 是否全屏显示 
controls.currentPosition:double; 当前进度 
controls.fastForward; 快进 
controls.fastReverse; 快退 
controls.next; 下一曲 
controls.previous; 上一曲 
[settings] wmp.settings //播放器基本设置 
settings.volume:integer; 音量,0-100 
settings.autoStart:Boolean; 是否自动播放 
settings.mute:Boolean; 是否静音 
settings.playCount:integer; 播放次数 
[currentMedia] wmp.currentMedia //当前媒体属性 
currentMedia.duration:double; 媒体总长度 
currentMedia.durationString:string; 媒体总长度

,字符串格式。如“03:24” 
currentMedia.getItemInfo(const string); 获取当

前媒体信息"Title"=媒体标题,"Author"=艺术

家,"Copyright"=版权信息,"Description"=媒体内

容描述,"Duration"=持续时间(秒),"FileSize"=

文件大小,"FileType"=文件类型,"sourceURL"=原

始地址 
currentMedia.setItemInfo(const string); 通过属

性名设置媒体信息 
currentMedia.name:string; 同

currentMedia.getItemInfo("Title") 
[currentPlaylist] wmp.currentPlaylist //当前播

放列表属性 
currentPlaylist.count:integer; 当前播放列表所

包含媒体数 
currentPlaylist.Item[integer]; 获取或设置指定

项目媒体信息,其子属性同wmp.currentMedia
posted @ 2010-08-19 13:54 贺挺 阅读(1276) | 评论 (0)编辑 收藏

最近有个项目将要用到WebSphere,所以我提前来熟悉一下,在WebSphere7.0上安装完一个struts2的小项目测试,在tomcat下该项目没有任何问题,当我把tomcat下打包的war包在WebSphere中安装后,就只能访问html页面了,其余的struts2的请求,跟jsp页面都不能访问,提示您无权查看此页面,跑到日志文件中发现,启动时有如下错误:
[10-8-18 15:17:41:079 CST] 00000010 webapp        E com.ibm.ws.webcontainer.webapp.WebApp initializeExtensionProcessors SRVE0280E: 扩展处理器无法在工厂 [com.ibm.ws.jsp.webcontainerext.ws.WASJSPExtensionFactory@2bec2bec] 中进行初始化:java.lang.ClassCastException: com.sun.faces.application.WebappLifecycleListener incompatible with java.util.EventListener
        at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.
<init>(AbstractJSPExtensionProcessor.java:250)
        at com.ibm.ws.jsp.webcontainerext.ws.WASJSPExtensionProcessor.
<init>(WASJSPExtensionProcessor.java:70)
        at com.ibm.ws.jsp.webcontainerext.ws.WASJSPExtensionFactory.createProcessor(WASJSPExtensionFactory.java:
251)
        at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionFactory.createExtensionProcessor(AbstractJSPExtensionFactory.java:
75)
        at com.ibm.ws.webcontainer.webapp.WebApp.initializeExtensionProcessors(WebApp.java:
1313)
        at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish(WebApp.java:
360)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:
298)
        at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:
100)
        at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:
166)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:
731)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:
616)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:
376)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:
668)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:
1122)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:
1315)
        at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:
619)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:
940)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:
725)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:
2046)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:
439)
        at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:
123)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:
382)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$
300(CompositionUnitMgrImpl.java:110)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:
949)
        at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:
349)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:
1550)

[
10-8-18 15:17:41:562 CST] 00000010 config        I   Initializing Sun's JavaServer Faces implementation (1.2_07-b03-FCS) for context '/cc'
[10-8-18 15:17:44:579 CST] 00000010 webapp        W com.ibm.ws.webcontainer.webapp.WebApp initializeTargetMappings SRVE0269W: 找不到用于处理 JSP 的扩展处理器。
[
10-8-18 15:17:44:584 CST] 00000010 webcontainer  I com.ibm.ws.wswebcontainer.VirtualHost addWebApplication SRVE0250I: Web 模块 null 已绑定到 default_host[*:9080,*:80,*:9443,*:5060,*:5061,*:443]。
[
10-8-18 15:17:44:616 CST] 0000000f webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: 正在装入 Web 模块:WIM。
[
10-8-18 15:17:44:793 CST] 0000000f WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: 将为应用程序键 admin_host/wim 创建新的会话上下文
[
10-8-18 15:17:44:933 CST] 0000000f webcontainer  I com.ibm.ws.wswebcontainer.VirtualHost addWebApplication SRVE0250I: Web 模块 WIM 已绑定到 admin_host[*:9060,*:9043]。
[
10-8-18 15:17:45:194 CST] 00000011 webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: 正在装入 Web 模块:PlantsByWebSphere Sample Gallery Web Application。
[
10-8-18 15:17:45:262 CST] 00000010 ApplicationMg A   WSVR0221I: 应用程序已启动:StrutsTest_war
[
10-8-18 15:17:45:288 CST] 00000010 CompositionUn A   WSVR0191I: 已启动 BLA WebSphere:blaname=StrutsTest_war 中的组合单元 WebSphere:cuname=StrutsTest_war。

网上百度了一大堆都没有解决掉,
有的说在应用程序服务器 > WebSphere_Portal > Web 容器 > 定制属性->新建属性
com.ibm.ws.webcontainer.invokefilterscompatibility  true
添加以上属性,但是没有什么作用。

最后我将myeclipse中发布到WebSphere中的war包,去安装后,该问题消失了,一切访问都没问题。
比对一下里边的包,发下tomcat的war包多了三个jar包jsf-api.jar,jsf-impl.jar,jstl-1.2.jar,不管三七二十一,先删了再说,再次安装到WebSphere问题没在出现。
再次查看以前的错误信息原来说的是jsf-impl.jar包中的com.sun.faces.application.WebappLifecycleListener与java.util.EventListener不兼容导致。

 

posted @ 2010-08-17 16:24 贺挺 阅读(2968) | 评论 (0)编辑 收藏

ifconfig eth0 1.2.3.4(IP地址) netmask 255.0.0.0(网络掩码) up
posted @ 2010-08-16 10:17 贺挺 阅读(213) | 评论 (0)编辑 收藏

在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>、<th>、<caption>等,而像<div>、<span>这样的元素是没有valign特性的,因此使用vertical-align对它们不起作用。

CSS网页布局DIV水平居中的各种方法

一、单行垂直居中

如果一个容器中只有一行文字,对它实现居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可。如:

imoker.cn(爱摩客)提供的代码片段:

div {  
  height:25px;  
  line-height:25px;  
  overflow:hidden;  
}
这段代码很简单,后面使用overflow:hidden的设置是为了防止内容超出容器或者产生自动换行,这样就达不到垂直居中效果了。

imoker.cn(爱摩客)提供的代码片段:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>  
    <title> 单行文字实现垂直居中 </title>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <style type="text/css">  
      body { font-size:12px;font-family:tahoma;}  
      div {  
        height:25px;  
        line-height:25px;  
        border:1px solid #FF0099;  
        background-color:#FFCCFF;  
      }  
    </style>  
  </head>  
  <body>  
    <div>现在我们要使这段文字垂直居中显示!</div>  
  </body>  
</html>
不过在Internet Explorer 6及以下版本中,这和方法不支持对图片设置垂直居中。

二、多行未知高度文字的垂直居中

如果一段内容,它的高度是可变的那么我们就可以使用上一节讲到的实现水平居中时使用到的最后一种方法,就是设定Padding,使上下的padding值相同即可。同样的,这也是一种“看起来”的垂直居中方式,它只不过是使文字把<div>完全填充的一种方式而已。可以使用类似下面的代码:

imoker.cn(爱摩客)提供的代码片段:

div {  
  padding:25px;  
}
这种方法的优点就是它可以在任何浏览器上运行,并且代码很简单,只不过这种方法应用的前提就是容器的高度必须是可伸缩的。

imoker.cn(爱摩客)提供的代码片段:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>  
    <title> 多行文字实现垂直居中 </title>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <style type="text/css">  
      body { font-size:12px;font-family:tahoma;}  
      div {  
        padding:25px;  
        border:1px solid #FF0099;  
        background-color:#FFCCFF;  
        width:760px;  
      }  
    </style>  
  </head>  
  <body>  
    <div><pre>现在我们要使这段文字垂直居中显示!  
      div {  
        padding:25px;  
        border:1px solid #FF0099;  
        background-color:#FFCCFF;  
      }  
    </pre></div>  
  </body>  
</html>
三、多行文本固定高度的居中

在本文的一开始,我们已经说过CSS中的vertical-align属性只会对拥有valign特性的(X)HTML标签起作用,但是在CSS中还有一个display属性能够模拟<table>,所以我们可以使用这个属性来让<div>模拟<table>就可以使用vertical-align了。注意,display:table和display:table-cell的使用方法,前者必须设置在父元素上,后者必须设置在子元素上,因此我们要为需要定位的文本再增加一个<div>元素:

imoker.cn(爱摩客)提供的代码片段:

div#wrap {  
  height:400px;  
  display:table;  
}  
div#content {  
  vertical-align:middle;  
  display:table-cell;  
  border:1px solid #FF0099;  
  background-color:#FFCCFF;  
  width:760px;  
}


imoker.cn(爱摩客)提供的代码片段:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml">   
  <head>   
    <title> 多行文字实现垂直居中 </title>   
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
    <style type="text/css">   
      body { font-size:12px;font-family:tahoma;}   
        div#wrap {   
        height:400px;   
        display:table;   
      }   
      div#content {   
        vertical-align:middle;   
        display:table-cell;   
        border:1px solid #FF0099;   
        background-color:#FFCCFF;   
        width:760px;   
      }   
    </style>   
  </head>   
  <body>   
    <div id="wrap">   
      <div id="content"><pre>现在我们要使这段文字垂直居中显示!   
        div#wrap {   
          height:400px;   
          display:table;   
        }   
        div#content {   
          vertical-align:middle;   
          display:table-cell;   
          border:1px solid #FF0099;   
          background-color:#FFCCFF;   
          width:760px;   
       }   
      </pre></div>   
    </div>   
  </body>   
</html>
这个方法应该是很理想了,但是不幸的是Internet Explorer 6 并不能正确地理解display:table和display:table-cell,因此这种方法在Internet Explorer 6及以下的版本中是无效的。嗯,这让人很郁闷!不过我们还其它的办法。

四、在Internet Explorer中的解决方案

在Internet Explorer 6及以下版本中,在高度的计算上存在着缺陷的。在Internet Explorer 6中对父元素进行定位后,如果再对子元素进行百分比计算时,计算的基础似乎是有继承性的(如果定位的数值是绝对数值没有这个问题,但是使用百分比计算的基础将不再是该元素的高度,而从父元素继承来的定位高度)。例如,我们有下面这样一个(X)HTML代码段:

imoker.cn(爱摩客)提供的代码片段:

<div id="wrap">  
  <div id="subwrap">  
    <div id="content">  
    </div>  
  </div>  
</div>
如果我们对subwrap进行了绝对定位,那么content也会继承了这个属性,虽然它不会在页面中马上显示出来,但是如果再对content进行相对定位的时候,你使用的100%分比将不再是content原有的高度。例如,我们设定了subwrap的position为40%,我们如果想使content的上边缘和wrap重合的话就必须设置top:-80%;那么,如果我们设定subwrap的top:50%的话,我们必须使用100%才能使content回到原来的位置上去,但是如果我们把content也设置50%呢?那么它就正好垂直居中了。所以我们可以使用这中方法来实现Internet Explorer 6中的垂直居中:

imoker.cn(爱摩客)提供的代码片段:

div#wrap {  
  border:1px solid #FF0099;  
  background-color:#FFCCFF;  
  width:760px;  
  height:400px;  
  position:relative;  
}  
div#subwrap {  
  position:absolute;  
  border:1px solid #000;  
  top:50%;  
}  
div#content {  
  border:1px solid #000;  
  position:relative;  
  top:-50%;  
}
当然,这段代码只能在Internet Exlporer 6等计算存在问题的浏览器中才会有作用。(不过我不解,我查阅了很多文章,不知道是因为出处相同还是什么原因,似乎很多人都不愿意去解释Internet Exlporer 6中这个Bug的原理,我也只是了解了一点皮毛,还要再研究)

imoker.cn(爱摩客)提供的代码片段:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>  
    <title> 多行文字实现垂直居中 </title>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <style type="text/css">  
      body { font-size:12px;font-family:tahoma;}  
      div#wrap {  
        border:1px solid #FF0099;  
        background-color:#FFCCFF;  
        width:760px;  
        height:400px;  
        position:relative;  
      }  
      div#subwrap {  
        position:absolute;  
        top:50%;  
      }  
      div#content {  
          position:relative;  
          top:-50%;  
      }  
    </style>  
  </head>  
  <body>  
    <div id="wrap">  
      <div id="subwrap">  
        <div id="content"><pre>现在我们要使这段文字垂直居中显示!  
          div#wrap {  
            border:1px solid #FF0099;  
            background-color:#FFCCFF;  
            width:760px;  
            height:500px;  
            position:relative;  
          }  
          div#subwrap {  
            position:absolute;  
            border:1px solid #000;  
            top:50%;  
          }  
          div#content {  
            border:1px solid #000;  
            position:relative;  
            top:-50%;  
          } 
        </pre></div>  
      </div>  
    </div>  
  </body>  
</html>
五、完美的解决方案

那么我们综合上面两种方法就可以得到一个完美的解决方案,不过这要用到CSS hack的知识。对于如果使用CSS Hack来区分浏览器,你可以参考这篇“简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera”:

imoker.cn(爱摩客)提供的代码片段:

div#wrap {  
  display:table;  
  border:1px solid #FF0099;  
  background-color:#FFCCFF;  
  width:760px;  
  height:400px;  
  _position:relative;  
  overflow:hidden;  
}  
div#subwrap {  
  vertical-align:middle;  
  display:table-cell;  
  _position:absolute;  
  _top:50%;  
}  
div#content {  
  _position:relative;  
  _top:-50%;  
}
至此,一个完美的居中方案就产生了。

imoker.cn(爱摩客)提供的代码片段:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>  
    <title> 多行文字实现垂直居中 </title>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <style type="text/css">  
      body { font-size:12px;font-family:tahoma;}  
      div#wrap {  
        display:table;  
        border:1px solid #FF0099;  
        background-color:#FFCCFF;  
        width:760px;  
        height:400px;  
        _position:relative;  
        overflow:hidden;  
      }  
      div#subwrap {  
        vertical-align:middle;  
        display:table-cell;  
        _position:absolute;  
        _top:50%;  
      }  
      div#content {  
        _position:relative;  
        _top:-50%;  
      }  
    </style>  
  </head>  
  <body>  
    <div id="wrap">  
      <div id="subwrap">  
        <div id="content"><pre>现在我们要使这段文字垂直居中显示!  
          div#wrap {  
            border:1px solid #FF0099;  
            background-color:#FFCCFF;  
            width:760px;  
            height:500px;  
            position:relative;  
          }  
          div#subwrap {  
            position:absolute;  
            border:1px solid #000;  
            top:50%;  
          }  
          div#content {  
            border:1px solid #000;  
            position:relative;  
            top:-50%;  
          } 
        </pre></div>  
      </div>  
    </div>  
  </body>  
</html>
p.s. 垂直居中vertical-align的值是middle,而水平居中align的值是center,虽然同是居中但关键字不同。
posted @ 2010-08-06 10:32 贺挺 阅读(430) | 评论 (0)编辑 收藏