在进行网页布局设计的时候,经常会根据需要设置相对定位,绝对以及浮动定位最近突然发现了一个奇妙的现象:IE6下绝对定位元素神秘消失或被遮挡, 首先是IE绝对定位元素神秘消失,设置的绝对定位元素,突然从IE浏览器下消失了,然而火狐能正常显示. 尝试对绝对定位元素进行清除浮动操作,IE下能显示,但是出现了莫名的留白,火狐下正常显示.至少这个现象表明,绝对定位元素在IE6下神秘消失对相邻元素的浮动定位有关.

  查了相关资料,高人有这样的解释:

  1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致;
  2.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示;
  3.当绝对定位层的邻近浮动层的宽度等于父层宽度时,以及没有清除浮动时,IE6不显示绝对定位层,IE7/FF显示;
  4.当绝对定位层的邻近浮动层的宽度等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示;

  要解决这个BUG的方法也很简单,让绝对定位层不挨着浮动层放置就好了,还有个更简单的方法,在绝对定位元素和其他元素之间加一个空白的div。

  再来看看绝对定位元素神秘消失被遮挡的现象,先了解一下所涉及到的几个定位特性:
  1. 相对定位元素默认的z-index的数值是0。
  2. 当两个相对定位同时出现时,代码靠后的z-index优先。
  3. 子级遵循父级设定的z-index;如果子级设定了绝对定位、z-index,可以冲破父级显示
  看下面的代码:

 <div style=”position:relative; background:#FF0000; width:200px; height:100px;”>
     <div style=”position:absolute; background:#FFFF00; width:49px; height:50px; left:106px; top:310px; z-index:100“></div>
</div>
<div style=”position:relative; background:#000000; width:200px; height:100px;”></div>
<div style=”position:relative; background:#9900FF; width:200px; height:100px;”></div>

  代码解释:上面是三个相邻的相对定位的层,在第一个层里加了个相对其绝对定位的层,按照理论,这个绝对定位的元素是在三个相对定位元素之上的,但是,实际却没有显示。尝试设置z-index值也没有效。

  网上解决这个bug的办法一般用hack使B为负值,来降低 B 在IE下级别。但是这种方法在z-index为负值时,产生了新的ie bug按照定位的特性,ie的这个bug是可以回避。

  从表面上看下面的层 遮住了上面的绝对定位层,实际上是下面的 层遮住了绝对定位的的父级层,只要将 该父级层的z-index设定大于后面的层即可。

     文章引用地址:http://www.iefans.net/ie-juedui-dingwei-yuansu-xiaoshi/ 作者:iefans

posted @ 2011-07-16 17:01 扶风 阅读(546) 评论(0) 编辑

首先说明事件缘由,为了安全,我把sa用户设置为禁用,又因为我想在数据库服务器上控制,只允许固定IP地址连接访问,所以建立了一个触发器,如下:
USE master 
GO 
CREATE TRIGGER tr_LoginCheck 
ON ALL SERVER 
FOR LOGON 
AS 
IF EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(15)') <> '192.168.1.1' 
ROLLBACK TRAN 
GO

允许的IP地址是另一台服务器的IP地址,执行该触发器后,当我在服务器上使用Windows身份登录的时候,提示错误“无法连接到机器名\实例名”,
其他信息:由于执行触发器,登录名“机器名\用户”的登录失败。已将数据库上下文更改为“master”。已将语言设置更改为简体中文。(Microsoft SQL Server,错误:17892)


而我在另一台服务器上登录时,因为登录帐号只能访问SQL 服务器某一个数据库,所以登录的时候也出现错误:
无法连接到服务器XXX.XXX.XXX.XXX
服务器:消息4064,级别16,状态1
[Microsoft][ODBC SQL Server Driver][SQL Server]无法打开用户默认数据库。登录失败

 

各种提问,某大神告诉我用DAC登录,老实说,孤陋寡闻了,第一次知道这个,于是本机登录,

命令行方式下执行  sqlcmd -A -S sql服务器名

然后执行删除触发器的脚本

DROP TRIGGER  tr_LoginCheck ON ALL SERVER

但是诡异的是有错误提示“消息 3701,级别 11,状态 5,服务器 XXX,第 1 行 无法对 触发器 'tr_LoginCheck' 执行 删除,因为它不存在,或者您没有所需的权限。”

执行select * from sys.server_triggers,却又没有结果,尝试着用客户端登录,却又可以登录了


在处理此问题中,进过google,借鉴了如下3篇博文

http://www.cnblogs.com/Jasmin/archive/2007/12/29/1020233.html

 

http://www.xueit.com/html/2009-05/26_2051_00.html

 

http://www.bianceng.cn/database/SQLServer/200912/12764.htm
posted @ 2011-07-10 00:00 扶风 阅读(72) 评论(0) 编辑