SRC가없는 이미지를 포함시키는 올바른 방법은 무엇입니까?


234

나중에 자바 스크립트로 src로 동적으로 채울 이미지가 있지만 쉽게 이미지 태그가 페이지로드에 존재하지만 아무것도 표시하지 않기를 원합니다. 나는 <img src='' />유효하지 않다는 것을 알고 있으므로 이것을 수행하는 가장 좋은 방법은 무엇입니까?


4
이것은 비교적 오래된 질문이지만 src가없는 이미지는 본질적으로 의미가 없으며, 따라서 스펙에 이미지 내장 리소스를 가리키는 src가 있어야 한다고 규정하는 것이 좋습니다. 유효성 및 / 또는 의미에 대해 생각하는 경우 HTML은 나중에 데이터로 채워질 자리 표시 자 이미지를 지정하는 방법을 제공하지 않기 때문에 이미지를 완전히 생략하고 사실 후에 추가하여 훨씬 더 효과적으로 제공됩니다.
BoltClock

1
Mika Tuupola의 게으른 로딩 jQuery 플러그인을 사용할 때 '<img class = "lazy"data-original = "img / example.jpg"width = "640"height = "480">'마크 업을 사용하므로 어떤 의미에서는 소스를 가리켜 야하지만 src 속성으로 수행 할 필요는 없습니다.
iWillGetBetter

대신 div 요소를 사용할 수 있습니다. this => stackoverflow.com/a/5513934/1395101
Amin Ghaderi

답변:


237

이미지의 소스를 생략하는 유효한 방법이 없지만, 거기에 있는 소스하는하지 않습니다 서버 안타 원인. 나는 최근에 iframes와 비슷한 문제가 있었고 //:0최선의 선택이라고 결정 했습니다. 아냐!

//(프로토콜 생략)으로 시작 하면 현재 페이지의 프로토콜이 사용되어 HTTPS 페이지에서 "안전하지 않은 내용"경고를 방지합니다. 호스트 이름을 건너 뛸 필요는 없지만 더 짧아집니다. 마지막으로 포트 :0는 서버 요청을 수행 할 수 없도록합니다 (사양에 따라 유효한 포트가 아님).

이것은 브라우저에서 서버 적중이나 오류 메시지를 발생시키지 않은 유일한 URL입니다. 일반적인 선택 — javascript:void(0)— HTTPS를 통해 제공되는 페이지에서 사용되는 경우 IE7에서 "안전하지 않은 내용"경고가 발생합니다. 유효하지 않은 주소라도 다른 포트로 인해 서버 연결이 시도되었습니다. (일부 브라우저는 단순히 잘못된 요청을하고 시간이 초과 될 때까지 기다립니다.)

이것은 Chrome, Safari 5, FF 3.6 및 IE 6/7/8에서 테스트되었지만 시도한 요청을 죽이는 네트워크 계층이기 때문에 모든 브라우저에서 작동 할 것으로 기대합니다.


16
이 답변은 예를 들어 방화벽이 포트 0 액세스에 대해 경고하도록 할 수 있습니다. 또는 서버 보안 로그가 발생할 수 있습니다. 조언 조언 about:blank은 아마도 더 나은 해결책 일 것입니다.
Florian Margaine

10
이로 인해 깨진 이미지 아이콘이 표시됩니다. 다른 사람이 이것을보고 있습니까? 최신 Firefox (27)를 사용하고 있습니다.
dmikester1

10
또한 w3c 유효성 검사기 실패 : img 요소의 src 속성에 대한 잘못된 값 // : 0 : 유효하지 않은 호스트 : 빈 호스트.
ysrb

작동하지 않습니다. clearing이라는 이미지 갤러리 플러그인이 포함 된 ASP.NET MVC 4 응용 프로그램이 있습니다. 플러그인은 이미지를 동적으로 생성하고 이미지를 실제로 가져올 때까지 // : 0 o src를 넣습니다. 이것은 내 홈 컨트롤러의 인덱스 작업을 두 번 호출하게했습니다. 그러니 조심하십시오.
jpgrassi

2
Firefox 38에서이 접근 방식은 이미지 onerror처리기를 트리거 합니다.
Nate Whittaker

221

다른 옵션은 빈 이미지를 포함시키는 것입니다. 목적에 맞는 모든 이미지가 수행되지만 다음 예제는 26 바이트 인 GIF를 http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever 에서 인코딩합니다 .

