去除触发链接时出现的虚线框

链接在被点击时会出现虚线框,即使松开了也仍然存在,在有的时候显得不美观。既然不好看,那就不要它。怎样去掉呢?

方法一 IE下可使用其私有的html属性:hideFoucs,在标签的结构中加入hidefocus=”true”属性。即:

<a href=”http://www.17css.com” hidefocus=”true” title=”17css-青色’s Blog”>17css-青色’s Blog</a>

而在 Firfox 浏览器中则相对比较容易,直接给标签 a 定义样式 outline:none; 就可以了,即:

.HideFocus { outline:none; }

方法二 也可以使用CSS expression来控制,但不推荐使用,毕竟expression在性能上有问题。

.HideFocus {
hide-focus:expression(this.hideFocus=true);  /* for ie 5+ */
outline:none;  /* for firefox 1.5 + */
}

除链接外,该CSS同样适用于input和button标签。

方法三 将以下代码保存为link.htc文件:

<public:attach event=”onfocus” onevent=”hscfsy()”/>
<script type=”text/javascript”>
function hscfsy(){ this.blur(); }
</script>

链接样式中加入:

a { behavior:url(link.htc); }

IE中已经没有问题,但是在FF中虚线框依然存在。再增加一条样式定义来解决此问题:

a:focus { outline:0; }

这样IE、FF中虚线都不存在了。

覆盖select,使之不可操作

自定义的层给select遮挡住是一个老问题了,不过可喜的是ie7和ff都已经支持select的zIndex,只要给层设定高的zIndex就能覆盖select了,可惜对于ie6这个问题还是需要解决。

覆盖select据我所知有两个比较好的方法:

1,显示层时,先隐藏select,关闭层时再重新显示;

2,用一个iframe作为层的底,来遮住select。

方法1应该都明白,方法2就是利用iframe可以覆盖select的特性,只要把一个iframe作为层的底部就可以覆盖下面的select了,程序中是这样使用的:this.Lay.innerHTML = ‘<iframe style=”position:absolute;top:0;left:0;width:100%;height:100%;filter:alpha(opacity=0);”></iframe>’可以看出这个透明的iframe也以同样覆盖整个页面,如果是有内容显示的页面最好设置z-index:-1;确保iframe在层的底部。个人觉得使用方法2比较好,但始终是改变了页面结构,有时会比较难控制,至于方法1就比较容易方便。

修正IE6不支持position:fixed的问题

众所周知IE6不支持position:fixed,这个bug与IE6的双倍margin和不支持PNG透明等bug一样臭名昭著。前些天我做自己的博客模板的时候,遇到了这个问题。当时就简单的无视了IE6——尽管有几个使用IE6的朋友,一起BS我……但是对于大项目或商业网站,如果有用到这个属性的时候,是不可能直接无视的。

你是如何让position:fixed在IE6中工作的?

本文所使用的技巧是用了一条Internet Explorer的CSS表达式(expression)。你不可以直接使用该表达式,因为它可能会因为缓存而不更新。解决这一点的最简单的方式是使用eval包裹你的语句。

如何解决“振动”的问题?

显然IE有一个多步的渲染进程。当你滚动或调整你的浏览器大小的时候,它将重置所有内容并重画页面,这个时候它就会重新处理css表达式。这会引起一个丑陋的“振动”bug,在此处固定位置的元素需要调整以跟上你的(页面的)滚动,于是就会“跳动”。

解决此问题的技巧就是使用background-attachment:fixed为body或html元素添加一个background-image。这就会强制页面在重画之前先处理CSS。因为是在重画之前处理CSS,它也就会同样在重画之前首先处理你的CSS表达式。这将让你实现完美的平滑的固定位置元素!

这个方案并不是我提供的。我是在网上的某个地方读到这些的。如果你知道是谁原创了这个方法,请告诉前端观察。

我发现的另外一个小技巧是,你根本无需一个真实的图片!你可以使用一个about:blank替代一个spacer.gif图片,而且它工作的同样出色。

