【问题标题】:Hide text using css使用 css 隐藏文本
【发布时间】:2010-10-03 01:25:09
【问题描述】:

我的 html 中有这样的标签:

<h1>My Website Title Here</h1>

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

【问题讨论】:

标签: css


【解决方案1】:

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

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

对于原始示例

<h1>My Website Title Here</h1>

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

        h1 {
            content: url(mywebsitelogo.png);
            width: 100%;
        }

虽然在伪元素中,任何图像内容都无法调整大小(除非将其用作背景图像),但对于替换内容,不是

默认情况下,图像将以其实际大小显示,必要时扩展容器,就像它包含实际的&lt;img&gt; 元素一样。

在此示例中,width: 100% 用于使徽标图像适应整个宽度。如果图像应该根据需要缩小以适应,但如果容器大于图像,则永远不要展开,则可以使用max-width: 100%

According to MDN,唯一支持 CSS 内容替换的常规浏览器是 Internet Explorer。

【讨论】:

    【解决方案2】:

    你可以简单地通过添加这个属性来隐藏你的文本:

    font-size: 0 !important;
    

    【讨论】:

    • 在你的情况下是否真的需要 !important 子句也是值得的。就我而言,没有它也可以正常工作。
    【解决方案3】:

    我实现此目的的方法之一是使用: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;
        }
    

    【讨论】:

      【解决方案4】:

      用 CSS 替换内容

       h1{  font-size: 0px;}
       h1:after {
          content: "new content";
          font-size: 15px;
        }
      

      【讨论】:

        【解决方案5】:

        我不记得我是在哪里捡到这个的,但已经成功使用了好几年了。

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

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

        【讨论】:

        • 我想我在某处读到过这个版本更受欢迎,因为负文本缩进会导致浏览器呈现一个 10000 像素(或您使用的任何示例)的长框。像本例那样更改字体不会导致浏览器创建一个它尝试呈现的大框。
        【解决方案6】:

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

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

        【讨论】:

        • 这正是我所需要的。我想隐藏 div 中的内容,但显示子 span 中的内容(隐藏它们之间的标点符号)。
        • 这似乎是最合乎逻辑的(阅读:Least Bizarre)方法——但是,我想知道它在各种浏览器中的支持程度如何? (我可以确认它在 Firefox 中有效。)
        • 在比IE7更多的浏览器中仍然显示文本非常小,这不是一个完整的跨浏览器解决方案。
        • 我已经在 Chrome 27、Firefox 17、Safari for windows 5.1.7、Opera 12.12、IE8、IE9、IE10 中测试了 {font-size:0} 技巧 - 它适用于所有这些浏览器。如果您不能在元素本身上设置背景图像(例如,因为您使用的是紧凑的精灵图像并且所需的图标周围没有足够的空白填充)并且必须使用伪选择器,则此技巧是最好的,例如element:after 显示背景图片。
        • 这样也会改变div的大小,所以不推荐这样做。
        【解决方案7】:

        这么多复杂的解决方案。

        最简单的就是简单地使用:

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

        【讨论】:

        • 太棒了!这适用于任何背景颜色。谢谢。
        • 选中后可见。
        【解决方案8】:
        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;
         }
        

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.
        【解决方案9】:

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

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

        /* 对于动态文本,您需要添加空格,因此您应用的 css 不会打扰。 nowrap 表示文本永远不会换行,文本会在同一行继续,直到遇到&lt;br&gt; 标记

        【讨论】:

          【解决方案10】:

          在元素中为 font-sizeline-height 使用零值对我来说是诀窍:

          <style>
              .text {
                  display: block;
                  width: 200px;
                  height: 200px;
          
                  font-size: 0;
                  line-height: 0;
              }
          </style>
          
          <span class="text">
              Invisible Text
          </span>
          

          【讨论】:

            【解决方案11】:

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

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

            然后使用CSS隐藏span并替换图片

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

            如果您可以使用 CSS2,那么使用 content 属性有一些更好的方法,但不幸的是,网络还没有 100% 实现。

            【讨论】:

            • 但请务必将宽度和高度属性设置为图像的属性 - 并确保设置了“填充”和“边距”,因为浏览器对于填充/边距的大小有不同的想法H1标签需要有。
            • 这里的缺点是如果图像被关闭,或者如果出现了一个 css 感知机器人,标题将不可见。
            • 显示中的重要文本 none 可能会被搜索引擎机器人和屏幕阅读器遗漏。改为使用文本缩进。
            • 这不会做任何事情,OP还不如删除标题中的文字。屏幕阅读器不显示任何内容..
            【解决方案12】:

            试试这个代码来缩短和隐藏文本

            .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; }

            【讨论】:

              【解决方案13】:

              最佳答案适用于短文本,但如果文本换行,它只会显示在图像中。

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

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

              SAMPLE CODE

              【讨论】:

                【解决方案14】:

                考虑到可访问性隐藏文本:

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

                此方法有效地隐藏了文本,但允许它对屏幕阅读器保持可见。如果可访问性是一个问题,这是一个考虑的选项。

                .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 - 如果你不能添加另一个元素,并且你被一个元素困住(就像你提到的情况一样),那么一个好的解决方法是使用pseudo-element ...另外,我在提出第一个问题 6 年后发布了这个答案,我的答案旨在针对更广泛的受众,因为这个问题似乎很受欢迎。
                【解决方案15】:

                适合我的解决方案:

                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;
                }
                

                【讨论】:

                  【解决方案16】:

                  Jeffrey Zeldman 提出以下解决方案:

                  .hide-text {
                    text-indent: 100%;
                    white-space: nowrap;
                    overflow: hidden;
                  }
                  

                  它应该比-9999px;占用更少的资源

                  请在此处阅读所有相关信息:

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

                  【讨论】:

                    【解决方案17】:

                    你为什么不使用:

                    <li><a href="#">bla</a></li>
                    
                    a {
                        opacity: 0.0;
                        font-size: 1px;
                    }
                    
                    li {
                        background-image: url('test.jpg');
                    }
                    

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

                    【讨论】:

                      【解决方案18】:

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

                      【讨论】:

                        【解决方案19】:

                        这对我来说适用于跨度(敲除验证)。

                        <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;
                        }
                        

                        【讨论】:

                          【解决方案20】:

                          您可以使用 css background-image 属性和 z-index 来确保图像保持在文本前面。

                          【讨论】:

                          • 例子?我看不出z-index 如何应用于background-image
                          【解决方案21】:

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

                          【讨论】:

                            【解决方案22】:

                            这是一种方式:

                            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 */
                            }
                            

                            这里是another way 隐藏文本,同时避免浏览器将创建的巨大的 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;
                            }
                            

                            【讨论】:

                            • 长标题使用此方法会有问题,因为只有自动换行之前的文本会缩进,而 W3C 规范没有指定负缩进的情况,因此可能会产生不可预知的结果
                            • 如果你使用这种方法,你应该添加“溢出:隐藏”以防止seird选择框向左射击(尤其是链接)
                            • 如果元素中有任何带有负文本缩进的链接,请确保同时指定“outline: none”,否则屏幕左侧会出现虚线边框。
                            • 我更喜欢使用 'text-indent: -9999px;'只是为了确保文本离屏幕很远。有点防御性偏执狂。
                            • 如果您的文本很长,并且只有第一行缩进,为了安全起见,还要添加 'white-space: nowrap'。
                            【解决方案23】:

                            如果我们可以编辑标记,生活会更轻松,只需删除文本并快乐。但有时标记是由 JS 代码放置的,或者我们根本不允许编辑它,太糟糕的 css 变成了我们唯一可以使用的武器。

                            我们不能放置 &lt;span&gt; 包裹文本并隐藏整个标签。顺便说一句,有些浏览器不仅会隐藏带有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)可能会将宽度和高度读取为min-widthmin-height。我想防止框被放大。

                            【讨论】:

                              【解决方案24】:

                              为不同的浏览器使用 Condition 标签并使用你必须放置的 css height:0pxwidth:0px 也必须放置 font-size:0px

                              【讨论】:

                                【解决方案25】:

                                我通常使用:

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

                                【讨论】:

                                  【解决方案26】:
                                  h1 {
                                      text-indent: -3000px; 
                                      line-height: 3000px;
                                      background-image: url(/LOGO.png);
                                      height: 100px; width:  600px;  /* height and width are a must */
                                  
                                  }
                                  

                                  【讨论】:

                                  • 为什么会有行高?
                                  【解决方案27】:

                                  为什么不简单地使用:

                                  h1 { color: transparent; }
                                  

                                  【讨论】:

                                  • 为什么不呢?因为谷歌不喜欢它。
                                  • 验证 (CSS 2.1):“透明”不是“颜色”属性的有效值。
                                  • 如果用户选择了文本(STRG+A 等),文本将变得可见——这看起来很不专业!问候克里斯托弗
                                  • @HasanGürsoy 和未来的谷歌员工-“CSS3 扩展了颜色值以包含‘透明’关键字......”
                                  • color: transparent;user-select: none; 一起使用,除非您覆盖颜色。
                                  【解决方案28】:
                                  <style>
                                  body {
                                       visibility:hidden
                                  }
                                  body .moz-signature p{
                                      visibility:visible
                                  }
                                  </style>
                                  

                                  上述方法在最新的 Thunderbird 中也很有效。

                                  【讨论】:

                                  【解决方案29】:

                                  请参阅mezzoblue 了解每种技术的精彩总结,包括优势和劣势,以及示例 html 和 css。

                                  【讨论】:

                                    【解决方案30】:

                                    这实际上是一个适合讨论的领域,有许多微妙的技术可供使用。选择/开发一种满足您需求的技术非常重要,包括:屏幕阅读器、图像/css/脚本开/关组合、seo 等。

                                    这里有一些很好的资源可以帮助你开始使用标准图像替换技术:

                                    http://faq.css-standards.org/Image_Replacement

                                    http://www.alistapart.com/articles/fir

                                    http://veerle.duoh.com/blog/links/#l-10

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2015-08-04
                                      • 1970-01-01
                                      • 2010-09-25
                                      • 2022-11-19
                                      • 2010-10-10
                                      • 2012-09-28
                                      相关资源
                                      最近更新 更多