使用CSS隐藏文字


306

我在html中有这样的标签:

<h1>My Website Title Here</h1>

使用CSS我想用我的实际徽标替换文本。我已经有了徽标,可以通过调整标签的大小并通过CSS将背景图像放入其中来实现。但是,我不知道如何摆脱文本。我以前看过基本上是通过将文本从屏幕上推送来完成的。问题是我不记得在哪里看到它。


3
这里有很多过时的答案:考虑更新较新的答案stackoverflow.com/a/27769435/2586761暴露出来
ptim

Answers:


426

这是一种方法:

h1 {
    text-indent: -9999px;                 /* sends the text off-screen */
    background-image: url(/the_img.png);  /* shows image */
    height: 100px;                        /* be sure to set height & width */
    width: 600px;
    white-space: nowrap;            /* because only the first line is indented */
}

h1 a {
    outline: none;  /* prevents dotted line when link is active */
}

这是另一种隐藏文本的方式,同时避免了浏览器将创建的9999像素大框:

h1 {
    background-image: url(/the_img.png);  /* shows image */
    height: 100px;                        /* be sure to set height & width */
    width:  600px;

    /* Hide the text. */
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
}

5
长标题将对此方法产生问题,因为仅对自动换行之前的文本进行了缩进,并且W3C规范未指定否定缩进的情况,因此这可能会产生不可预测的结果
Chris Farmiloe 09年

3
如果使用此方法,则应添加“溢出:隐藏”,以防止选择的选框向左射出(尤其是带有链接)
willoller 2009年

4
如果元素中有任何带有负文本缩进的链接,请确保还指定“ outline:none”,否则屏幕左侧的虚线边框将消失。
尼克

9
我更喜欢使用'text-indent:-9999px;' 只是为了确保文本离屏幕很远。有点防御性的偏执狂。
安迪·福特

4
如果您的文本很长(仅缩进第一行),也可以添加“ white-space:nowrap”,以便安全起见。
安德鲁·摩尔

177

为什么不简单使用:

h1 { color: transparent; }

16
为什么不?因为Google不喜欢它。
alekwisnia 2012年

32
验证(CSS 2.1):“透明”对于“颜色”属性无效。
HasanG

15
如果用户选择了该文本(STRG + A等),该文本将变为可见-这看起来非常不专业!问候克里斯托弗
克里斯托弗·

24
@HasanGürsoy和未来的Googlers-“ CSS3扩展了颜色值,以包括'transparent'关键字...。”
ABMagil 2014年

11
color: transparent;与一起使用user-select: none;,除非您覆盖颜色。
stan-z

162

只需将其添加font-size: 0;到包含文本的元素中即可。

.hidden { font-size: 0; }
  font-size: 0; hides text. <span class="hidden"> You can't see me :) </span>


1
这正是我所需要的。我想隐藏div中的内容,但要显示子范围中的内容(以隐藏它们之间的标点符号)。
mskfisher 2011年

2
这似乎是最合乎逻辑的方法(读作:Least Bizarre),但是,我想知道各种浏览器对它的支持程度如何吗?(我可以确认它可以在Firefox中使用。)
Brian Lacy 2012年

1
在比IE7更多的浏览器中,它仍然显示很小的文本,这不是一个完整的跨浏览器解决方案。
macguru2000

8
我已经在Chrome 27,Firefox 17,适用于Windows 5.1.7的Safari,Opera 12.12,IE8,IE9,IE10的Chrome 27,Firefox 17中测试了{font-size:0}技巧-它可以在所有这些浏览器中使用。如果您不能在元素本身上设置背景图像(例如,因为您使用的是紧紧排列的精灵图像,并且所需的图标周围没有足够的空白填充),并且必须使用伪选择器,则此技巧是最好的,例如element:after以显示背景图像。
beluga 2013年

1
这也会更改div的大小,因此不建议这样做。
Stephan Bijzitter