CSS Code123456789101112/*让position:fixed在IE6下可用! */

.fixed-top/* 头部固定 */{position:fixed;bottom:auto;top:0px;}

.fixed-bottom/* 底部固定 */{position:fixed;bottom:0px;top:auto;}

.fixed-left/* 左侧固定 */{position:fixed;right:auto;left:0px;}

.fixed-right/* 右侧固定 */{position:fixed;right:0px;left:auto;}/* 上面的是除了IE6的主流浏览器通用的方法 */

* html,* html body /* 修正IE6振动bug */{background-image:url(about:blank);background-attachment:fixed;}

* html .fixed-top/* IE6 头部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop));}

* html .fixed-right/* IE6 右侧固定 */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));}

* html .fixed-bottom/* IE6 底部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));}

* html .fixed-left/* IE6 左侧固定 */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft));}

 

【转】使IE6下PNG背景透明的七种方法任你选

PNG图像格式介绍:

PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式 网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可 存储多到16位的α通道数据。

IE6下PNG背景透明的显示问题

PNG格式比起GIF来表现色彩更丰富,特别是表现渐变以及背景透明的渐变要比GIF格式出色很多,目前,最新的浏览器基本上都支持PNG格式。但是IE6不支持PNG背景透明,会显示一个灰色的框。

IE6下PNG背景透明的解决办法

.pngImg { background:url(image.png); _background:url(image.gif);}
注意上文的_号,目前IE7,8以及Firefox浏览器等都不支持此CSS语法,只有IE6识别。因此,其他浏览器会调用PNG,而IE6刚调用GIF。

二.滤镜filter解决IE6下背景灰

background:url(a.png) repeat-x 0 0; _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=”a.png” ,sizingMethod=”crop”);
上面的原理是其他调用PNG,IE6,则先设背景没有,然后调用滤镜使之显示PNG图片。

缺陷:IE6下背景无法平铺,这个问题很严重。同时在性能上也有小问题,页面中次数不是很多的时候该办法还是可行的。

AlphaImageLoader滤镜会导致该区域的链接和按钮无效,解决的办法是为链接或按钮添加:position: relative;这样条代码,使其相对浮动。AlphaImageLoader无法设置背景的重复,所以对图片的切图精度会有很高的精确度要求。

解决IE下的链接无效可用最后面的方法:

三.利用JS解决html中的img(插入在网页中的png图像)png背景灰问题

页面中插入一段js即可。原理同上,只是将img标签用<span>标签替换掉,并且通过滤镜设置该<span>标签的background。它会将所有插入的PNG都如此处理。
<!–[if IE 6]>
<script>
function correctPNG()
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i];
var imgName = img.src.toUpperCase();
if (imgName.substring(imgName.length-3, imgName.length) == “PNG”)
{
var imgID = (img.id) ? “id='” + img.id + “‘ ” : “”;
var imgClass = (img.className) ? “class='” + img.className + “‘ ” : “”;
var imgTitle = (img.title) ? “title='” + img.title + “‘ ” : “title='” + img.alt + “‘ “;
var imgStyle = “display:inline-block;” + img.style.cssText;
if (img.align == “left”) imgStyle = “float:left;” + imgStyle;
if (img.align == “right”) imgStyle = “float:right;” + imgStyle;
if (img.parentElement.href) imgStyle = “cursor:hand;” + imgStyle;
var strNewHTML = “<span “+ imgID + imgClass + imgTitle + “style=”” + “width:” + img.width + “px; height:” + img.height + “px;” + imgStyle + “;”
+ “filter:progid:DXImageTransform.Microsoft.AlphaImageLoader” + “(src='” + img.src + “‘, sizingMethod=’scale’);”></span>”;
img.outerHTML = strNewHTML;
i = i-1;
}
}
}
window.attachEvent(“onload”, correctPNG);
</script>
<![endif]–> ​

