ซ่อนข้อความโดยใช้ CSS


306

ฉันมีแท็กใน html ของฉันเช่นนี้:

<h1>My Website Title Here</h1>

ใช้ css ฉันต้องการแทนที่ข้อความด้วยโลโก้จริงของฉัน ฉันมีโลโก้ที่ไม่มีปัญหาผ่านการปรับขนาดแท็กและวางภาพพื้นหลังในทาง css อย่างไรก็ตามฉันไม่สามารถหาวิธีกำจัดข้อความได้ ฉันเคยเห็นมันทำมาก่อนโดยการผลักข้อความออกจากหน้าจอ ปัญหาคือฉันไม่สามารถจำได้ว่าฉันเห็นมันที่ไหน


3
มีคำตอบที่ล้าสมัยมากมายที่นี่:
ลองอัปเดต

คำตอบ:


426

นี่คือวิธีหนึ่ง:

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 ไม่ได้ระบุสถานการณ์สำหรับการเยื้องเชิงลบดังนั้นสิ่งนี้อาจมีผลลัพธ์ที่ไม่สามารถคาดเดาได้
Chris Farmiloe

3
ถ้าคุณใช้วิธีนี้คุณควรเพิ่ม "ล้น: ซ่อน" เพื่อป้องกันไม่ให้เลือกกล่อง seird ยิงออกไปทางซ้าย (โดยเฉพาะอย่างยิ่งกับการเชื่อมโยง)
willoller

4
หากคุณมีลิงก์ใด ๆ ในองค์ประกอบที่มีการเยื้องข้อความเป็นลบให้ตรวจสอบให้แน่ใจว่าคุณได้ระบุ "เค้าร่าง: ไม่มี" มิฉะนั้นคุณจะได้เส้นขอบที่เป็นจุดออกไปทางซ้ายของหน้าจอ
nickf

9
ฉันต้องการใช้ 'การเยื้องข้อความ: -9999px;' เพียงเพื่อให้แน่ใจว่าข้อความอยู่นอกจอจริงๆ ความหวาดระแวงป้องกันเล็กน้อย
Andy Ford

4
เพิ่ม 'white-space: nowrap' เพื่อให้ปลอดภัยหากข้อความของคุณยาวเพียงบรรทัดแรกเท่านั้น
Andrew Moore

177

ทำไมไม่ใช้เพียง:

h1 { color: transparent; }

16
ทำไมจะไม่ล่ะ? เพราะ Google ไม่ชอบ
alekwisnia

32
การตรวจสอบความถูกต้อง (CSS 2.1): 'โปร่งใส' ไม่ใช่ค่าที่ถูกต้องสำหรับคุณสมบัติ 'สี'
HasanG

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

2
ดูเหมือนว่าวิธีการตรรกะ (อ่าน: น้อยที่สุด) ที่เป็นตรรกะมากที่สุด - แต่ฉันสงสัยว่ามันรองรับเบราว์เซอร์ต่างๆได้ดีแค่ไหน? (ฉันสามารถยืนยันได้ว่าทำงานได้ใน Firefox)
Brian Lacy

1
มันยังคงแสดงข้อความเล็ก ๆ ในเบราว์เซอร์มากกว่า IE7 เพียงอย่างเดียวนี่ไม่ใช่โซลูชันข้ามเบราว์เซอร์ที่สมบูรณ์
macguru2000

8
ฉันได้ทดสอบเคล็ดลับ {font-size: 0} ใน Chrome 27, Firefox 17, Safari สำหรับ windows 5.1.7, Opera 12.12, IE8, IE9, IE10 - ใช้ได้กับเบราว์เซอร์เหล่านั้นทั้งหมด เคล็ดลับนี้ดีที่สุดถ้าคุณไม่สามารถตั้งค่าภาพพื้นหลังบนองค์ประกอบของตัวเอง (เช่นเนื่องจากคุณใช้ภาพสไปรต์ที่อัดแน่นและไอคอนที่ต้องการไม่มีช่องว่างภายในที่ว่างเปล่าเพียงพอ) และต้องใช้ตัวเลือกหลอก เช่นองค์ประกอบ: หลังจากเพื่อแสดงภาพพื้นหลัง
beluga

1
สิ่งนี้จะเปลี่ยนขนาดของ div ด้วยดังนั้นฉันไม่แนะนำสิ่งนี้
เตฟาน Bijzitter

30

วิธีที่เป็นมิตรข้ามเบราว์เซอร์มากที่สุดคือการเขียน HTML เป็น

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