30

跨浏览器最友好的方式是将HTML编写为

<h1><span>Website Title</span></h1>

然后使用CSS隐藏跨度并替换图像

h1 {background:url(/nicetitle.png);}
h1 span {display:none;}

如果可以使用CSS2,则可以使用一些更好的方法来使用该content属性,但不幸的是,网络还没有100%可用。


但是请确保还将width和height属性设置为图像的width和height属性,并确保设置了“ padding”和“ margin”,因为浏览器对H1标签需要多少填充/边距有不同的想法。

此处的缺点是,如果关闭了图像,或者显示了css感知的bot,则标题将不可见。
willoller

13
搜索引擎机器人和屏幕阅读器可能不会丢失显示中的重要文本。请改用text-indent。
dylanfm,2009年

1
这不会做任何事情,OP可能会删除标题中的文本。屏幕阅读器不显示没有做任何事情..
伊德里斯Dopico佩尼亚

23

隐藏文字时要考虑到可访问性:

除了其他答案,这是隐藏文本的另一种有用方法。

这种方法有效地隐藏了文本,但仍使其对于屏幕阅读器可见。这是一个考虑是否可访问性的选项。

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}

值得指出的是,此类当前在Bootstrap 3中使用


如果您有兴趣阅读有关可访问性的信息:



这对于仅在屏幕阅读器中添加元素非常有效;但是,它不适用于原始问题,即要通过css中指定的背景图像显示图像。
vossad01

@ vossad01-如果您不能添加另一个元素,而您只能使用单个元素(例如您提到的情况),那么一个不错的解决方法是利用伪元素 ...另外,我发布了这个在提出第一个问题6年后再回答,我的回答旨在针对更广泛的受众,因为该问题似乎很受欢迎。
乔什·克罗齐


14

请参阅mezzoblue,以获取每种技术的不错摘要,并介绍其优缺点,以及示例html和css。


10

这么多复杂的解决方案。

最简单的一种就是使用:

color:rgba(0,0,0,0)

大!这适用于任何背景色。谢谢。
Sandeep Amarnath


6

不使用{ display:none; }它使内容不可访问。您希望屏幕阅读器看到您的内容,并通过用图像(例如徽标)替换文本来视觉化其样式。通过使用text-indent: -999px;或类似的方法,文本仍然存在-只是视觉上没有。使用display:none,文本消失了。



5

您可以使用css background-image属性,并z-index确保图像停留在文本的前面。


例?我看不到如何z-index适用于background-image
MartynasJusevičius'19

5

为什么不使用:

<li><a href="#">bla</a></li>

a {
    opacity: 0.0;
    font-size: 1px;
}

li {
    background-image: url('test.jpg');
}

如果您没有任何span或div元素,则它非常适合链接。


4

答案是使用该属性创建跨度

{display:none;}

您可以在此站点上找到示例


1
一些不赞成票可能与可访问性有关-这是一个有效的观点。但就我而言,我是通过其Web服务将餐厅菜单服务中的菜单拉入网站。餐馆老板不希望显示价格(但是使用相同的服务来打印实际菜单。)在这种情况下,人们根本不希望网站上的价格。很高兴知道所有可能的方法。
Marvo 2015年


3

使用条件为标记不同的浏览器,并使用CSS,你有地方 height:0pxwidth:0px你也必须到位font-size:0px


3

如果仅是为了使元素内的文本不可见,则使用rgba值(例如color:rgba(0,0,0,0);clean和simple)将color属性设置为不透明度为0 。


3

我不记得我从哪里买来的,但是已经使用了很多年了。

  =hide-text()
    font: 0/0 a
    text-shadow: none
    color: transparent

我的mixin处于混乱状态,但是您可以按照自己认为合适的任何方式使用它。为了达到良好的效果,我通常.hidden在项目中的某个地方放置一个类,以附加到元素上以避免重复。


