Ẩn văn bản bằng css


306

Tôi có một thẻ trong html của mình như thế này:

<h1>My Website Title Here</h1>

Sử dụng css tôi muốn thay thế văn bản bằng logo thực tế của tôi. Tôi đã có logo không có vấn đề gì thông qua việc thay đổi kích thước thẻ và đặt hình nền vào trong thông qua css. Tuy nhiên, tôi không thể tìm ra cách loại bỏ văn bản. Về cơ bản, tôi đã thấy nó được thực hiện bằng cách đẩy văn bản ra khỏi màn hình. Vấn đề là tôi không thể nhớ nơi tôi đã nhìn thấy nó.


3
Có rất nhiều câu trả lời lỗi thời ở đây: xem xét nâng cấp câu trả lời gần đây hơn stackoverflow.com/a/27769435/2586761 để phơi bày nó
ptim

Câu trả lời:


426

Đây là một cách:

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

Đây là một cách khác để ẩn văn bản trong khi tránh hộp 9999 pixel khổng lồ mà trình duyệt sẽ tạo:

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
tiêu đề dài sẽ có vấn đề với phương pháp này vì chỉ có văn bản trước khi bọc từ được thụt lề và thông số W3C không chỉ định tình huống thụt lề tiêu cực nên điều này có thể có kết quả không thể đoán trước
Chris Farmiloe

3
Nếu bạn sử dụng phương pháp này, bạn nên thêm "tràn: ẩn" để ngăn hộp lựa chọn lạ lùng bắn sang bên trái (đặc biệt là với các liên kết)
willoller

4
Nếu bạn có bất kỳ liên kết nào trong các thành phần có thụt lề văn bản phủ định, hãy đảm bảo bạn cũng chỉ định "phác thảo: không" nếu không bạn sẽ có một đường viền chấm ở bên trái màn hình.
nickf

9
Tôi thích sử dụng 'văn bản thụt lề: -9999px;' chỉ để đảm bảo văn bản thực sự đi ra khỏi màn hình. Một chút hoang tưởng phòng thủ.
Andy Ford

4
Đồng thời thêm 'khoảng trắng: nowrap' chỉ để ở bên an toàn nếu văn bản của bạn dài chỉ có dòng đầu tiên được thụt vào.
Andrew Moore

177

Tại sao không sử dụng đơn giản:

h1 { color: transparent; }

16
Tại sao không? Bởi vì Google không thích nó.
alekwisnia

32
Xác thực (CSS 2.1): 'trong suốt' không phải là giá trị hợp lệ cho thuộc tính 'màu'.
HasanG

15
Văn bản sẽ hiển thị nếu người dùng chọn nó (STRG + A, v.v.) - Điều này có vẻ rất không chuyên nghiệp! Chúc mừng Christopher
Christopher Stock

24
@ HasanGürsoy và nhân viên của Google trong tương lai- "CSS3 mở rộng giá trị màu để bao gồm từ khóa 'trong suốt' ...."
ABMagil

11
color: transparent;hoạt động cùng với user-select: none;, trừ khi bạn ghi đè màu.
stan-z

162

Chỉ cần thêm font-size: 0;vào yếu tố của bạn có chứa văn bản.

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


1
Đây chính xác là những gì tôi cần. Tôi muốn ẩn những gì trong một div, nhưng hiển thị những gì trong các nhịp con (để ẩn dấu chấm câu giữa chúng).
mskfisher

2
Đây có vẻ như là phương pháp hợp lý nhất (đọc: Least Bizarre) - tuy nhiên, tôi tự hỏi nó được hỗ trợ tốt như thế nào trong các trình duyệt khác nhau? (Tôi có thể xác nhận nó hoạt động trong Firefox.)
Brian Lacy

1
Nó vẫn hiển thị văn bản rất nhỏ trong nhiều trình duyệt hơn là IE7, đây không phải là một giải pháp trình duyệt chéo hoàn chỉnh.
macguru2000

8
Tôi đã thử nghiệm mẹo {font-size: 0} trong Chrome 27, Firefox 17, Safari cho windows 5.1.7, Opera 12.12, IE8, IE9, IE10 - nó hoạt động trong tất cả các trình duyệt đó. Thủ thuật này là tốt nhất nếu bạn không thể đặt hình nền trên chính phần tử (ví dụ: vì bạn đang sử dụng hình ảnh sprite được đóng gói chặt chẽ và biểu tượng bắt buộc không có đủ phần đệm trống xung quanh nó) và phải sử dụng bộ chọn giả , ví dụ: phần tử: sau để hiển thị hình nền.
beluga

1
Điều này cũng thay đổi kích thước của div, vì vậy tôi không khuyến nghị điều này.
Stephan bijzitter

30

Cách thân thiện với nhiều trình duyệt nhất là viết HTML dưới dạng

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

sau đó sử dụng CSS để ẩn span và thay thế hình ảnh

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

Nếu bạn có thể sử dụng CSS2, thì có một số cách tốt hơn bằng cách sử dụng thuộc contenttính, nhưng thật không may, web chưa có 100% ở đó.