四.调用iepngfix.htc解决IE6PNG背景灰及拉伸问题

此方法来自:http://www.twinhelix.com/css/iepngfix/ 此方法基于Winodws平台,在Linux下不支持htc,没有验证过,但有网友发文证实。

以下片段添加至css文件

<div class=”pngImg”>PNG背景图片</div> <img src=”png图片” class=”pngImg” alt=””>
详细的应用方法这里就不介绍啦。

在逼不得已且身不由己必须使用PNG的情况下,这种方法应该是比较优秀的,虽然不能完美的解决IE6的平铺,但是至少是实现了拉伸,使得很多情况下可以代替平铺来使用。当然效率的问题任然是存在

五.让“块”透明的方法

.div { FILTER: alpha(opacity=20); moz-opacity: 0.2; opacity: 0.2;}
测试IE6,IE7,IE8,FF2,FF3均通过。提示:IE6,IE7需设置一个宽度(100%也行),否则看不到效果。

六.DD_belatedPNG,解决IE6不支持PNG绝佳方案

整个互联网上解决这个IE6的透明PNG的方案也是多不胜数,从使用IE特有的滤镜或是e xpression,再到javascript+透明GIF替代.但是这些方法都有一个缺点,就是不支持CSS中backgrond-position与 background-repeat.

而我今天介绍DD_belatedPNG,只需要一个理由,就是它支持backgrond-position与background-repeat.这是其他js插件不具备的.同时DD_belatedPNG还支持a:hover属性,以及<img>.

看Demo: http://www.ediyang.com/demo/DD_Png/

原理
这个js插件使用了微软的VML语言进行绘制,而其他多数解决PNG问题的js插件用的是AlphaImageLoader滤镜.

使用方法
1.在这里下载DD_belatedPNG.js文件.
http://dillerdesign.com/experiment/DD_belatedPNG/#download

