Css kullanarak metni gizleme


306

Benim html böyle bir etiket var:

<h1>My Website Title Here</h1>

Css kullanarak metni gerçek logomla değiştirmek istiyorum. Ben logo yeniden boyutlandırma ve css üzerinden bir arka plan görüntüsü koyarak hiçbir sorun var. Ancak, metinden nasıl kurtulacağımı anlayamıyorum. Daha önce metni ekrandan dışarı iterek yapıldığını gördüm. Sorun şu ki, nerede gördüğümü hatırlayamıyorum.


3
modası geçmiş cevapları sürü var burada: daha yeni cevap upvoting düşünün stackoverflow.com/a/27769435/2586761 hale getirileceğini
ptim

Yanıtlar:


426

Bu bir yol:

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

İşte başka bir yolu tarayıcı yaratacak bu büyük 9999 piksel kutusunu kaçınırken metni gizlemek için:

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
uzun sözcüklerin bu yöntemle ilgili bir sorunu olacaktır, çünkü yalnızca sözcük kaydırmadan önceki metin girintili olur ve W3C spesifikasyonu negatif girinti için bir durum belirtmez, bu nedenle bu tahmin edilemeyen sonuçlar doğurabilir
Chris Farmiloe

3
Bu yöntemi kullanırsanız, seird seçim kutusunun sola (özellikle bağlantılar ile) ateş etmesini önlemek için "taşma: gizli" eklemeniz gerekir
willoller

4
Negatif metin girintili öğelerde herhangi bir bağınız varsa, "anahat: yok" ifadesini de belirttiğinizden emin olun, aksi takdirde ekranın solundan çıkan noktalı bir kenarlıkla karşılaşırsınız.
nickf

9
'Text-indent: -9999px;' kullanmayı tercih ederim. metnin ekrandan gerçekten uzağa gittiğinden emin olmak için. Biraz savunma paranoyası.
Andy Ford

4
Ayrıca, metniniz yalnızca ilk satır girintili olduğu sürece uzunsa, güvenli tarafta olmak için 'beyaz boşluk: nowrap' ekleyin.
Andrew Moore

177

Neden sadece kullanmıyorsunuz:

h1 { color: transparent; }

16
Neden olmasın? Çünkü Google bundan hoşlanmıyor.
alekwisnia

32
Doğrulama (CSS 2.1): 'saydam', 'renk' özelliği için geçerli bir değer değil.
HasanG

15
Kullanıcı seçerse metin görünür hale gelecektir (STRG + A vb.) - Bu çok profesyonel görünmüyor! Selamlar Christopher
Christopher Stock

24
@ HasanGürsoy ve gelecekteki googlers- "CSS3, renk değerini 'şeffaf' anahtar kelimeyi içerecek şekilde genişletiyor ...."
ABMagil

11
color: transparent;user-select: none;rengi geçersiz kılmadığınız sürece, ile birlikte çalışır .
stan-z

162

Sadece font-size: 0;metin içeren öğenize ekleyin .

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


1
Tam da ihtiyacım olan şey bu. Bir div'da olanı gizlemek istedim, ancak çocukta olanı göstermek istedim (aralarındaki noktalama işaretlerini gizlemek için).
mskfisher

