Sembunyikan teks menggunakan css

306

Saya memiliki tag di html saya seperti ini:

<h1>My Website Title Here</h1>

Menggunakan css saya ingin mengganti teks dengan logo saya yang sebenarnya. Saya punya logo tidak ada masalah dengan mengubah ukuran tag dan menempatkan gambar latar belakang melalui css. Namun, saya tidak tahu bagaimana cara menghilangkan teks. Saya telah melihatnya dilakukan sebelumnya pada dasarnya dengan mendorong teks dari layar. Masalahnya adalah saya tidak ingat di mana saya melihatnya.

Mikha
sumber
3
ada banyak jawaban yang ketinggalan jaman di sini: pertimbangkan untuk membatalkan jawaban yang lebih baru stackoverflow.com/a/27769435/2586761 untuk mengeksposnya
ptim

Jawaban:

426

Ini satu cara:

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

Berikut adalah cara lain untuk menyembunyikan teks sambil menghindari kotak 9999 piksel besar yang akan dibuat oleh browser:

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;
}
nicholaides
sumber
5
judul panjang akan memiliki masalah dengan metode ini karena hanya teks sebelum bungkus kata indentasi, dan spesifikasi W3C tidak menentukan situasi untuk indentasi negatif sehingga ini bisa memiliki hasil yang tidak dapat diprediksi
Chris Farmiloe
3
Jika Anda menggunakan metode ini, Anda harus menambahkan "overflow: hidden" untuk mencegah kotak pemilihan seird melesat ke kiri (terutama dengan tautan)
willoller
4
Jika Anda memiliki tautan dalam elemen dengan indentasi teks negatif, pastikan Anda juga menentukan "garis besar: tidak ada" jika tidak, Anda mendapatkan batas bertitik keluar dari kiri layar.
nickf
9
Saya lebih suka menggunakan 'indentasi teks: -9999px;' hanya untuk memastikan teks benar-benar jauh dari layar. Sedikit paranoia defensif.
Andy Ford
4
Juga tambahkan 'white-space: nowrap' hanya untuk berada di sisi aman jika teks Anda panjang hanya baris pertama yang indentasi.
Andrew Moore
177

Mengapa tidak menggunakan saja:

h1 { color: transparent; }
nesono
sumber
16
Kenapa tidak? Karena Google tidak menyukainya.
alekwisnia
32
Validasi (CSS 2.1): 'transparan' bukan nilai yang valid untuk properti 'warna'.
HasanG
15
Teks akan menjadi terlihat jika pengguna memilihnya (STRG + A dll.) - Ini terlihat sangat tidak profesional! Salam Christopher
Christopher Stock
24
@ HasanGürsoy dan googler masa depan- "CSS3 memperluas nilai warna dengan memasukkan kata kunci 'transparan' ...."
ABMagil
11
color: transparent;bekerja dengan baik user-select: none;, kecuali jika Anda menimpa warnanya.
stan-z
162

Tambahkan saja font-size: 0;ke elemen Anda yang berisi teks.

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

valk
sumber
1
Inilah yang saya butuhkan. Saya ingin menyembunyikan apa yang ada di div, tetapi menunjukkan apa yang ada di rentang anak (untuk menyembunyikan tanda baca di antara mereka).
mskfisher
2
Ini sepertinya metode yang paling logis (baca: Least Bizarre) - namun, saya ingin tahu seberapa baik itu didukung di berbagai browser? (Saya dapat mengonfirmasi itu berfungsi di Firefox.)
Brian Lacy
1
Ini masih menunjukkan teks yang sangat kecil di browser yang lebih dari sekadar IE7, ini bukan solusi lintas browser yang lengkap.
macguru2000
8
Saya telah menguji trik {font-size: 0} di Chrome 27, Firefox 17, Safari untuk windows 5.1.7, Opera 12.12, IE8, IE9, IE10 - ini berfungsi di semua browser tersebut. Trik ini paling baik jika Anda tidak dapat mengatur gambar latar belakang pada elemen itu sendiri (misalnya karena Anda menggunakan gambar sprite yang penuh sesak dan ikon yang diperlukan tidak memiliki bantalan kosong yang cukup di sekitarnya), dan harus menggunakan pemilih semu , misalnya elemen: setelah untuk menampilkan gambar latar belakang.
beluga
1
Ini juga mengubah ukuran div, jadi saya tidak merekomendasikan ini.
Stephan Bijzitter
30

Cara paling ramah lintas browser adalah menulis HTML sebagai

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

lalu gunakan CSS untuk menyembunyikan rentang dan ganti gambar

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

Jika Anda dapat menggunakan CSS2, maka ada beberapa cara yang lebih baik menggunakan contentproperti, tetapi sayangnya web belum 100% ada.

