使用css隐藏文本

Mic*_*cah 296 css

我的html中有一个标记,如下所示:

<h1>My Website Title Here</h1>
Run Code Online (Sandbox Code Playgroud)

使用CSS我想用我的实际徽标替换文本.通过调整标签大小并在via css中放置背景图像,我的徽标没有问题.但是,我无法弄清楚如何摆脱文本.我之前已经看过它,基本上是将文本从屏幕上移开.问题是我不记得我在哪里看到它.

nic*_*des 418

这是一种方式:

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 */
}
Run Code Online (Sandbox Code Playgroud)

这是隐藏文本的另一种方法,同时避免浏览器将创建的巨大的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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢使用'text-indent:-9999px;' 只是为了确保文字远离屏幕.有点防守偏执狂. (9认同)
  • 长标题会有这个方法的问题,因为只有word-wrap之前的文本是缩进的,并且W3C规范没有指定负缩进的情况,所以这可能有不可预测的结果 (5认同)
  • 如果在带有负文本缩进的元素中有任何链接,请确保您还指定"outline:none",否则您将在屏幕左侧显示虚线边框. (4认同)
  • 如果文本很长,只要第一行缩进,也可以添加'white-space:nowrap'以保证安全. (4认同)
  • 如果你使用这种方法,你应该添加"overflow:hidden"以防止向左侧射击选择框(尤其是链接) (3认同)
  • 为了进一步支持"这是正确的方法"的说法,请参阅这个优秀的问题,了解有关屏幕阅读器兼容性的详细信息:http://stackoverflow.com/questions/1755656/displaynone-vs-visibilityhidden-vs-text-indent9999-how -screen-读者表现-W (3认同)
  • 此外,使用'text-align:left'否则文本可能无法移动. (2认同)

小智 173

为什么不简单地使用:

h1 { color: transparent; }
Run Code Online (Sandbox Code Playgroud)

  • 验证(CSS 2.1):'transparent'不是'color'属性的有效值. (31认同)
  • @HasanGürsoy和未来的googlers-"CSS3扩展了颜色值,包括'transparent'关键字...." (23认同)
  • 如果用户选择它(STRG + A等),文本将变为可见 - 这看起来非常不专业!问候克里斯托弗 (15认同)
  • 为什么不?因为谷歌不喜欢它. (13认同)
  • `color:transparent;`与`user-select:none;`一起使用,除非你覆盖颜色. (11认同)

val*_*alk 156

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

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

  • 我在Chrome 27,Firefox 17,Safari for Windows 5.1.7,Opera 12.12,IE8,IE9,IE10中测试了{font-size:0}技巧 - 它适用于所有这些浏览器.如果你不能在元素本身上设置背景图像(例如因为你使用的是紧凑的精灵图像并且所需的图标周围没有足够的空填充),这个技巧最好,并且必须使用伪选择器,例如element:after后显示背景图片. (8认同)
  • 很好的想法但在IE7中它仍然显示文本非常小. (3认同)
  • 这似乎是最符合逻辑的(读取:最小的奇怪)方法 - 但是,我想知道它在各种浏览器中的支持程度如何?(我可以确认它在Firefox中有效.) (2认同)

Chr*_*loe 30

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

<h1><span>Website Title</span></h1>
Run Code Online (Sandbox Code Playgroud)

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

h1 {background:url(/nicetitle.png);}
h1 span {display:none;}
Run Code Online (Sandbox Code Playgroud)

如果你可以使用CSS2,那么有一些更好的方法使用该content属性,但不幸的是,网络还不是100%.

  • 搜索引擎机器人和屏幕阅读器可能会错过显示中的重要文本.请改用text-indent. (13认同)

Jos*_*ier 22

隐藏带有可访问性的文本:

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

此方法有效地隐藏文本,但允许其对屏幕阅读器保持可见.这是一个考虑可访问性是否值得关注的选项.

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

值得指出的是,这个类目前在Bootstrap 3中使用.


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


cho*_*ata 20

Jeffrey Zeldman提出以下解决方案:

.hide-text {
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

它应该比资源密集度低 -9999px;

请在这里阅读所有相关内容:

http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/


dar*_*asd 14

请参阅mezzoblue,了解每种技术的优点,包括优点和缺点,以及示例html和css.


Omi*_*ani 14

您可以通过添加此属性来简单地隐藏您的文本:

font-size: 0 !important;
Run Code Online (Sandbox Code Playgroud)


Pie*_*ier 9

这么多复杂的解决方案

最简单的就是使用:

color:rgba(0,0,0,0)
Run Code Online (Sandbox Code Playgroud)

  • 选择后变得可见。 (3认同)

小智 6

不要使用{ display:none; }它会使内容无法访问.您希望屏幕阅读器能够看到您的内容,并通过用图像(如徽标)替换文本来对其进行视觉设计.通过使用text-indent: -999px;或类似的方法,文本仍然存在 - 只是在视觉上没有.使用display:none,文字消失了.


And*_*kov 5

答案是使用属性创建跨度

{display:none;}

您可以在此站点找到示例


Job*_*obo 5

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


小智 5

<style>
body {
     visibility:hidden
}
body .moz-signature p{
    visibility:visible
}
</style>
Run Code Online (Sandbox Code Playgroud)

以上在最新的Thunderbird中运行良好.


小智 5

你为什么不用:

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

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

li {
    background-image: url('test.jpg');
}
Run Code Online (Sandbox Code Playgroud)

如果您没有任何span或div元素,它对链接非常有效.


小智 5

我不记得我是在哪里找到它的,但我已经成功使用它很多年了。

  =hide-text()
    font: 0/0 a
    text-shadow: none
    color: transparent
Run Code Online (Sandbox Code Playgroud)

我的 mixin 是在 sass 中的,但是你可以以任何你认为合适的方式使用它。为了更好地衡量,我通常.hidden在项目中的某个位置保留一个类来附加到元素以避免重复。


Hos*_*deh 5

用 CSS 替换内容

 h1{  font-size: 0px;}
 h1:after {
    content: "new content";
    font-size: 15px;
  }
Run Code Online (Sandbox Code Playgroud)


Web*_*ery 5

通过使用属性,可以在 CSS 中直接进行内容替换content

这似乎最常用于生成::before::after元素,但也可用于替换现有 HTML 元素的内容。

对于原来的例子

<h1>My Website Title Here</h1>
Run Code Online (Sandbox Code Playgroud)

这是用徽标替换文本的 CSS:

        h1 {
            content: url(mywebsitelogo.png);
            width: 100%;
        }
Run Code Online (Sandbox Code Playgroud)

在伪元素中,任何图像内容都无法调整大小(除非将其用作背景图像),但替换内容的情况并非如此。

默认情况下,图像将以其实际大小显示,并在必要时扩展容器,就像它包含实际<img>元素一样。

在此示例中,width: 100%用于使徽标图像适合全宽。如果图像应该根据需要缩小以适应,但如果容器大于图像则从不扩展,则max-width: 100%可以使用它。

根据 MDN 的说法,唯一不支持CSS 内容替换的常规浏览器是 Internet Explorer。