CSS를 사용하여 텍스트 숨기기


306

내 HTML에 다음과 같은 태그가 있습니다.

<h1>My Website Title Here</h1>

CSS를 사용하여 텍스트를 실제 로고로 바꾸고 싶습니다. 태그 크기를 조정하고 CSS를 통해 배경 이미지를 넣음으로써 아무런 문제가없는 로고가 있습니다. 그러나 텍스트를 제거하는 방법을 알 수 없습니다. 나는 기본적으로 텍스트를 화면 밖으로 밀어서 이전에 수행 된 것을 보았습니다. 문제는 내가 본 곳을 기억할 수 없다는 것입니다.


3
오래된 답변 많이 여기에있다 : 더 최근 응답 upvoting 고려 stackoverflow.com/a/27769435/2586761을 을 노출
ptim

답변:


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 사양은 부정적인 들여 쓰기의 상황을 지정하지 않습니다
크리스 Farmiloe

3
이 방법을 사용하는 경우 "오버플로 : 숨김"을 추가하여 seird 선택 상자가 왼쪽 (특히 링크 포함)으로 발사되지 않도록해야합니다.
willoller

4
텍스트 들여 쓰기가 음수 인 요소에 링크가있는 경우 "outline : none"도 지정해야합니다. 그렇지 않으면 화면 왼쪽에 점선 테두리가 나타납니다.
nickf

9
'text-indent : -9999px;'를 선호합니다 텍스트가 화면에서 멀리 떨어져 있는지 확인하십시오. 약간의 방어 적 편집증.
Andy Ford

4
또한 첫 줄만 들여 쓰면 텍스트가 길면 '공백 : 지금 줄 바꿈'을 추가하여 안전면에 두십시오.
Andrew Moore

177

단순히 사용하지 않는 이유 :

h1 { color: transparent; }

16
왜 안돼? 구글은 그것을 좋아하지 않기 때문에.
alekwisnia

32
유효성 검사 (CSS 2.1) : '투명한'은 'color'속성에 유효한 값이 아닙니다.
HasanG

15
사용자가 텍스트를 선택하면 텍스트가 표시됩니다 (STRG + A 등)-이것은 매우 전문적이지 않습니다! 크리스토퍼
크리스토퍼 재고

24
@ HasanGürsoy 및 미래 Google 직원- "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
Chrome 27, Firefox 17, Windows 용 Safari 5.1.7, Opera 12.12, IE8, IE9, IE10에서 {font-size : 0} 트릭을 테스트했습니다. 모든 브라우저에서 작동합니다. 이 트릭은 요소 자체에 배경 이미지를 설정할 수없는 경우 (예 : 단단히 포장 된 스프라이트 이미지를 사용하고 필요한 아이콘에 빈 패딩이 충분하지 않기 때문에) 의사 선택기를 사용해야하는 경우에 가장 좋습니다 예 : element : after 배경 이미지를 표시합니다.
beluga

1
이것은 또한 div의 크기를 변경하므로 권장하지 않습니다.
Stephan 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는 제목의 텍스트를 제거 할 수도 있습니다. 스크린 리더는 아무 것도 표시하지 않습니다.
Idris 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;
}

이 클래스는 현재 Bootstrap 3 에서 사용된다는 것을 지적 할 가치가 있습니다 .


접근성에 대해 읽으려면 다음을 수행하십시오.



이것은 요소를 추가 할 때 효과적입니다. 화면 판독기입니다. 그러나 CSS에 지정된 배경 이미지로 이미지를 표시하는 원래 질문에는 작동하지 않습니다.
vossad01

@ vossad01-다른 요소를 추가 할 수 없으며 단일 요소 (예 : 언급 한 경우)와 붙어있는 경우 의사 요소 를 활용하는 것이 좋습니다 ... 초기 질문을받은 후 6 년이 지나서 답변이되었으며이 질문은 인기있는 것으로 보이므로 더 많은 잠재 고객을 대상으로 작성되었습니다.
Josh Crozier 3:29에


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

위의 내용은 최신 Thunderbird에서도 잘 작동합니다.


이 방법을 사용하면 대부분의 스크린 리더가 텍스트를 읽을 수 없게됩니다.- stackoverflow.com
Jordan Lev

5

css background-image속성 z-index을 사용하여 이미지가 텍스트 앞에 유지되도록 할 수 있습니다 .


예? 에 어떻게 z-index적용 되는지 모르겠습니다 background-image.
Martynas Jusevičius '12

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
다운 보트 중 일부는 아마도 접근성 문제와 관련이있을 것입니다. 그러나 제 경우에는 식당 메뉴 서비스에서 웹 서비스를 통해 웹 사이트로 메뉴를 가져옵니다. 식당 주인은 가격을 표시하고 싶지 않지만 (실제 메뉴를 인쇄하는 데 동일한 서비스가 사용됩니다.) 이는 사이트의 가격을 전혀 원하지 않는 상황입니다. 가능한 모든 접근 방법을 아는 것이 좋습니다.
Marvo

4

이것은 실제로 많은 미묘한 기술을 사용할 수있는 논의가 필요한 영역입니다. 스크린 리더, 이미지 / css / 스크립팅 온 / 오프 조합, 검색 엔진 최적화 등 요구 사항에 맞는 기술을 선택 / 개발하는 것이 중요합니다.

다음은 standardista 이미지 교체 기술을 시작하는 데 유용한 자료입니다.

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

내 믹스 인은 sass에 있지만 원하는대로 사용할 수 있습니다. 좋은 측정을 위해 나는 일반적으로 .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

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; }


2

CSS를 사용하여 컨텐츠를 다시 작성

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

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-widthmin-height. 상자가 확대되는 것을 방지하고 싶습니다.


1

요소 에 font-sizeline-height요소에 0 값을 사용 하면 트릭이 수행됩니다.

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

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

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

1

HTML에서 텍스트를 숨기려면 CSS의 텍스트 들여 쓰기 속성을 사용하십시오.

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

/ * 동적 텍스트의 경우 공백을 추가해야하므로 적용된 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 (knockout validation)으로 저에게 효과적이었습니다.

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