<img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" width="0" height="0" alt="" />

아래의 의견을 바탕으로 편집하십시오.

물론 브라우저 지원 요구 사항을 고려해야합니다. IE7 이하는 지원되지 않습니다. http://caniuse.com/datauri


14
좋은 생각이야! 그러나 나를 위해,이 이미지 요소를 죽이고 - 사람의 다른 측면을 필요로하는 경우 img예를 들어, 배경과 경계를 표시하는 요소를 시도 src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="내가 포토샵을 만든 1 픽셀의 X 1 픽셀의 투명 GIF에서 가져 통해 밀어 base64-image.de
user56reinstatemonica8

4
당신은 데이터 URI를 사용하여 자원을 인라인에 대해 두 번 생각 할 수 있습니다 : mobify.com/blog/data-uris-are-slow-on-mobile
shawnjan

1
이 옵션의 실행 가능성은 지원해야하는 브라우저에 따라 다릅니다. caniuse.com/datauri
Jeff Clemens

6
투명한 1 픽셀 PNG는 다음과 같습니다.data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII=
Keavon

2
나를 위해 일한 투명 이미지 URL -data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
크람 라오

34

요즘 빈 img src에 대한 가장 짧고 제정신이며 유효한 방법은 다음과 같습니다.

<img src="data:," alt>
or
<img src="data:," alt="Alternative Text">

두 번째 예는 '대체 텍스트'(Chrome 및 IE의 깨진 이미지 아이콘)를 표시합니다.

"data:,"유효한 URI입니다. 빈 미디어 유형은 기본적으로 text/plain입니다. 따라서 빈 텍스트 파일을 나타내며"data:text/plain,"


OT : 모든 브라우저는 평범한 것을 이해 alt합니다. 당신은 생략 할 수 =""는 HTML 사양에 따라 암시 적이다.


1
W3C 유효성 검사기 확인시 HTML 오류가 없습니다. 불필요한 요청이 없습니다. 👍 올바른 방법으로 보입니다.
Kai Noack

베스트! 한 가지 더, srcset에서 유효성을 검사하려면 다음을 사용하십시오.srcset="data:,x"
Lucian Davidescu

18

동적으로 요소를 추가하는 것이 좋으며 jQuery 또는 다른 JavaScript 라이브러리를 사용하는 경우 매우 간단합니다.

또한보고 prependappend. 그렇지 않으면 이와 같은 이미지 태그가 있고 유효성을 검사하려는 경우 1px 투명 gif 또는 png와 같은 더미 이미지를 사용하는 것이 좋습니다.


7
+1 이것이 가장 좋은 답변입니다. 이미지 소스가 동적으로 설정되는 경우 전체 요소를 동적으로 추가해야합니다. src가 설정 될 때까지 보이지 않게하려면 요소가 그 앞에 있어야하는 이유를 생각할 수 없습니다.
앤드류 Ensley

15

나는 이것을 한동안하지 않았지만이 같은 일을 한 번 겪어야했다.

<img src="about:blank" alt="" />

내가 가장 좋아하는 것은- //:0포트 0 (tcpmux 포트?)에서 오리진 서버에 HTTP / HTTPS 연결을 시도한다는 것을 의미합니다. 아마도 무해하지만 어쨌든하지는 않을 것입니다. 브라우저는 포트 0을보고 요청을 보내지 않을 수도 있습니다. 그러나 나는 그것이 아마도 당신이 의미하는 것이 아닐 때 그렇게 지정되지는 않을 것입니다.

어쨌든 렌더링 about:blank은 실제로 테스트 한 모든 브라우저에서 매우 빠릅니다. 방금 W3C 유효성 검사기에 던졌지 만 불평하지 않았으므로 유효 할 수도 있습니다.

편집 :하지 마십시오; 모든 브라우저에서 작동하지는 않습니다 (이 답변에 대한 의견에서 지적한대로 '깨진 이미지'아이콘이 표시됩니다). <img src='data:...아래 솔루션을 사용하십시오 . 또는 유효성에 신경 쓰지 않고 여전히 서버에 불필요한 요청을 피하려면 <img alt="" />src 속성을 사용하지 않아도됩니다. 그러나 그것은 잘못된 HTML이므로 신중하게 선택하십시오.

http://desk.nu/blank_image.php- 다양한 방법을 보여주는 테스트 페이지 : 모든 종류의 문서 유형 및 내용 유형과 함께 제공 -아래 의견에서 언급 한대로 Mark Ormston의 새 테스트 페이지를 사용하십시오. http://memso.com/Test/BlankImage.html