2.在网页中引用,如下:
<!–[if IE 6]>
<script src=”DD_belatedPNG.js” mce_src=”DD_belatedPNG.js”></script>
<script type=”text/javascript”>     /* EXAMPLE */   DD_belatedPNG.fix(‘.png_bg’);   /* 将 .png_bg 改成你应用了透明PNG的CSS选择器,例如我例子中的’.trans’*/   </script> <![endif]–>
3.有2种调用函数,一种是DD_belatedPNG.fix(),如上代码.另一种是fix(),这中方法需要在函数内指出css选择器名.
使用a:hover请留意
5-25 更新:如果你也像jutoy同学一样想要用透明PNG作为a:hover时的背景图片,那么你需要留意你的代码,需要以”a:hover”来作为选择器. 否则可能会导致无法成功.同时我也更新了demo,请需要的更新查看.接着我们看看正确的代码:
<!–[if IE 6]>
<script type=”text/javascript” src=”js/DD_belatedPNG.js” ></script>
<script type=”text/javascript”>   DD_belatedPNG.fix(‘.trans,.box a:hover’);   </script>
<![endif]–>
七.通过 javascript 和 css 滤镜解决 IE 整站 png 背景透明问题
<script type=”text/javascript” language=”javascript”>
function enablePngImages()
{ var imgArr = document.getElementsByTagName(“IMG”);
for(i=0; i<imgArr.length; i++){
if(imgArr[i].src.toLowerCase().lastIndexOf(“.png”) != -1)
{
imgArr[i].style.filter = “progid:DXImageTransform.Microsoft.AlphaImageLoader(src='” + imgArr[i].src + “‘, sizingMethod=’auto’)”;
imgArr[i].src = “spacer.gif”;
}
if(imgArr[i].currentStyle.backgroundImage.lastIndexOf(“.png”) != -1)
{
var img = imgArr[i].currentStyle.backgroundImage.substring(5,imgArr[i].currentStyle.backgroundImage.length-2);
imgArr[i].style.filter = “progid:DXImageTransform.Microsoft.AlphaImageLoader(src='”+img+”‘, sizingMethod=’crop’)”;
imgArr[i].style.backgroundImage = “url(spacer.gif)”;
}
}
}
function enableBgPngImages(bgElements)
{
for(i=0; i<bgElements.length; i++)
{
if(bgElements[i].currentStyle.backgroundImage.lastIndexOf(“.png”) != -1)
{     //alert(bgElements[i]);
var img = bgElements[i].currentStyle.backgroundImage.substring(5,bgElements[i].currentStyle.backgroundImage.length-2);
bgElements[i].style.filter = “progid:DXImageTransform.Microsoft.AlphaImageLoader(src='”+img+”‘, sizingMethod=’crop’)”;
bgElements[i].style.backgroundImage = “url(spacer.gif)”;
}
}
}
</script>
<img src=”pngpic.png” alt=”” border=”0″ />
<!–[if lt IE 7]>
<script type=’text/javascript’>
var bgElements; enablePngImages(); if(bgElements){    enableBgPngImages(bgElements); }
</script>
<![endif]–>

.pngImg {behavior: url(iepngfix.htc);}
以下片段添加至html文件一.IE6使用gif,其他则使用png来解决PNG背景灰

 

根据转载说个注意事项,DD_belatedPNG.js这个插件和iepng.js新版本的用法是一样的,虽然js代码不一样,但是最后为png生成的代码没看到有什么区别(就连产生的问题都是一样的),所以用哪个都可以。就是关于DD_belatedPNG.js插件,ie6的选择器是必加的,否则该插件可能会对ie8正常的png图片带来不正常的影响。另外在包含大量png的页面中,根据布局的差异,这个插件仍然会产生一些问题,透明是可以透明,但是会改变图片的位置,具体原因没有深研究,目测是因为插件对图片处理后给图片一个绝对定位(position),所以在一些特殊布局下页面就会走形,因此如果一定要用到png图片,一定要多测试。

Chrome下用jquery的load()无效问题

昨天晚上瞬间写出两个无刷新切页面的小程序,有点小开心。正在兴奋的时候,用Chrom测试页面毛都不显示,立时顿足。

最可恶的是jquery的其他内容正常运行,让我调错都不知道怎么调。

用尽各种方法,搞了2个多小时,终于…

Chrom下使用load()函数读取页面有个先决条件,就是要有个服务器环境,我把页面放在iis下面,就好了~

找到一个IE6不兼容的hack,然后……我疯了

之前总能碰到一种问题,就是你定义好了一些东西的背景,但在IE6最后显示的时候背景不是你设置的那个,左看右看也发现不了这个离奇的现象,今天我终于找到了问题所在。

.button{style}

.button.active{style}

我们有的时候会定义这样的class来解决

<div class=”button active”></div>

这样的需要。

常用的浏览器都没有什么问题,单单这么写IE6也没事,但是你要这么写了

.button{style}

.input{style}

.button.active{style:background:url[1]}

.input.active{style:background:url[2]}

就来事了,IE6会任性地把.button.active的url[1]替换成url[2]。

然后,我就疯了!

.button{style}

.input{style}

.button .active{style:background:url[1]}

.input .active{style:background:url[2]}

这样的写法是不存在问题的。

.button{style}

.input{style}

.button.active{style:background:url[1]}

.input.activea{style:background:url[2]}

这样的写法也是不存在问题的。

然后,然后~我吃药去

jQuery实现按比例缩放图片

在网站中通常要显示各种尺寸的图片,但图片的尺寸不一定符合显示的要求。如果直接指定img的width和height属性的话图片又很可能会被挤压的变形。下面这个代码可以把图片放进一个imgBox,并根据imgBox的大小来按比例缩放图片以适应他,同时图片会在imgBox中居中显示。来看代码:

首先是HTML:


1<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
2<html xmlns=”http://www.w3.org/1999/xhtml”>
3<head>
4<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
5<title>按比例自动缩放图片</title>
6
7<script type=”text/javascript” src=”js/jquery.js”></script>
8<script type=”text/javascript” src=”js/drawImg”></script>
9</head>
10
11<body>
12<div id=”imgBox” style=”width:500px; height:400px; background:#cccccc; overflow:hidden”>
13    <img id=”img1″ alt=”” src=”images/1.jpg” onload=”DrawImg(500,400);” />
14</div>
15</body>
16</html>

 

再是JavaScript:


1function DrawImg(boxWidth,boxHeight)
2{
3    var imgWidth=$(“#img1”).width();
4    var imgHeight=$(“#img1”).height();
5    //比较imgBox的长宽比与img的长宽比大小
6    if((boxWidth/boxHeight)>=(imgWidth/imgHeight))
7    {
8        //重新设置img的width和height
9        $(“#img1”).width((boxHeight*imgWidth)/imgHeight);
10        $(“#img1”).height(boxHeight);
11        //让图片居中显示
12        var margin=(boxWidth-$(“#img1”).width())/2;
13        $(“#img1”).css(“margin-left”,margin);
14    }
15    else
16    {
17        //重新设置img的width和height
18        $(“#img1”).width(boxWidth);
19        $(“#img1”).height((boxWidth*imgHeight)/imgWidth);
20        //让图片居中显示
21        var margin=(boxHeight-$(“#img1”).height())/2;
22        $(“#img1”).css(“margin-top”,margin);
23    }
24}

25

 

代码是转的。

用了之后发现,这个方法在FF下面是好用的,但是在chrome下是没有效果的。

个人经验,主要原因是图片没有加载是获取不到图片的width和height,也就是说chrome下面imgWidth和imgHeight都为0。

那我们可以在前面加上load()函数来解决这个问题。

然后呢…ie又不支持这么用load(),真是不和谐啊,之后就是做兼容了,我们都懂的。

 

ie下textarea背景引发的系列问题

转自:http://blog.csdn.net/aperson111/article/details/4485349

1,ie下面的背景图片滚动问题

假设textarea是200×60,于是我的背景图片就是200×60,但是当textarea的内容比较多,出现滚动条的时候,在ie下面就有了问题,就是下拉后,背景图片是在整个scrollheight的一部分,而不是铺满的,但是别的浏览器不是这样,于是上网搜索,发现有一个滤镜,也没考虑,就用上了:

filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,
src=myImg.png);

效果不错,反正就ie有问题,所以用了这个滤镜。

2,ie下disable滚动条问题

但是若干天后,因为我的textarea是disable掉,不让写,然后再js里面动态判断是否可以写,使disabled=false这样的,但是在ie下,disable的textarea是不能使用滚动条的,于是很无奈,将disable改为readonly,在js里面也改为:

document.getElementById(‘mytext’).readOnly = false;这样来动态改。

3,ie下用了滤镜滚动条问题

但是上面的解决方法引来下面的问题:就是滤镜导致了在readOnly = true的时候,ie下面的滚动条不能用鼠标点击滚动条,只能用中间的滚动轴,这样的问题就严峻了,因为用户可不管这个,于是继续无奈着

4,上网搜了一堆的资料

说什么的都有,比如100% fixed  / background-attachment fixed之类的,效果都不好。因为需要多个浏览器支持

5,最终解决方法

在如此的无奈之下,只能首先放弃滤镜方式。其次,将textarea父节点的div或者td的背景用textarea希望显示的背景,然后textarea里面的属性用:background:transparent;终于可以解决了。

IE8的css hack

ie独有的hack的方式,让我感到人生都通透了。

ie8的hack方式是后面加数字9,看下面代码。

.hackTest{
color:#000000;
color:#0000FF9;       /* 所有IE浏览器(ie6+)支持*/
[color:#000000;color:#00FF00;      /* webkit支持 */
*color:#FFFF00;                 /* IE7支持 */
_color:#FF0000;               /* IE6支持 */
}