CSSを使用してテキストを非表示にする


306

私は私のhtmlに次のようなタグを持っています:

<h1>My Website Title Here</h1>

cssを使用して、テキストを実際のロゴに置き換えます。タグのサイズを変更し、CSSで背景画像を配置することで、ロゴは問題ありません。しかし、テキストを取り除く方法がわかりません。基本的に、テキストを画面から押し出すことによって、以前にそれが行われたのを見てきました。問題はどこで見たのか思い出せないことです。


3
ここには古い回答がたくさんあります。最新の回答stackoverflow.com/a/27769435/2586761を公​​開して公開することを検討してください
ptim

回答:


426

これは1つの方法です。

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の仕様では、負のインデントのための状況を指定していない
クリスFarmiloe

3
この方法を使用する場合は、「オーバーフロー:非表示」を追加して、サイド選択ボックスが左側に飛び出すのを防ぐ必要があります(特にリンクを使用)
willoller

4
負のテキストインデントを持つ要素にリンクがある場合は、「outline:none」も指定してください。そうしないと、画面の左側から点線の枠が表示されます。
nickf 2009年

9
私は「text-indent:-9999px;」を使用することを好みます。テキストが本当に画面からはみ出るようにするためです。防御的なパラノイアのビット。
アンディフォード

4
また、最初の行だけがインデントされているためにテキストが長い場合に安全を確保するために、「空白:nowrap」を追加します。
Andrew Moore、

177

なぜ単に使用しないのですか?

h1 { color: transparent; }

16
何故なの?Googleが気に入らないからです。
alekwisnia

32
検証(CSS 2.1): 'transparent'は 'color'プロパティの有効な値ではありません。
HasanG 2012

15
ユーザーがテキストを選択すると、テキストが表示されます(STRG + Aなど)-これは専門外に見えます!ご挨拶クリストファー
クリストファー株式

24
@HasanGürsoyと将来のgooglers-「CSS3は「透明」キーワ​​ードを含むように色の値を拡張します...」
ABMagil

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
これは最も論理的な(読み:最小奇妙な)メソッドのように見えますが、さまざまなブラウザでどの程度サポートされているのでしょうか。(Firefoxで動作することを確認できます。)
Brian Lacy 2012

1
それでも、IE7よりも多くのブラウザーでテキストが非常に小さく表示されますが、これは完全なクロスブラウザーソリューションではありません。
macguru2000 2012年

8
私はChrome 27、Firefox 17、Safari for windows 5.1.7、Opera 12.12、IE8、IE9、IE10で{font-size:0}トリックをテストしました-それはそれらすべてのブラウザーで動作します。このトリックは、要素自体に背景画像を設定できない場合(たとえば、密にパックされたスプライト画像を使用していて、必要なアイコンの周りに十分な空のパディングがないため)、疑似セレクターを使用する必要がある場合に最適です。 、例えばelement:afterは背景画像を表示します。
beluga 2013年

1
これはdivのサイズも変更するため、お勧めしません。
Stephan Bijzitter 2015年

30

最もクロスブラウザフレンドリーな方法は、HTMLを次のように書くことです

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

次に、CSSを使用してスパンを非表示にし、画像を置き換えます

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

CSS2を使用できる場合、contentプロパティを使用するいくつかのより良い方法がありますが、残念ながら、Webはまだ100%ではありません。


ただし、幅と高さの属性も画像の属性に設定してください。「パディング」と「マージン」が設定されていることを確認してください。H1タグに必要なパディング/マージンの大きさはブラウザによって異なるためです。

ここでの欠点は、画像がオフになっている場合、またはcss対応のボットが表示される場合、タイトルが表示されないことです。
willoller 2009年

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 2017年

@ vossad01-別の要素を追加できず、単一の要素で停止している場合(前述の場合のように)、1つの優れた回避策は疑似要素を利用することです...また、私はこれを投稿しました最初の質問が質問されてから6年後の回答です。この質問は人気があるように見えるので、私の回答はより広い聴衆を対象にすることを目的としていました。
Josh Crozier 2017年


14

長所と短所、およびhtmlとcssの例を含む、各手法の概要については、mezzoblueを参照してください。


10

非常に多くの複雑なソリューション。

最も簡単なのは、単に使用することです:

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

すごい!これはどの背景色でも機能します。ありがとう。
Sandeep Amarnath

8

この属性を追加するだけで、テキストを非表示にすることができます。

font size: 0 !important;

また、この!important句が実際に必要かどうかを確認することも重要です。私の場合、それなしでも問題なく動作しました。
Eerik Sven Puudist

6

使用しない{ display:none; }コンテンツにアクセスできなくなります。スクリーンリーダーでコンテンツを表示し、テキストを画像(ロゴなど)に置き換えることで視覚的にスタイルを設定します。text-indent: -999px;または同様の方法を使用すると、テキストはそのまま表示されます-視覚的には表示されません。を使用するdisplay:noneと、テキストが消えます。



5

あなたはcss background-imageプロパティを使用してz-index、画像がテキストの前に留まるようにすることができます。


例?にどのようにz-index適用されるかわかりませんbackground-image
MartynasJusevičius19年

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サービスを介してWebサイトにメニューをプルしています。レストランの所有者は価格を表示したくない(ただし、実際のメニューを印刷するのに同じサービスが使用されている)。それは、サイトで価格をまったく望まない状況です。考えられるすべてのアプローチを知っておくとよいでしょう。
Marvo、2015

4

これは実際には議論するのに適した領域であり、多くの微妙な技術が利用可能です。スクリーンリーダー、画像/ css /スクリプトのオン/オフの組み合わせ、seoなど、ニーズに合った手法を選択/開発することが重要です。

標準化されたイメージ置換技術の道を歩むためのいくつかの優れたリソースを以下に示します。

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

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

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


3

使用条件別のブラウザ用のタグやCSSの使用は、あなたが場所を持っている height:0pxwidth:0pxも、あなたは場所に持っていますfont-size:0px


3

要素内のテキストを単に非表示にすることが目的である場合は、color:rgba(0,0,0,0);クリーンでシンプルなどのrgba値を使用して、色属性を不透明度0に設定します。


3

これをどこで手に入れたのか覚えていませんが、古くからうまく利用しています。

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

私のミックスインはサスですが、好きなように使用できます。通常、.hidden重複を避けるために、プロジェクトのどこかにクラスを要素にアタッチしておくのが一般的です。


私はどこかでこのバージョンが好まれていることを読んだと思います。負のテキストインデントにより、ブラウザーは10000px(または使用する例)の長いボックスをレンダリングするからです。この例のようにフォントを変更しても、ブラウザがレンダリングしようとする大きなボックスを作成することはありません。
Gambo

2
h1 {
    text-indent: -3000px; 
    line-height: 3000px;
    background-image: url(/LOGO.png);
    height: 100px; width:  600px;  /* height and width are a must */

}

3
なぜ線の高さがあるのですか?
SandRock、2014年

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)は、幅と高さをmin-widthおよびとして読み取ることがありmin-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

これを実現する方法の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

最良の答えは短いテキストで機能しますが、テキストが折り返されている場合は画像に表示されます。

これを行う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
このコードは質問に答えることがありますが、このコードが質問に答える理由方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
ベンジャミンW.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.