我想我在某个地方读过此版本,因为负的文本缩进会导致浏览器呈现10000px(或您使用的任何示例)长框。在此示例中更改字体不会导致浏览器创建尝试渲染的大框。
甘博


2

尝试使用此代码来缩短和隐藏文本

.hidetxt{

  width: 346px;
  display: table-caption;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: no-drop;
  
}

.hidetxt:hover { 

  visibility: hidden;
  
}
<div class="hidetxt">
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when</p>
</div>

或隐藏在CSS类中的使用 .hidetxt { visibility: hidden; }



1

我通常使用:

span.hide
{
  position:fixed;
  right:-5000px;
}

1

如果我们可以编辑标记,那么生活会更轻松,只需删除文本即可开心。但是有时标记是由JS代码放置的,或者根本不允许我们对其进行编辑,但是糟糕的CSS变成了我们可以使用的唯一武器。

我们不能将<span>文字换行并隐藏整个标签。顺便说一句,某些浏览器不仅隐藏元素,display:none而且禁用其中的组件。

两者font-size:0pxcolor:transparent可能都是不错的解决方案,但是某些浏览器不了解它们。我们不能依靠他们。

我建议:

h1 {
  background-image: url(/LOGO.png);  /* Our image */
  text-indent: -3000px;  /* Send text out of viewable area */
  height: 100px; width: 600px;  /* height and width are a must, agree */
  overflow:hidden;  /* make sure our size is respected */
}

使用overflow:hidden强制我们的宽度和高度。一些浏览器(不会命名为IE)可能会将width和height读取为min-widthmin-height。我想防止盒子变大。


1

在元素中font-sizeline-height中使用零值对我有用:

<style>
    .text {
        display: block;
        width: 200px;
        height: 200px;

        font-size: 0;
        line-height: 0;
    }
</style>

<span class="text">
    Invisible Text
</span>

1

要从html隐藏文本,请在css中使用text-indent属性

.classname {
 text-indent: -9999px;
 white-space: nowrap; 
}

/ *对于动态文本,您需要添加空格,因此您应用的CSS不会受到干扰。nowrap表示文本永远不会换行到下一行,文本继续在同一行上直到<br>遇到标签


1

我实现此目标的方法之一是使用:before:after。我使用这种方法已经有好几年了,尤其适用于字形矢量图标。

h1 {
    position: relative;
    text-indent: -9999px;                 /* sends the text off-screen */
    }
h1:before {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1;
    display: block;
    width: 600px;
    height: 100px;
    content: ' ';
    background: transparent url(/the_img.png) 0 0 no-repeat;
    }

0

这对我有用跨度(淘汰验证)。

<span class="validationMessage">This field is required.</span>

.validationMessage {
    background-image: url('images/exclamation.png');
    background-repeat: no-repeat;
    margin-left: 5px;
    width: 16px;
    height: 16px;
    vertical-align: top;

    /* Hide the text. */
    display: inline-block;
    overflow: hidden;
    font-size: 0px;
}

0

一个适合我的解决方案:

的HTML

<div class="website_title"><span>My Website Title Here</span></div>

的CSS

.website_title {
    background-image: url('../images/home.png');
    background-repeat: no-repeat;
    height: 18px;
    width: 16px;
}

.website_title span {
    visibility: hidden;
}

-1

最佳答案适用于短文本,但是如果将文本自动换行,它将仅显示在图像中。

一种方法是使用jquery处理程序捕获错误。尝试加载图像,如果图像失败,则会引发错误。

$('#logo img').error(function(){
    $('#logo').html('<h1>My Website Title Here</h1>');
});

参见样本代码


-1
h1{
   background:url("../images/logo.png") no-repeat;
   height:180px;
   width:200px;
   display:inline-block;
   font-size:0px !important;
   text-intent:-9999999px !important;
   color:transparent !important;
 }

3
尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以提高其长期价值。
本杰明·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.