先定义问题:大家都知道,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的特殊边框。

link

但这个方式要求每个链接都有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

关于萌番

然后是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恶趣味的旅客不妨进一步意淫。

Author: 店长

The Master of BitInnView all posts by 店长

html清理超链接前面的黑点,吹毛求疵:解决IE6-7给链接加黑点边框的三种方案相关推荐

  1. 分布式锁解决并发三种方案

    目录 为什么使用分布式锁? 分布式锁应具备的条件 三种实现方式 1.数据库锁 1.1 乐观锁 2.基于redis的分布式锁 3.基于Zookeeper实现分布式锁 4.三种方案的比较 分布式CAP理论 ...

  2. 解决秒杀系统超卖问题的三种方案

    在秒杀系统设计中,超卖是一个经典.常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点. 一.问题描述 在多个用户同时发起对同一个商 ...

  3. ajax json 403,解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式

    众所周知前端向后台发送 post 请求时,必须验证 csrf,否则会报错 403 Forbidden.使用 Django Form 表单可以直接在表单里面添加 {% csrf_token %} 即可, ...

  4. 解决IE6中PNG透明显示灰底的8种方法

    方案一 - 滤镜解决方案 介绍:滤镜从IE4.0被微软正式引入,所以我们可以使用滤镜解决IE6的PNG透明问题,滤镜不仅可以实现目前CSS3的一些旋转效果而且还可以引入图片.注意:此方法在部分版本的I ...

  5. 解决Hash(哈希表)冲突的四种方案

    解决Hash(哈希)冲突的四种方案 参考&鸣谢 解决哈希冲突必须知道的几种方法 小僵鱼 你还应该知道的哈希冲突解决策略 vivo互联网技术 解决哈希冲突的三种方法 kaleidoscopic ...

  6. netty解决TCP粘包/拆包导致的半包读写问题的三种方案

    解决方案一:LineBasedFrameDecoder+StringDecoder来解决TCP的粘包/拆包问题 只需要在客户端和服务端加上45.46两行代码并且在发送消息的时候加上换行符即可解决TCP ...

  7. java url 传值乱码问题_解决URL传递中文时出现乱码问题(三种解决方法)

    一.问题场景 一般在使用下面几种使用场景情况下,传递参数为中文时,接收得到的值都有可能乱码,具体如下: 1.直接在浏览器使用url地址访问 2.页面提交form表单时,method设置为GET 3.使 ...

  8. Docker 解决容器时间与主机时间不一致的问题三种解决方案

    Docker容器时间与主机时间不一致 通过date命令查看时间 查看主机时间 [root@localhost ~]# date 2016年 07月 27日 星期三 22:42:44 CST 查看容器时 ...

  9. vue 打开html流_三种方案解决Vue项目打包后dist中的index.html用浏览器无法直接打开的问题...

    index.html为什么打不开? Vue打包后生成的dist文件中的index.html,双击在浏览器中打开后发现一片空白,打开控制台有很多报错:"Failed to load resou ...

最新文章

  1. python 模拟浏览器下载文件-python爬虫:使用Selenium模拟浏览器行为
  2. KVM中ioeventfd创建与触发的大致流程(十四)
  3. 洛谷P4015 运输问题 网络流24题
  4. 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
  5. 【swift3.0】【枚举定义的不同方式】
  6. CXF的Spring注解配置及使用
  7. STC89C52 STC89LE52 NRF24L01无线 教程 (一)
  8. 使用JScript设置SVN客户端hook
  9. mysql拉数据到本地_从mysql中dump数据到本地
  10. c语言家庭财务管理算法,c语言家庭财务管理报告.doc
  11. 年会 炫酷 抽奖小程序
  12. SpringMVC工作原理概述
  13. windows11,java最详细安装jdk,手把手教你安装jdk,配置环境变量
  14. 唠唠 U盘格式 (Normal:FAT32 NTFS exFAT)以及U盘格式化选什么格式好???
  15. 白手起家学习使用flex (5) 在Flash Builder5 中引用 fla 文件中的类( symbol )
  16. MediaCodec解码AAC音频,用AudioTrack播放解码后的数据
  17. nnunet 扩充流程
  18. 基于java实现的分词以及词频统计,准备制作词云数据
  19. python字典添加主键_Python--MySql(主键的创建方式、存储引擎、存储过程、索引、pymsql)...
  20. 绑定ssh publickey后clone仍然Permission denied

热门文章

  1. C++GUI之wxWidgets(1)-安装与测试
  2. 计算机与信息安全的基本知识,信息安全的基本常识
  3. 用python做网站优点_php和django做网站哪个好
  4. newman执行测试_用Postman/Newman搞定API测试
  5. 获取CPU型号和序列号
  6. Python软件编程等级考试三级——20211205
  7. Windows 美化
  8. Barra模型初探,A股市场风格解析
  9. Nginx sendfile作用
  10. IDEA设置背景和定时更换背景