네트워크 계층에서 오류를 발생시키는 것보다 깨끗해 보입니다.
Denys Séguret

적어도 당신은 바보 같은 방화벽이 포트 0을 호출하는 권한을 요구하지 않을 것이라고 확신합니다.
Denys Séguret

1
Chrome에 '깨진 이미지'아이콘이 표시 될 것입니다. 아마도 다른 브라우저에서도 마찬가지입니다.
user56reinstatemonica8

1
내가 생각했던 것보다 나쁘다-html5 doctype이 있어도 Safari 또는 Chrome에서는 작동하지 않는 것 같습니다. 페이지의 내용 유형과 문서 유형을 뒤틀는 테스트 페이지가 있으며, 지금까지 가장 좋아하는 것은 다음과 같습니다. <img />- src 속성이 없는 이미지 태그 . 이것은 유효 하지 않습니다 (따라서 빈 alt 태그도 넣지 않아도됩니다). 나는 그것을 계속 사용하고 있으며 그에 따라 내 대답을 업데이트 할 것입니다.
Uberbrady

2
테스트 페이지를 가져 와서 업데이트하여 이미지가 제대로 작동하지 않을 때 훨씬 더 명확 해졌습니다. : 오래된 빈 이미지는 "항상 작품"예, 물론 당신이보고있는 간략한 설명으로 포함되어 memso.com/Test/BlankImage.html 유효한 빈 데이터 지프가 유일한 재사용 것을 깨닫게이 나를 인도 이전 빈 GIF 이미지 이외의 최신 브라우저 옵션 (이전 IE7 이하에서는 여전히 필요함)
Mark Ormston

12

주석으로 작성된 바와 같이,이 방법은 잘못되었습니다.

이전에는이 ​​답변을 찾지 못했지만 W3 사양에 따르면 유효한 빈 src태그는 앵커 링크 #입니다.

예 : src="#",src="#empty"

페이지가 성공적으로 확인되고 추가 요청이 없습니다.


1
이 접근법에 반대하는 주장이 있습니까? 브라우저는 어떻습니까?
tremby

18
이 접근법을 사용할 때 Firefox와 Chrome이 두 번째 요청을하는 것을 보았으므로 권장하지 않습니다.
Marius

5
Firefox, Chrome은 JMeter조차도 img src를 파싱하여 재귀적인 페이지로드를 발생시킵니다 (최대 깊이에 도달 할 때까지)
burna

1
FF에서는 URL이 신비하게 변경되기 때문에 페이지를 리프 링하려면 브라우저 뒤로 버튼을 두 번 눌러야합니다.
Kalaschni

3
이것은 명백한 잘못입니다. 의견을 읽는 사람-이걸 사용하지 마십시오
Shadow Wizard is Ear For You

11

src를 빈 문자열로 설정하고 CSS에 규칙을 추가하여 깨진 이미지 아이콘을 숨기는 것은 잘 작동한다는 것을 알았습니다.

[src=''] {
    visibility: hidden;
}

[ng-src = ''] {가시성 : 숨김; } angularjs에서 ng-src 지시문을 사용하는 경우
Ivan Paredes

1
src는로 설정 ''해야하며 정의되지 않아야합니다.
Vincent Hoch-Drei

내가 실수하지 않아도 요청은 여전히 ​​수행됩니다
Nico

9

src 속성을 유지하면 빈 브라우저는 현재 페이지 URL로 요청을 보냅니다 .URL을 원하지 않으면 항상 src 속성에 1 * 1 투명 img를 추가하십시오

src="data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA="

1
일부 브라우저에서는 검은 점으로 표시됩니다.
tomasz86


1
이 src data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==는 작동했습니다
Max Yari

9

나는 다음을 사용하여 그것을 발견했다.

<img src="file://null">

요청하지 않고 올바르게 확인합니다.

브라우저는 단순히 로컬 파일 시스템에 대한 액세스를 차단합니다.

그러나 Chrome의 콘솔 로그에 다음과 같은 오류가 표시 될 수 있습니다.

Not allowed to load local resource: file://null/

2
downvote를 설명 할까? 토론을위한 사례를 제공하는이 방법을 사용하지 않는 것이 좋습니다. 그리고 올바르게 확인하고 추가 요청을하지 않기 위해서는 질문의 요구 사항을 충족시킵니다.
tenkod

