最近整理的一份CSS文字隐藏的demo,总结了几种方法,希望得出一种最完美的方案放进自己的代码片段,可是,到最后却陷入一种重复不断地推翻结 论的境地。因为需要考虑的应用场景和元素实在太多,放下浏览器不谈,不同的应用终端,不同的标签结构会有不一样的最优方案,因此,与其希望在工作上多“偷 一些懒”,不如平常多巩固积累基础的知识,在需要权衡的时候,便能更加得心应手。
因为自己经验尚浅,demo部分难免会有错漏情况,如发现问题,望大家能指出。
-
毫无保留:display:none
-
代码片段:
(x)HTML
<
p
class
=
"hide_display"
>我是打酱油的文本</
p
>
CSS
/* 暴力隐藏 */
.hide_display{
display
:
none
;}
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 Y Y Y Y Y Y Y -
优点:
- 方便、快捷
- 兼容性好
-
缺点:
- 屏幕阅读器无法阅读
- 超链接不适用
- 图片替代文本需要其他标签的背景
影响搜索排名- 大量使用容易被认为是SEO作弊
-
-
折中选择:overflow:hidden/position:absolute/visibility:hidden
-
代码片段:
(x)HTML
<
span
class
=
"hide_overflow"
>我是一号打酱油的文本</
span
>
<
p
class
=
"hide_position"
>我是二号打酱油的文本</
p
>
<
p
class
=
"hide_visibility"
>我是三号打酱油的文本</
p
>
CSS
/* 隐藏元素,脱离文本流,使元素不影响其他元素 */
.hide_overflow{
height
:
0px
;
overflow
:
hidden
;
display
:
block
;
/* 行内元素需要 */
float
:
left
;
/* 脱离文档流 或者position:absolute;*/
}
/* 定位在可视范围外,脱离文本流,使元素不影响其他元素 */
.hide_position{
position
:
absolute
;
left
:
-32767px
;
}
/* 原理与.hide_position一样*/
.hide_visibility{
visibility
:
hidden
;
position
:
absolute
;
/* 脱离文档流 */
margin-left
:
-32767px
;
}
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 Y Y Y Y Y Y Y -
优点:
- 方便、快捷
- 不希望屏幕阅读器读取的内容可以使用visibility
-
缺点:
- 超链接不适用
- 图片替代文本需要其他标签的背景
overflow:hidden;被认为有害体验
-
-
体验损失:text-indent负值
-
代码片段:
(x)HTML
<
p
class
=
"hide_tex"
><
a
href
=
"#"
>我是打酱油的超链接一号</
a
></
p
>
<
a
class
=
"hide_tex_span"
href
=
"#"
><
span
>我是打酱油的超链接二号</
span
></
a
>
<!--全英文字符在IE下不能被隐藏 -->
<
input
class
=
"hide_tex_input"
type
=
"submit"
/>
<
input
class
=
"hide_tex_input"
type
=
"submit"
/>
<
button
class
=
"hide_tex_input"
>我是打酱油的文本btn</
button
>
CSS
.hide_tex a, .hide_tex_span{
text-indent
:
-32767px
;
display
:
block
;
/* text-indent适用块状元素中行内元素和文本节点 */
/* 演示需要 */
width
:
200px
;
height
:
20px
;
margin-left
:
300px
;
background-color
:
#ccc
;
/* outline:none; 不建议隐藏outline,键盘流选手无法操作 */
}
.hide_tex_input{
text-indent
:
-32767px
;
width
:
200px
;
height
:
50px
;
display
:
block
;
}
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 Y Y Y Y Y Y Y -
优点:
- 适用超链接的图片替代
-
缺点:
- FF的虚边问题
- text-indent容易产生bug
-
-
牛皮癣:font-size设零
-
代码片段:
(x)HTML
<
p
class
=
"hide_fs"
>我是擦不掉牛皮癣</
p
>
<
button
class
=
"hide_fs"
>我是打酱油的文本btn</
button
>
<
input
class
=
"hide_fs"
type
=
"submit"
/>
CSS
.hide_fs{
font-size
:
0
; }
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 N Y Y N N N N -
优点:
- 方便、快捷
-
缺点:
- 浏览器表现不一致,ie,safari有最小字号,chrome最小12px,ff不显示文本
- 适用环境少
-
-
强强联合:line-height三倍
-
代码片段:
(x)HTML
<
p
class
=
"hide_lh"
><
a
href
=
"#"
>目前为止被正常人类普遍接受的疑似最完美隐藏文字方案,传说是tommy发明的</
a
></
p
>
<!-- line-height在ff3.6的button无法隐藏文本,需要配合其他方式 -->
<
button
class
=
"hide_lh_btn"
>我是打酱油的文本btn</
button
>
<!-- line-height在ff3.6、opera的input无法隐藏文本,需要配合其他方式 -->
<
input
class
=
"hide_lh_btn"
type
=
"submit"
/>
<!-- 目前比较完善的方案 -->
<
input
class
=
"hide_lh_btn_final"
type
=
"submit"
/>
CSS
/* 设定高度,利用行高将文本撑到容器可视范围外 */
.hide_lh a, .hide_lh_btn{
width
:
200px
;
height
:
20px
;
overflow
:
hidden
;
line-height
:
60px
;
/* 行高最好设3倍或以上,chrome容易后漏 */
display
:
block
;
/* 行内元素需要 */
/* 演示需要 */
background-color
:
#ccc
;
margin-left
:
300px
;
}
.hide_lh_btn_final{
width
:
200px
;
height
:
20px
;
overflow
:
hidden
;
line-height
:
60px
;
display
:
block
;
font-size
:
0px
;
/* opera和ff支持 */
}
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 Y Y Y Y Y Y Y -
优点:
- 兼容性好
- 超链接和图片替代文本可用
-
缺点:
- 使用限制较大,需要定宽高
-
-
多一丁点:前置背景遮挡
-
代码片段:
(x)HTML
<!-- 在css无效和css有效图片无效都适用 -->
<
a
class
=
"hide_bg"
href
=
"#"
><
span
class
=
"front_bg"
></
span
>我是可访问性的化身</
a
>
CSS
.hide_bg{
width
:
200px
;
height
:
20px
;
position
:
relative
;
display
:
block
;
/* 行内元素需要 */
}
.hide_bg .front_bg{
background
:
url
(
'bg_text.png'
)
no-repeat
;
/* 背景内容等于或大于容器大小 */
position
:
absolute
;
/* 绝对定位,不影响文本 */
left
:
0px
;
top
:
0px
;
width
:
200px
;
/* 与父元素等宽高 */
height
:
20px
;
display
:
block
;
/* cursor:pointer; ie6和链接需要用 */
}
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 Y Y Y Y Y Y Y -
优点:
- 兼容性好
- 超链接和图片替代文本可用
- 可访问性强
-
缺点:
- 使用限制较大,需要定宽高
- 代码冗余,需要空标签
-
-
另辟蹊径:content:”"
-
代码片段:
(x)HTML
<!--只有opera支持,按定义只能用在:before 和:after-->
<
a
class
=
"hide_ct"
href
=
"#"
>也许我才是最合适的,谁知道呢,内容表现分离。只有opera支持</
a
>
CSS
.hide_ct{
content
:""; }
-
兼容性:
浏览器兼容性 CHROME FIREFOX OPERA SAFARI IE 版本 5 3.6 10.10 4 6 7 8 支持情况 N N Y N N N N -
优点:
- 简单
-
缺点:
- 内容样式分离
- 不实用
-