Nhưng hãy chắc chắn cũng đặt thuộc tính chiều rộng và chiều cao cho hình ảnh - và đảm bảo rằng "phần đệm" và "lề" được đặt vì các trình duyệt có các ý tưởng khác nhau về việc cần bao nhiêu phần đệm / lề của thẻ H1.

Hạn chế ở đây là nếu hình ảnh bị tắt hoặc nếu bot nhận biết css xuất hiện, tiêu đề sẽ không hiển thị.
xe đẩy

13
Văn bản quan trọng trong màn hình sẽ không bị bỏ sót bởi các bot công cụ tìm kiếm và trình đọc màn hình. Sử dụng văn bản thụt lề thay thế.
dylanfm

1
Điều này sẽ không làm một điều gì, OP cũng có thể loại bỏ văn bản trong tiêu đề. Trình đọc màn hình không làm gì cả với màn hình không hiển thị ..
Idris Dopico Peña

23

Ẩn văn bản với khả năng truy cập trong tâm trí:

Ngoài các câu trả lời khác, đây là một cách tiếp cận hữu ích khác để ẩn văn bản.

Phương pháp này che giấu văn bản một cách hiệu quả, nhưng vẫn cho phép nó hiển thị cho trình đọc màn hình. Đây là một lựa chọn để xem xét nếu khả năng tiếp cận là một mối quan tâm.

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

Thật đáng để chỉ ra rằng lớp này hiện đang được sử dụng trong Bootstrap 3 .


Nếu bạn thích đọc về khả năng truy cập:



Điều này hoạt động tốt để thêm một yếu tố chỉ là trình đọc màn hình; tuy nhiên, nó không hoạt động với câu hỏi ban đầu trong đó một hình ảnh sẽ được hiển thị bởi một hình ảnh nền được chỉ định trong css.
vossad01

@ vossad01 - Nếu bạn không thể thêm một yếu tố khác và bạn bị mắc kẹt với một yếu tố duy nhất (như trong trường hợp bạn đã đề cập), thì một cách giải quyết tốt sẽ là sử dụng một yếu tố giả ... cũng vậy, tôi đã đăng bài này trả lời 6 năm sau khi câu hỏi ban đầu được hỏi và câu trả lời của tôi nhằm nhắm đến đối tượng rộng hơn vì câu hỏi này có vẻ phổ biến.
Josh Crozier


14

Xem mezzoblue để biết tóm tắt về từng kỹ thuật, với điểm mạnh và điểm yếu, cộng với ví dụ html và css.


10

Rất nhiều giải pháp phức tạp.

Cách đơn giản nhất chỉ đơn giản là sử dụng:

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

Tuyệt quá! Điều này làm việc cho bất kỳ màu nền. Cảm ơn.
Sandeep Amarnath

8

bạn chỉ có thể ẩn văn bản của mình bằng cách thêm thuộc tính này:

font size: 0 !important;

Nó cũng đáng để kiểm tra xem !importantđiều khoản có thực sự cần thiết trong trường hợp của bạn hay không. Trong trường hợp của tôi, nó hoạt động tốt mà không có nó là tốt.
Eerik Sven Puudist

6

Không sử dụng { display:none; }Nó làm cho nội dung không thể truy cập. Bạn muốn trình đọc màn hình nhìn thấy nội dung của bạn và tạo kiểu trực quan cho nó bằng cách thay thế văn bản bằng một hình ảnh (như logo). Bằng cách sử dụng text-indent: -999px;hoặc một phương pháp tương tự, văn bản vẫn ở đó - chỉ không trực quan ở đó. Sử dụng display:none, và văn bản đã biến mất.


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

Trên đây cũng hoạt động tốt trong Thunderbird mới nhất.


Lưu ý rằng việc sử dụng phương pháp này làm cho văn bản không thể đọc được đối với hầu hết các trình đọc màn hình - xem stackoverflow.com/questions/1755656/ Kẻ
Jordan Lev

5

bạn có thể sử dụng thuộc tính css background-imagez-indexđể đảm bảo hình ảnh ở phía trước văn bản.


Thí dụ? Tôi không thấy cách z-indexáp dụng cho background-image.
Martynas Jusevičius

5

Tại sao bạn không sử dụng:

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

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

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

Nếu bạn không có bất kỳ yếu tố span hoặc div nào, nó hoạt động hoàn hảo cho các liên kết.


4

Câu trả lời là tạo một nhịp với thuộc tính

{display:none;}

Bạn có thể tìm thấy một ví dụ tại trang web này


1
Một số downvote có thể phải làm với mối quan tâm về khả năng truy cập - một điểm hợp lệ. Nhưng trong trường hợp của tôi, tôi đang kéo một menu từ dịch vụ menu nhà hàng vào một trang web thông qua dịch vụ web của họ. Chủ nhà hàng không muốn giá hiển thị (nhưng cùng một dịch vụ được sử dụng để in các menu thực tế.) Đó là tình huống mà người ta không muốn giá cả trên trang web. Thật tốt khi biết tất cả các phương pháp có thể.
Marvo