8

기사를 기반으로 진정으로 빈 유효하고 호환성이 높은 SVG를 사용 하십시오 .

src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E"

SVG와 마찬가지로 크기는 300x150px로 기본 설정되지만 img실제 구현에서는 어쨌든 필요할 수 있으므로 요소 기본 스타일로 작업 할 수 있습니다.


답변을 업데이트 해 주셔서 감사하지만 IE9까지 호환되지 않는 svg를 사용한다는 점에서 다른 data-uri 솔루션보다 호환성이 훨씬 나쁘다고 생각합니다. 다행스럽게도 레거시 IE를 지원해야한지 오래되었지만 여전히 일부 사람들과 관련이 있습니다.
funkylaundry 2016 년

그러나 이것이이 기사에서와 같은 문제를 겪지 않습니까? dev.mobify.com/blog/data-uris-are-slow-on-mobile . CSS가있는 <img src = "about : blank"> 옵션 img [src = "about : blank"] {opacity : 0} 솔루션이 가장 좋습니다. 또는 이전 브라우저에서 해당 수준의 CSS 선택기가 지원되지 않는 경우 img 태그에 "load-in"또는 이와 유사한 클래스를 제공하십시오. 더 좋은 방법은 클래스를 제공하고 JavaScript를 사용하여 data-src를 바꾼 다음로드 함수를 이미지에 설정하여로드시 페이드 인되도록하는 것입니다. 로딩 중에 스피너가 표시되도록 설정할 수도 있습니다. 정말 전문적으로 보입니다.
Jordan Carter

@JordanCarter 물론, 자세한 성능이 문제가된다면. 참고로, 나는 당신이 제안하는 속성 선택기 visibility: hidden보다 약간 더 적합 하다고 말합니다 opacity: 0.
mystrdat

6

Ben Blank의 대답을 바탕으로 w3 유효성 검사기에서 유효성을 검사하는 유일한 방법은 다음과 같습니다.

<img src="/./.:0" alt="">`

유효성을 검사하지만 alt속성 이 비어 있어도 Firefox에서 이미지가 깨집니다 .
제임스 라이트

4

개인적으로 about:blank srcimg요소 의 불투명도를로 설정하여 깨진 이미지 아이콘을 처리합니다 0.


7
이제 더럽다!
mystrdat

@mystrdat : ​​왜 더러워 질까? "// : 0"을 사용하여 허용 된 답변으로 여전히 깨진 이미지 아이콘과 Firefox에서 끝없는 요청이 생겼습니다. 투표 수가 많은 단일 픽셀 base64 png 대안으로 높이와 너비를 지정하거나 지정하지 않고 <img>를 자리 표시 자로 사용할 때 문제가 발생했습니다. 이것은 불필요한 요청없이 모든 목표와 검증을 통과하지 않고 목표를 달성하기 위해 찾은 가장 깨끗한 방법입니다.
Miguel

위의 모든 솔루션은 포함 된 것 중 매우 어리석은 일입니다. 시간이 더 걸리면 새로운 답장을 보내 드리겠습니다.
mystrdat

@ mystrdat : ​​나는 당신이 이것에 대해 무엇을 말해야하는지 여전히 기뻐할 것입니까?
funkylaundry

1
@ funkylaundry 나는 큰 주장을하고 사라진 것에 대해 사과하며 지금 답변을 게시했습니다. 또한 이전에 다른 Data URI 솔루션을 눈치 채지 못했음을 인정하지만 어쨌든 내 구문이 구문에서 우수하다고 생각합니다.
mystrdat

4
<img src="invis.gif" />

여기서 invis.gif는 단일 픽셀 투명 gif입니다. 이것은 향후 브라우저 버전에서 중단되지 않으며 90 년대 이후 레거시 브라우저에서 작동했습니다.

png도 작동해야하지만 테스트에서 gif는 43 바이트이고 png는 167 바이트이므로 gif는 이겼습니다.

ps는 alt 태그를 잊지 말고 유효성 검사기를 좋아합니다.


-1

간단히 말하면 다음과 같습니다.

<img id="give_me_src"/>

4
사양 에 따르면 좋은 생각이 아닙니다 : src 속성이 존재하고 유효한 URL을 포함해야합니다 ...
Michael Litvin

1
아마 잘 크롬에서 작동하지만 HTML 유효성 검사 오류를 던져 그리고 ... W3 유효한 HTML 아니다
EhsanT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.