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: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요소에 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.