Chris Farmiloe
sumber
Tetapi pastikan juga mengatur atribut lebar dan tinggi ke gambar - dan pastikan "padding" dan "margin" diatur karena browser memiliki ide yang berbeda tentang berapa banyak padding / margin tag H1 perlu miliki.
Kekurangannya di sini adalah jika gambar dimatikan, atau jika bot yang menyadari css muncul, judul tidak akan terlihat.
willoller
13
Teks penting dalam tampilan tidak ada yang mungkin akan terlewatkan oleh bot mesin pencari dan pembaca layar. Gunakan indentasi teks sebagai gantinya.
dylanfm
1
Ini tidak akan melakukan apa-apa, OP mungkin juga menghapus teks dalam judul. Pembaca layar tidak melakukan apa pun dengan tampilan tidak ada ..
Idris Dopico Peña
23

Menyembunyikan teks dengan aksesibilitas dalam pikiran:

Selain jawaban lain, berikut ini adalah pendekatan lain yang berguna untuk menyembunyikan teks.

Metode ini secara efektif menyembunyikan teks, namun membuatnya tetap terlihat oleh pembaca layar. Ini adalah opsi untuk dipertimbangkan jika aksesibilitas menjadi perhatian.

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

Patut ditunjukkan bahwa kelas ini saat ini digunakan dalam Bootstrap 3 .


Jika Anda tertarik membaca tentang aksesibilitas:

Josh Crozier
sumber
Ini berfungsi dengan baik untuk menambahkan elemen hanya pembaca layar; Namun, itu tidak bekerja dengan pertanyaan asli di mana gambar akan ditampilkan oleh gambar latar belakang yang ditentukan dalam css.
vossad01
@ vossad01 - Jika Anda tidak dapat menambahkan elemen lain, dan Anda terjebak dengan satu elemen (seperti dalam kasus yang Anda sebutkan), maka satu solusi yang baik adalah dengan menggunakan elemen pseudo ... juga, saya memposting ini jawaban 6 tahun setelah pertanyaan awal diajukan, dan jawaban saya ditujukan untuk menargetkan audiens yang lebih luas karena pertanyaan ini tampaknya populer.
Josh Crozier
14

Lihat mezzoblue untuk ringkasan yang bagus dari setiap teknik, dengan kekuatan dan kelemahan, ditambah contoh html dan css.

darasd
sumber
10

Begitu banyak solusi yang rumit.

Yang paling mudah adalah dengan menggunakan:

color:rgba(0,0,0,0)
Dermaga
sumber
Bagus! Ini berfungsi untuk semua warna latar belakang. Terima kasih.
Sandeep Amarnath
8

Anda cukup menyembunyikan teks Anda dengan menambahkan atribut ini:

font size: 0 !important;
Omid Ahmadyani
sumber
Anda juga perlu memeriksa apakah !importantklausa tersebut benar-benar diperlukan dalam kasus Anda. Dalam kasus saya, itu bekerja dengan baik tanpa itu.
Eerik Sven Puudist
6

Jangan gunakan { display:none; }Ini membuat konten tidak bisa diakses. Anda ingin pembaca layar melihat konten Anda, dan gaya secara visual dengan mengganti teks dengan gambar (seperti logo). Dengan menggunakan text-indent: -999px;atau metode serupa, teksnya masih ada - tidak ada secara visual di sana. Gunakan display:none, dan teksnya hilang.

jensimmons
sumber
5
<style>
body {
     visibility:hidden
}
body .moz-signature p{
    visibility:visible
}
</style>

Di atas berfungsi dengan baik di Thunderbird terbaru juga.

kamalesh
sumber
Perhatikan bahwa menggunakan metode ini membuat teks tidak dapat dibaca oleh sebagian besar pembaca layar - lihat stackoverflow.com/questions/1755656/…
Jordan Lev
5

Anda dapat menggunakan background-imageproperti css dan z-indexuntuk memastikan gambar tetap di depan teks.

Jobo
sumber
Contoh? Saya tidak melihat bagaimana z-indexberlaku untuk background-image.
Martynas Jusevičius
5

Mengapa Anda tidak menggunakan:

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

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

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

Jika Anda tidak memiliki elemen span atau div, itu berfungsi dengan baik untuk tautan.

Hans
sumber
4

Jawabannya adalah membuat rentang dengan properti

{display:none;}

Anda dapat menemukan contoh di situs ini

Andrei Krotkov
sumber
1
Beberapa downvotes mungkin ada hubungannya dengan masalah aksesibilitas - titik yang valid. Tetapi dalam kasus saya, saya menarik menu dari layanan menu restoran ke situs web melalui layanan web mereka. Pemilik restoran tidak ingin harga ditampilkan (tetapi layanan yang sama digunakan untuk mencetak menu yang sebenarnya.) Itu adalah situasi di mana orang tidak ingin harga di situs sama sekali. Adalah baik untuk mengetahui semua pendekatan yang mungkin.
Marvo
3