4

Đây thực sự là một khu vực chín muồi để thảo luận, với nhiều kỹ thuật tinh tế có sẵn. Điều quan trọng là bạn chọn / phát triển một kỹ thuật đáp ứng nhu cầu của bạn bao gồm: trình đọc màn hình, hình ảnh / css / kịch bản kết hợp bật / tắt, seo, v.v.

Dưới đây là một số tài nguyên tốt để bắt đầu con đường của các kỹ thuật thay thế hình ảnh tiêu chuẩn:

http://faq.css-stiterias.org/Image_Replocation

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

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


3

Sử dụng thẻ Điều kiện cho các trình duyệt khác nhau và sử dụng css bạn phải đặt height:0pxwidth:0pxbạn cũng phải đặt font-size:0px.


3

Nếu mục đích chỉ đơn giản là làm cho văn bản bên trong phần tử trở nên vô hình, hãy đặt thuộc tính màu thành có độ mờ 0 bằng cách sử dụng giá trị rgba như color:rgba(0,0,0,0);sạch và đơn giản.


3

Tôi không nhớ tôi đã nhặt cái này ở đâu, nhưng đã sử dụng nó thành công từ lâu.

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

Mixin của tôi là trong sass tuy nhiên bạn có thể sử dụng nó bất kỳ cách nào bạn thấy phù hợp. Để có biện pháp tốt, tôi thường giữ một .hiddenlớp ở đâu đó trong dự án của mình để gắn vào các phần tử để tránh trùng lặp.


Tôi nghĩ rằng tôi đã đọc ở đâu đó rằng phiên bản này được ưa thích hơn vì thụt lề văn bản phủ định sẽ khiến trình duyệt hiển thị hộp dài 10000px (hoặc bất kỳ ví dụ nào bạn sử dụng). Thay đổi phông chữ như trong ví dụ này sẽ không khiến trình duyệt tạo ra một hộp lớn mà nó cố gắng hiển thị.
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
Tại sao có chiều cao dòng?
SandRock

2

Hãy thử mã này để rút ngắn và ẩn văn bản

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

hoặc để ẩn sử dụng trong lớp css của bạn .hidetxt { visibility: hidden; }


2

đánh giá lại nội dung với CSS

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

1

Tôi thường sử dụng:

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

1

Nếu chúng ta có thể chỉnh sửa đánh dấu, cuộc sống có thể dễ dàng hơn, chỉ cần xóa văn bản và hạnh phúc. Nhưng đôi khi, việc đánh dấu được đặt bởi mã JS hoặc chúng tôi hoàn toàn không được phép chỉnh sửa nó, css quá tệ đã trở thành vũ khí duy nhất được sử dụng theo ý của chúng tôi.

Chúng tôi không thể đặt một <span>gói văn bản và ẩn toàn bộ thẻ. Nhân tiện, một số trình duyệt không chỉ che giấu các yếu tố display:nonemà còn vô hiệu hóa các thành phần bên trong.

Cả hai font-size:0pxcolor:transparentcó thể là giải pháp tốt, nhưng một số trình duyệt không hiểu chúng. Chúng ta không thể dựa vào họ.

Tôi đề nghị:

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

Sử dụng overflow:hiddenthực thi chiều rộng và chiều cao của chúng tôi. Một số trình duyệt (sẽ không đặt tên chúng là ... IE ) có thể đọc chiều rộng và chiều cao là min-widthmin-height. Tôi muốn ngăn chặn hộp được mở rộng.


1

Sử dụng giá trị 0 cho font-sizeline-heighttrong phần tử thực hiện mẹo cho tôi:

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

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

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

1

Để ẩn văn bản khỏi html, hãy sử dụng thuộc tính văn bản thụt lề trong css

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

/ * đối với văn bản động, bạn cần thêm khoảng trắng, vì vậy css được áp dụng của bạn sẽ không làm phiền. nowrap có nghĩa là văn bản sẽ không bao giờ ngắt dòng tiếp theo, văn bản tiếp tục trên cùng một dòng cho đến khi <br>gặp thẻ


1

Một trong những cách tôi đạt được điều này là sử dụng :beforehoặc :after. Tôi đã sử dụng phương pháp này trong vài năm và đặc biệt hiệu quả với các biểu tượng vector glyph.

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

Điều này làm việc cho tôi với span (xác nhận loại trực tiếp).

<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

Một giải pháp hiệu quả với tôi:

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

Câu trả lời tốt nhất hoạt động cho văn bản ngắn, nhưng nếu văn bản kết thúc tốt đẹp, nó chỉ hiển thị trong hình ảnh.

Một cách để làm điều đó là bắt lỗi với một trình xử lý jquery. Hãy thử tải một hình ảnh, nếu nó không thành công, nó sẽ báo lỗi.

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

Xem MÃ MẪU


-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
Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
Benjamin W.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.