2
Bu en mantıklı (okuma: En Az Tuhaf) yöntemi gibi görünüyor - ancak, çeşitli tarayıcılarda ne kadar iyi desteklendiğini merak ediyorum? (Firefox'ta çalıştığını onaylayabilirim.)
Brian Lacy

1
Hala IE7'den daha fazla tarayıcıda metni çok küçük gösteriyor, bu tam bir çapraz tarayıcı çözümü değil.
macguru2000

8
Chrome 27, Firefox 17, Windows 5.1.7, Opera 12.12, IE8, IE9, IE10 için Safari'de {font-size: 0} numarasını test ettim - tüm bu tarayıcılarda çalışır. Bu hile, arka plan görüntüsünü öğenin kendisinde ayarlayamıyorsanız (örn. Sıkıca paketlenmiş hareketli grafik görüntüsü kullandığınız ve gerekli simgenin etrafında yeterli boş dolgu olmadığından) ve sözde seçici kullanmak zorunda olduğunuzda en iyisidir. , örn. eleman: arka plan resmini görüntülemek için after.
beluga

1
Bu da div boyutunu değiştirir, bu yüzden bunu önermiyorum.
Stephan Bijzitter

30

Tarayıcılar arası en kolay yol HTML'yi şu şekilde yazmaktır:

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

sonra aralığı gizlemek ve görüntüyü değiştirmek için CSS kullanın

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

CSS2'yi kullanabiliyorsanız, contentözelliği kullanmanın daha iyi yolları vardır , ancak maalesef web henüz% 100 değildir.


Ancak, genişlik ve yükseklik özelliğini görüntünün genişliğine ayarladığınızdan emin olun ve tarayıcıların bir H1 etiketinin ne kadar dolgu / kenar boşluğu olması gerektiğine ilişkin farklı fikirleri olduğu için "dolgu" ve "kenar boşluğu" ayarlarının yapıldığından emin olun.

Buradaki dezavantaj, görüntüler kapatılırsa veya css kullanan bir bot görünürse, başlık görünmez.
willoller

13
Ekrandaki önemli metin, arama motoru botları ve ekran okuyucular tarafından kaçırılmayacaktır. Bunun yerine metin girintisini kullanın.
dylanfm

1
Bu bir şey yapmaz, OP de başlıktaki metni kaldırabilir. Ekran okuyucular ekran hiçbiri ile hiçbir şey yapmaz ..
Idris Dopico Peña

23

Erişilebilirliği göz önünde bulundurarak metni gizleme:

Diğer cevaplara ek olarak, metni gizlemek için başka bir yararlı yaklaşım.

Bu yöntem metni etkili bir şekilde gizler, ancak ekran okuyucular için görünür kalmasını sağlar. Bu, erişilebilirliğin bir endişe olup olmadığını dikkate almak için bir seçenektir.

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

Bu sınıfın şu anda Bootstrap 3'te kullanıldığını belirtmek gerekir .


Erişilebilirlik hakkında okumak istiyorsanız:



Bu sadece ekran okuyucu bir eleman eklemek için iyi çalışır; ancak, görüntünün css'de belirtilen bir arka plan görüntüsü ile görüntüleneceği orijinal soru ile çalışmaz.
vossad01

@ vossad01 - Başka bir öğe ekleyemiyorsanız ve tek bir öğe ile sıkışmışsanız (bahsettiğiniz durumda olduğu gibi), o zaman iyi bir geçici çözüm sahte bir öğeyi kullanmak olacaktır ... ayrıca, bunu gönderdim İlk soru sorulduktan 6 yıl sonra yanıtım ve bu soru popüler gibi göründüğünden cevabım daha geniş bir kitleyi hedeflemekti.
Josh Crozier


14

Her tekniğin güçlü ve zayıf yanları ile html ve css gibi güzel bir özet için mezzoblue'ya bakın .


10

Çok karmaşık çözümler.

En kolay olanı kullanmaktır:

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

Harika! Bu, herhangi bir arka plan rengi için çalışır. Teşekkürler.
Sandeep Amarnath

8

bu özelliği ekleyerek metninizi gizleyebilirsiniz:

font size: 0 !important;

!importantDavanızda fıkra gerçekten gerekli olup olmadığını da kontrol etmeye değer . Benim durumumda da iyi çalıştı.
Eerik Sven Puudist

6

Kullanmayın { display:none; }İçeriğe erişilemez hale getirir. Ekran okuyucuların içeriğinizi görmesini ve metni bir resimle (logo gibi) değiştirerek görsel olarak biçimlendirmesini istiyorsunuz. text-indent: -999px;Veya benzer bir yöntem kullanarak , metin hala orada - görsel olarak orada değil. Kullanın display:noneve metin gitti.



5

css background-imageözelliğini z-indexkullanarak ve görüntünün metnin önünde kalmasını sağlamak için kullanabilirsiniz .


Misal? İçin nasıl z-indexgeçerli olduğunu görmüyorum background-image.
Martynas Jusevičius

5

Neden kullanmıyorsunuz:

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

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

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

Span veya div öğeniz yoksa, bağlantılar için mükemmel çalışır.


4

Cevap özelliği ile bir span oluşturmaktır

{display:none;}

Bu sitede bir örnek bulabilirsiniz


1
Bazı düşüşler muhtemelen erişilebilirlik endişeleriyle ilgilidir - geçerli bir nokta. Ama benim durumumda, bir restoran menü hizmetinden bir menü kendi web servisi aracılığıyla bir web sitesine çekiyorum. Restoran sahibi, fiyatların görüntülenmesini istemiyor (ancak aynı menüler gerçek menüleri yazdırmak için kullanılıyor.) Bu, sitedeki fiyatları hiç istemediği bir durum. Tüm olası yaklaşımları bilmek iyidir.
Marvo

4

Bu aslında tartışmaya açık bir alandır ve birçok ince teknik mevcuttur. Ekran okuyucular, resimler / css / komut dosyası açma / kapama kombinasyonları, seo vb. Gibi ihtiyaçlarınızı karşılayan bir teknik seçmeniz / geliştirmeniz önemlidir.

Standardista görüntü değiştirme tekniklerinin yolunda başlamak için bazı iyi kaynaklar:

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

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

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


3

Farklı tarayıcı için Koşul etiketini kullanın ve css kullanarak yerleştirmeniz height:0pxve width:0pxayrıca yerleştirmeniz gerekir font-size:0px.


3

Nokta, öğenin içindeki metni görünmez yapmaksa, color:rgba(0,0,0,0);temiz ve basit gibi bir rgba değeri kullanarak renk niteliğini 0 opaklığa sahip olacak şekilde ayarlayın .


3

Bunu nereden aldığımı hatırlamıyorum ama yıllardır başarıyla kullanıyorum.

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

Benim mixin sass olduğunu ancak uygun gördüğünüz herhangi bir şekilde kullanabilirsiniz. İyi bir önlem olarak, .hiddençoğaltmayı önlemek için öğelere eklemek için genellikle projemin bir yerinde bir sınıf tutarım .


Ben negatif bir metin girintisi tarayıcı 10000px (veya kullandığınız herhangi bir örnek) uzun bir kutu oluşturmak neden olur çünkü bu sürüm tercih bir yerde okudum düşünüyorum. Yazı tipini bu örnekteki gibi değiştirmek, tarayıcının oluşturmaya çalıştığı büyük bir kutu oluşturmasına neden olmaz.
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
Neden bir satır yüksekliği var?
SandRock

2

Metni kısaltmak ve gizlemek için bu kodu deneyin

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

veya css sınıfınızdaki kullanımı gizlemek için .hidetxt { visibility: hidden; }


2

içeriği CSS ile yeniden doldurma

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

1

Genellikle kullanıyorum:

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

1

İşaretlemeyi düzenleyebilirsek, hayat daha kolay olabilir, sadece metni kaldırın ve mutlu olun. Ancak bazen işaretleme JS kodu ile yerleştirildi veya sadece düzenlememize izin verilmiyor, çok kötü css elimizdeki tek silah oldu.

Biz koyamaz <span>saran metni ve bütün etiketini gizler. Bu arada, bazı tarayıcılar yalnızca içindeki öğeleri gizlemekle display:nonekalmaz , aynı zamanda içindeki bileşenleri de devre dışı bırakır.

Her ikisi de font-size:0pxve color:transparentiyi çözümler olabilir, ancak bazı tarayıcılar bunları anlamıyor. Onlara güvenemeyiz.

Öneririm:

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

Kullanımı overflow:hiddengenişliğimizi ve yüksekliğimizi zorlar. Bazı tarayıcılar (onlara isim vermeyecektir ... IE ) genişliği ve yüksekliği min-widthve olarak okuyabilir min-height. Kutunun büyütülmesini önlemek istiyorum.


1

Eleman için font-sizeve line-heightiçinde sıfır değeri kullanmak benim için hile yapar:

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

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

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

1

HTML'den metni gizlemek için css'de text-indent özelliğini kullanın

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

/ * dinamik metin için beyaz boşluk eklemeniz gerekir, böylece uyguladığınız css rahatsız etmeyecektir. nowrap, metnin hiçbir zaman bir sonraki satıra sarılmayacağı anlamına gelir, bir <br>etiketle karşılaşılana kadar metin aynı satırda devam eder


1

Bunu başarmanın yollarından biri :beforeveya kullanmaktır :after. Bu yaklaşımı birkaç yıldır kullanıyorum ve özellikle glif vektör simgeleriyle harika çalışıyor.

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

Bu benim için span (nakavt validasyonu) ile çalıştı.

<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

Benim için çalışan bir çözüm:

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

En iyi yanıt kısa metin için geçerlidir, ancak metin sarılırsa görüntüde görünür.

Bunu yapmanın bir yolu, bir jquery işleyicisi ile hataları yakalamaktır. Bir görüntüyü yüklemeyi deneyin, başarısız olursa bir hata atar.

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

ÖRNEK KOD'a bakın


-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
Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
Benjamin W.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.