Gunakan Tag kondisi untuk browser yang berbeda dan gunakan css yang harus Anda tempatkan height:0pxdan width:0pxjuga Anda harus menempatkan font-size:0px.

kedar
sumber
3

Jika intinya hanya untuk membuat teks di dalam elemen tidak terlihat, atur atribut warna untuk memiliki 0 opacity menggunakan nilai rgba seperti color:rgba(0,0,0,0);bersih dan sederhana.

Cafe Coder
sumber
3

Saya tidak ingat di mana saya mengambil ini, tetapi telah menggunakannya dengan sukses sejak lama.

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

Mixin saya dalam sass namun Anda dapat menggunakannya dengan cara apa pun yang Anda inginkan. Untuk ukuran yang baik, saya biasanya menjaga .hiddenkelas di suatu tempat di proyek saya untuk melampirkan elemen untuk menghindari duplikasi.

dibuat ulang
sumber
Saya pikir saya telah membaca di suatu tempat bahwa versi ini lebih disukai karena indentasi teks negatif akan menyebabkan browser merender kotak panjang 10000px (atau apa pun yang Anda gunakan). Mengubah font seperti pada contoh ini tidak akan menyebabkan browser membuat kotak besar yang akan di-render.
Gambo
2
h1 {
    text-indent: -3000px; 
    line-height: 3000px;
    background-image: url(/LOGO.png);
    height: 100px; width:  600px;  /* height and width are a must */

}
penjual
sumber
3
Mengapa ada ketinggian garis?
SandRock
2

Coba kode ini untuk mempersingkat dan menyembunyikan teks

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

atau untuk menyembunyikan penggunaan di kelas css Anda .hidetxt { visibility: hidden; }

omar kerr
sumber
2

isi ulang konten dengan CSS

 h1{  font-size: 0px;}
 h1:after {
    content: "new content";
    font-size: 15px;
  }
Hossein Hajizadeh
sumber
1

Saya biasanya menggunakan:

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

Jika kita bisa mengedit markup, hidup bisa lebih mudah, cukup hapus teks dan berbahagialah. Tapi kadang-kadang markup ditempatkan dengan kode JS atau kita hanya tidak diizinkan untuk mengeditnya sama sekali, css yang sangat buruk berubah menjadi satu-satunya senjata yang ditempatkan di tangan kita.

Kami tidak dapat menempatkan <span>pembungkus teks dan menyembunyikan seluruh tag. Omong-omong, beberapa browser tidak hanya menyembunyikan elemen dengan display:nonetetapi juga menonaktifkan komponen di dalamnya.

Keduanya font-size:0pxdan color:transparentmungkin solusi yang baik, tetapi beberapa browser tidak memahaminya. Kita tidak bisa mengandalkan mereka.

Saya menyarankan:

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

Menggunakan overflow:hiddenmemberlakukan lebar & tinggi kami. Beberapa browser (tidak akan menamai mereka ... IE ) dapat membaca lebar dan tinggi sebagai min-widthdan min-height. Saya ingin mencegah kotak diperbesar.

Francisco
sumber
1

Menggunakan nilai nol untuk font-sizedan line-heightdalam elemen melakukan trik untuk saya:

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

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

<span class="text">
    Invisible Text
</span>
HelpNeeder
sumber
1

Untuk menyembunyikan teks dari html, gunakan properti teks-indent di css

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

/ * untuk teks dinamis Anda perlu menambahkan spasi, sehingga css yang Anda terapkan tidak akan mengganggu. nowrap berarti teks tidak akan pernah membungkus ke baris berikutnya, teks berlanjut pada baris yang sama sampai <br>tag ditemukan

urmila manjarikar
sumber
1

Salah satu cara saya mencapai ini adalah dengan menggunakan :beforeatau :after. Saya telah menggunakan pendekatan ini selama beberapa tahun, dan khususnya bekerja sangat baik dengan ikon vektor mesin terbang.

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;
    }
Pasak
sumber
0

Ini bekerja untuk saya dengan rentang (validasi sistem gugur).

<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;
}
Karson
sumber
0

Solusi yang bekerja untuk saya:

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;
}
Sébastien Gicquel
sumber
-1

Jawaban terbaik berfungsi untuk teks pendek, tetapi jika teksnya dibungkus, itu akan muncul di gambar.

Salah satu cara untuk melakukannya adalah menangkap kesalahan dengan penangan jquery. Cobalah memuat gambar, jika gagal maka akan muncul kesalahan.

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

Lihat KODE SAMPEL

Shanimal
sumber
-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;
 }
Harden Rahul
sumber
3
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
Benjamin W.