จากนั้นใช้ CSS เพื่อซ่อนช่วงและแทนที่ภาพ

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

หากคุณสามารถใช้ CSS2 ได้มีวิธีที่ดีกว่าในการใช้contentคุณสมบัตินี้ แต่น่าเสียดายที่เว็บยังไม่ได้ 100%


แต่ให้แน่ใจว่าได้ตั้งค่าความกว้างและความสูงของภาพ - และตรวจสอบให้แน่ใจว่าได้ตั้งค่า "ช่องว่างภายใน" และ "ระยะขอบ" เนื่องจากเบราว์เซอร์มีแนวคิดที่แตกต่างกันเกี่ยวกับแท็ก H1 / ช่องว่างภายใน

ข้อเสียเปรียบที่นี่คือถ้าภาพถูกปิดหรือถ้าบอตตระหนักถึง css ปรากฏขึ้นชื่อจะไม่ปรากฏ
willoller

13
ข้อความสำคัญภายในจอแสดงผลไม่มีใครอาจจะพลาดโดยบ็อตของเครื่องมือค้นหาและโปรแกรมอ่านหน้าจอ ใช้การเยื้องข้อความแทน
dylanfm

1
สิ่งนี้จะไม่ทำสิ่งใด OP อาจลบข้อความในหัวเรื่องได้เช่นกัน โปรแกรมอ่านหน้าจอไม่ได้ทำอะไรกับการแสดงไม่มี ..
ไอดริส Dopico Peña

23

การซ่อนข้อความโดยคำนึงถึงความสามารถในการเข้าถึง:

นอกจากคำตอบอื่น ๆ แล้วนี่เป็นอีกวิธีที่มีประโยชน์ในการซ่อนข้อความ

วิธีนี้ซ่อนข้อความได้อย่างมีประสิทธิภาพ แต่ช่วยให้สามารถอ่านข้อความบนหน้าจอได้ นี่คือตัวเลือกที่จะต้องพิจารณาหากความสามารถในการเข้าถึงเป็นปัญหา

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

มันคุ้มค่าที่ชี้ให้เห็นว่าชั้นนี้ถูกนำมาใช้ในขณะนี้เงินทุน 3


หากคุณสนใจที่จะอ่านเกี่ยวกับการช่วยการเข้าถึง:


1
แหล่งที่มาสำหรับ BS4 และ h5bp: github.com/h5bp/html5-boilerplate/blob/master/src/css/... , github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/...
ptim

วิธีนี้ใช้งานได้ดีสำหรับการเพิ่มองค์ประกอบเป็นโปรแกรมอ่านหน้าจอเท่านั้น อย่างไรก็ตามมันไม่สามารถใช้งานได้กับคำถามดั้งเดิมที่มีการแสดงรูปภาพโดยภาพพื้นหลังที่ระบุใน css
vossad01

@ vossad01 - หากคุณไม่สามารถเพิ่มองค์ประกอบอื่นและคุณติดอยู่กับองค์ประกอบเดียว (เช่นในกรณีที่คุณกล่าวถึง) แล้ววิธีแก้ปัญหาที่ดีอย่างหนึ่งก็คือการใช้องค์ประกอบหลอก ... นอกจากนี้ฉันโพสต์สิ่งนี้ คำตอบ 6 ปีหลังจากคำถามเริ่มต้นถูกถามและคำตอบของฉันมีเป้าหมายที่จะกำหนดกลุ่มเป้าหมายที่กว้างขึ้นเนื่องจากคำถามนี้ดูเหมือนจะเป็นที่นิยม
Josh Crozier


14

ดูmezzoblueสำหรับบทสรุปที่ดีของแต่ละเทคนิคด้วยจุดแข็งและจุดอ่อนรวมถึงตัวอย่าง html และ css


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
<style>
body {
     visibility:hidden
}
body .moz-signature p{
    visibility:visible
}
</style>

ผลงานดังกล่าวข้างต้นใช้งานได้ดีในธันเดอร์เบิร์ดล่าสุด


โปรดทราบว่าการใช้วิธีนี้ทำให้ข้อความที่ผู้อ่านหน้าจอส่วนใหญ่อ่านไม่ได้ - ดูstackoverflow.com/questions/1755656/…
Jordan Lev

5

คุณสามารถใช้background-imageคุณสมบัติcss และz-indexตรวจสอบให้แน่ใจว่าภาพอยู่ด้านหน้าข้อความ


