先定义问题:大家都知道,CSS超链接的outline属性一直是为键盘用户增加易用性的好帮手(按Tab键focus下一条链接,是除Safari Win外的默认操作)。可以说,outline通常伴随着:focus事件出现。但如果你重新定义了:focus的样式,这个边框就显得很多余了。

对于标准的浏览器而言(IE8+,FF2.0+等),定义:focus时的outline:0足以解决问题。但不支持:focus的IE6和只支持超链接:focus的IE7的黑点边框又怎么解决呢?

今天花了点时间研究这个问题,最早发现的解决办法是通过Javascript解决。思路是:既然IE6和7的outline不是标准的outline(无法通过CSS定义),那肯定有某种JS可以解决。通过这篇Cody Lindley的老文章我们知道hideFocus可以禁用IE的特殊边框。

<a href="#test" onfocus="this.hideFocus=true;">link</a>

但这个方式要求每个链接都有onfocus属性,实在不太美观。Cody Lindley选择用getElementsByTagName对应添加,这是第一种思路。

在上述文章留言中有一个变种方案:既然只有IE不听话,我们用CSS Expression替换不就好了?把JS写入CSS文件,用Conditional Comment避开其他浏览器(只有IE支持CSS Expression,但我有洁癖,喜欢避免CSS警告)。

a { outline:expression(hideFocus='true'); }

众所周知,CSS Expression很耗费资源,若你的页面上链接很多那就更折磨CPU了。因此我们需要一个纯CSS的方式,cssplay的Stu Nicholls老头说纯CSS的方式可行,但没几个人看懂了他给的神奇例子。各位可以用IE去测试,每块拼图都是超链接,Tab键和右键点击却不会有黑色边框。

我花了点时间研究它的CSS,发现原来通过在超链接里附加其他inline标签,通过CSS定位可以做到隐藏IE边框的效果。

首先是HTML

<a href="#test"><span>关于萌番</span></a>

然后是CSS


a { position:relative; margin:0 48px 0 0; }
a span { position:absolute; top:-1px; left:0; cursor:pointer; white-space:nowrap; }
a:hover { background:transparent; }
a:hover span { background:#1C72B7; height:17px; overflow:hidden; }
a:active { background:transparent; }
a:active span { background:#FFF799; height:17px; overflow:hidden; color:#F4B036; }
a:focus { background:transparent; }
a:focus span { background:#FFF799; height:17px; overflow:hidden; color:#F4B036; }

基本原理是让超链接完全坍塌,IE的focus边框就不会显示了。把文字藏在span标签中,再绝对定位于链接区域里(不理解position的请看这篇文章),这样坍塌时文字就不会被隐藏了。加入white-space:nowrap避免文字换行,cursor:pointer模仿鼠标指针,最后定义span为我们希望链接显示的样式,完成对黑点边框的回避。

当然纯CSS方式也有问题:由于链接标签坍塌,我们没办法让标签宽度自适应文字长度。为避免文字相互重叠,这里使用margin增加链接的宽度,换成display:inline-block与width的组合亦可……对于特定宽度的需求,我暂时想不到任何绕过办法。

客栈的吹毛求疵到此为止,我可以满足的休息了。有CSS恶趣味的旅客不妨进一步意淫。

继续阅读

“ 吹毛求疵:解决IE6-7给链接加黑点边框的三种方案 ” 已被炮击3次

  1. 我也研究过,最终还是没有找到一个完美的解决IE链接虚线框,可恶的IE

    万戈的头像

    #1

    万戈

    乘坐着 Firefox 3.5.7 Firefox 3.5.7 与 Windows XP Windows XP

    发射于 19:38 on January 21st, 2010 [回复]

  2. 博主,你的鼠标悬停提示是用JavaScript实现的吗?能分享一下代码吗?谢谢

    Player的头像

    #2

    Player

    乘坐着 Firefox 3.5.7 Firefox 3.5.7 与 Windows XP Windows XP

    发射于 16:12 on February 4th, 2010 [回复]


比特客栈的连珠合璧

比特客栈的东奔西走

比特客栈的旁门左道

News at: [2010/09/01 - 22:54] [4]

CAPITALISM! HO!

恭喜《RECETTEAR ~アイテム屋さんのはじめ方~》成为第一款登陆Steam的日式同人游戏!第一个吃战场原的公司Easy Game StationCarpe Fulgur(本地化兼发行商)站了出来!从此Steam平台不再是欧美死宅的绝对碉堡了!(虽然更多垃圾“全家乐游戏”已经悄然登陆……)

RECETTEAR最初发售於C73,听起来很有些历史了,其实不过是2008年而已。游戏内容基本分为打怪升级与管理商店两种,至于为什么一个小女孩要肩负这种成人的工作,当然是她爸欠债然后独自逃难啊!你又不是没看过这种剧情!

PS:虽然Steam上也有试玩,但你不一定非要从客户端下载;官网有独立试玩版提供。

PPS:说起官网,光看英文版页面我就知道Carpe Fulgur是一个很称职的翻译公司,其网页设计紧随日本官网使用传说中的Loser.dtd,哦不对,Loose.dtd。我对这个翻译团队忠于原作的精神表示放心。

News at: [2010/08/29 - 23:56] [12]

News at: [2010/08/27 - 23:42] [7]

recaptcha扫描书籍是件好事,可最近它给我出了这么一道题……

这周末准备去参加一个连官方网站都经常暂停服务的活动。届时将身着以上服装,欢迎旅客前来搭讪。(PS:客栈无限期招募三次元看板娘)

报告完毕。

News at: [2010/08/15 - 19:13] [3]

欢迎走上为智能手机和触屏开发Javascript的不归路。Mobile Graded Browser Support at jQueryMobile, 注意级别特指对DOM和Javascript的支持;此外B级有两种解读。

News at: [2010/08/07 - 19:08] [12]

为什么有这么多阿宅期望自己有实姐实妹?“被ACG欺骗了”是显而易见的回答之一。但美国杨百翰大学近期的一份研究表明,阿宅期盼实妹缠身,很可能是人类本能的自我心理调节!

(继续阅读)…

News at: [2010/08/07 - 03:51] [3]

我们预测的2年后,总算有制作公司主动把18禁游戏射交化了。好样的Moon-stone,你为日本糟糕开创了新纪元。话说回来,这个叫做“再触摸”的游戏开发系统真强大,名字和功能都是……

via zepy

News at: [2010/07/31 - 12:34] [5]

简单介绍:40岁的日本宅叔(目前是TRPG设计者兼同人作家)娶了20岁的中国姑娘,然后在网上发布生活漫画。内容取向见上图……

via 中国嫁日記 by 希有馬, h/t to popgo

News at: [2010/07/29 - 02:18] [7]

看来在我们打烊的日子里Pixiv更新了它的排名单格式,导致我们制作的Pixiv订阅源失效了。今晚抽空重新制作了一次,以下是各个订阅源的简介。

(继续阅读)…