ตัวอย่าง? ผมไม่เห็นว่าจะนำไปใช้z-index background-image
Martynas Jusevičius

5

ทำไมคุณไม่ใช้:

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

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

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

หากคุณยังไม่มีส่วนขยายหรือส่วน div มันจะทำงานได้อย่างสมบูรณ์แบบสำหรับลิงก์


4

คำตอบคือการสร้างช่วงที่มีคุณสมบัติ

{display:none;}

คุณสามารถหาตัวอย่างได้ที่เว็บไซต์นี้


1
downvotes บางส่วนอาจเกี่ยวข้องกับความกังวลเรื่องการเข้าถึง - จุดที่ถูกต้อง แต่ในกรณีของฉันฉันกำลังดึงเมนูจากบริการเมนูร้านอาหารลงในเว็บไซต์ผ่านบริการเว็บของพวกเขา เจ้าของร้านไม่ต้องการให้แสดงราคา (แต่ใช้บริการเดียวกันเพื่อพิมพ์เมนูจริง) นั่นเป็นสถานการณ์ที่ไม่ต้องการราคาในเว็บไซต์เลย มันเป็นการดีที่จะรู้วิธีการที่เป็นไปได้ทั้งหมด
Marvo

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:0pxและยังให้คุณได้ไปยังสถานที่width:0pxfont-size:0px


3

หากประเด็นคือทำให้ข้อความภายในองค์ประกอบไม่สามารถมองเห็นได้ให้ตั้งค่าแอตทริบิวต์สีให้มีความทึบ 0 โดยใช้ค่า rgba เช่นcolor:rgba(0,0,0,0);clean และ simple


3

ฉันจำไม่ได้ว่าตัวเองหยิบมาที่ไหน แต่ใช้งานได้สำเร็จนานหลายปี

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

mixin ของฉันอยู่ในเขมือบ แต่คุณสามารถใช้ในแบบที่คุณเห็นว่าเหมาะสม สำหรับการวัดที่ดีโดยทั่วไปฉันเก็บ.hiddenชั้นเรียนไว้ในโครงการของฉันเพื่อแนบกับองค์ประกอบเพื่อหลีกเลี่ยงการทำซ้ำ


ฉันคิดว่าฉันได้อ่านที่ไหนสักแห่งว่าเวอร์ชั่นนี้เป็นที่ต้องการเพราะการเยื้องข้อความเชิงลบจะทำให้เบราว์เซอร์แสดงกล่องขนาดยาว 10,000px (หรือตัวอย่างใดก็ตามที่คุณใช้) การเปลี่ยนแบบอักษรดังตัวอย่างนี้จะไม่ทำให้เบราว์เซอร์สร้างกล่องขนาดใหญ่ที่พยายามแสดงผล
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

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

หากเราสามารถแก้ไขมาร์กอัปชีวิตได้ง่ายขึ้นเพียงแค่ลบข้อความและมีความสุข แต่บางครั้งมาร์กอัปถูกวางโดยรหัส JS หรือเราไม่ได้รับอนุญาตให้แก้ไขเลย css ที่แย่เกินไปกลายเป็นอาวุธเดียวที่เราวางขาย

เราไม่สามารถวาง<span>ข้อความและซ่อนแท็กทั้งหมดได้ เบราว์เซอร์บางตัวไม่เพียง แต่ซ่อนองค์ประกอบdisplay:noneแต่ยังปิดใช้งานส่วนประกอบภายในด้วย

ทั้งสองfont-size:0pxและcolor: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-sizeและline-heightในองค์ประกอบทำให้ฉัน:

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

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

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

1

เพื่อซ่อนข้อความจาก html ใช้คุณสมบัติ text-indent ใน css

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

/ * สำหรับข้อความไดนามิกที่คุณต้องเพิ่ม white-space ดังนั้น css ที่คุณใช้จะไม่ถูกรบกวน nowrap หมายความว่าข้อความจะไม่ถูกตัดบรรทัดถัดไปข้อความจะดำเนินต่อไปในบรรทัดเดียวกันจนกว่า<br>จะพบแท็ก


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

คำตอบที่ดีที่สุดใช้งานได้กับข้อความสั้น ๆ แต่ถ้าหากมีการพันคำแล้วมันจะปรากฏในรูปภาพ

วิธีหนึ่งในการทำเช่นนี้คือตรวจจับข้อผิดพลาดด้วยตัวจัดการ 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
ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
Benjamin W.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.