[css] “display : none”으로 이미지가로드되지 않습니까?

모든 반응 형 웹 사이트 개발 자습서에서는 display:noneCSS 속성을 사용하여 콘텐츠를 모바일 브라우저에서로드하지 못하도록 숨겨 웹 사이트를 더 빠르게로드 할 것을 권장 합니다. 사실인가요? 않는 display:none이미지를로드하지 않거나 여전히 모바일 브라우저에서 내용을로드합니까? 모바일 브라우저에서 불필요한 컨텐츠를로드하지 못하게하는 방법이 있습니까?



답변

브라우저가 더 똑똑해지고 있습니다. 오늘날 브라우저가 버전에 따라 유용하지 않다고 판단되면 이미지 로딩을 건너 뛸 수 있습니다.

이미지에는 display:none스타일이 있지만 스크립트에서 크기를 읽을 수 있습니다. 부모가 숨겨져 있으면 Chrome v68.0에서 이미지를로드하지 않습니다.

거기에서 확인할 수 있습니다 : http://jsfiddle.net/tnk3j08s/

브라우저 개발자 도구의 “네트워크”탭을 확인하여 확인할 수도 있습니다.

브라우저가 소형 CPU 컴퓨터에있는 경우 이미지를 렌더링하거나 페이지를 레이아웃하지 않아도 전체 렌더링 작업이 더 빨라지지만 오늘날에는 이것이 의미가없는 것 같습니다.

이미지가로드되지 않게하려면 IMG 요소를 문서에 추가하지 않거나 IMG src속성을 "data:"또는로 설정하면 안됩니다 "about:blank".


답변

CSS에서 이미지를 div의 배경 이미지로 만들면 해당 div가 “display : none”으로 설정되면 이미지가로드되지 않습니다. CSS가 비활성화 되어도 CSS는 비활성화되어 있기 때문에 여전히로드되지 않습니다.


답변

대답은 단순한 예 또는 아니오만큼 쉽지 않습니다. 최근에 수행 한 테스트 결과를 확인하십시오.

  • Chrome에서 : 8 개의 스크린 샷 * 이미지가 모두로드 됨 (img 1)
  • Firefox : 현재 표시되고있는 1 개의 스크린 샷 * 이미지 만로드 됨 (img 2)

그래서 더 파고 난 후에 이것을 발견 했습니다 . 이것은 각 브라우저가 CSS 표시에 따라 img 자산로드를 처리하는 방법을 설명합니다 : none;

블로그 게시물에서 발췌 :

  • Chrome 및 Safari (WebKit) :
    WebKit은 일치하지 않는 미디어 쿼리를 통해 배경이 적용되는 경우를 제외하고 매번 파일을 다운로드합니다.
  • Firefox :
    스타일이 숨겨져 있으면 Firefox는 배경 이미지와 함께 호출 된 이미지를 다운로드하지 않지만 여전히 img 태그에서 자산을 다운로드합니다.
  • Opera :
    Firefox와 마찬가지로 Opera는 쓸모없는 배경 이미지를로드하지 않습니다.
  • Internet Explorer :
    WebKit과 같은 IE는 배경 이미지가 표시되어 있어도 배경 이미지를 다운로드합니다. none; IE6의 경우 이상한 점이 나타납니다. 배경 이미지 및 표시가있는 요소 : 설정된 인라인이 다운로드되지 않습니다 … 그러나 해당 스타일이 인라인으로 적용되지 않으면 나타납니다.

Chrome- 모든 8 스크린 샷-* 이미지로드

Firefox- 현재 표시된 1 개의 스크린 샷 * 이미지 만로드


답변

HTML5 <picture>태그는 화면 너비에 따라 올바른 이미지 소스를 해결하는 데 도움이됩니다.

분명히 브라우저 동작은 지난 5 년 동안 크게 변하지 않았으며 많은 display: none속성이 설정되어 있어도 숨겨진 이미지를 다운로드 할 것입니다.

미디어 쿼리 해결 방법 이 있지만 이미지가 CSS에서 배경으로 설정된 경우에만 유용 할 수 있습니다.

문제에 대한 JS 솔루션 ( 지연로드 , 그림 채우기 등) 이 있다고 생각하는 동안 HTML5와 함께 제공되는 멋진 순수한 HTML 솔루션이있는 것으로 나타났습니다.

그리고 이것이 <picture>태그입니다.

MDN이이를 설명 하는 방법은 다음과 같습니다 .

HTML의 <picture>요소는 복수 지정하기 위해 사용되는 컨테이너 <source>의 특정 요소 <img>안에 포함한다. 브라우저는 페이지의 현재 레이아웃 (이미지가 표시되는 상자의 제약 조건) 및 표시 될 장치 (예 : 일반 또는 hiDPI 장치)에 따라 가장 적합한 소스를 선택합니다.

사용 방법은 다음과 같습니다.

<picture>
 <source srcset="mdn-logo-wide.png" media="(min-width: 600px)">
 <img src="mdn-logo-narrow.png" alt="MDN">
</picture>

뒤에 논리

img미디어 규칙이 적용되지 않는 경우에만 브라우저가 태그 소스를로드합니다 . <picture>브라우저 에서 요소를 지원하지 않으면 img태그 를 다시 표시합니다 .

일반적으로 가장 작은 이미지를 소스로 사용하여 <img>더 큰 화면에 무거운 이미지를로드하지 않습니다. 반대로 미디어 규칙이 적용되는 경우 소스 <img>가 다운로드되지 않고 대신 해당 <source>태그 의 URL 내용을 다운로드합니다 .

여기서 함정은 브라우저에서 요소를 지원하지 않으면 작은 이미지 만로드한다는 것입니다. 한편 2017 년에는 모바일 우선 접근 방식 으로 사고하고 코딩해야합니다 .

그리고 누군가 너무 빠져 나오기 전에 다음에 대한 현재 브라우저 지원이 있습니다 <picture>.

데스크탑 브라우저

데스크탑 브라우저 지원

모바일 브라우저

모바일 브라우저 지원

더 많은 브라우저에 대해 당신이에서 찾을 수있는 지원 할 수 있습니까 사용 .

좋은 점은 html5please 의 문장이 폴 백과 함께 사용한다는 것입니다 . 저는 개인적으로 조언을 구하려고합니다.

태그에 대한 자세한 내용은 W3C 사양을 참조하십시오 . 거기에 면책 조항이 있습니다.

picture요소는 유사한 보이는 다소 다르다 videoaudio요소. 모든 source요소에 요소가 포함되어 있지만 src요소가 요소 내에 중첩되어 있고 picture자원 선택 알고리즘이 다른 경우 소스 요소의 속성은 의미가 없습니다 . 또한 picture요소 자체에는 아무것도 표시되지 않습니다. 포함 된 img요소에 대한 컨텍스트 만 제공하여 여러 URL 중에서 선택할 수 있습니다.

따라서 이미지에 컨텍스트를 제공하여 이미지를로드 할 때 성능을 향상시키는 데 도움이됩니다.

작은 장치에서 이미지를 숨기려면 CSS 매직을 계속 사용할 수 있습니다.

<style>
  picture { display: none; }

  @media (min-width: 600px) {
    picture {
      display: block;
    }
  }
</style>

<picture>
 <source srcset="the-real-image-source" media="(min-width: 600px)">
 <img src="a-1x1-pixel-image-that-will-be-hidden-in-the-css" alt="MDN">
</picture>

따라서 브라우저는 실제 이미지를 표시하지 않고1x1 픽셀 이미지 만 다운로드합니다 (이 이미지는 두 번 이상 사용하면 캐시 될 수 있음). 그러나 <picture>브라우저 에서 태그를 지원하지 않는 경우 데스크톱 화면에서도 실제 이미지 표시 되지 않으므로 폴리 필 백업이 반드시 필요합니다.


답변

예. 이미지를 렌더링 할 필요가없고 화면에서 정렬하는 요소가 적기 때문에 약간 더 빠르게 렌더링됩니다.

로드하지 않으려면 나중에 <img>태그를 포함하는 HTML을로드 할 수있는 DIV를 비워 두십시오 .

앞에서 언급했듯이 firebug 또는 wireshark를 사용해보십시오. 파일 display:none이 존재 하더라도 DO가 전송되는 것을 볼 수 있습니다 .

Opera는 디스플레이가 none으로 설정된 경우 이미지를로드하지 않는 유일한 브라우저입니다. Opera는 이제 웹킷으로 이동했으며 디스플레이가 none으로 설정되어 있어도 모든 이미지를 렌더링합니다.

이를 증명할 테스트 페이지는 다음과 같습니다.

http://www.quirksmode.org/css/displayimg.html


답변

** 2019 답변 **

정상적인 상황 display:none에서는 이미지를 다운로드 할 수 없습니다.

/*will be downloaded*/

#element1 {
    display: none;
    background-image: url('https://picsum.photos/id/237/100');
}

그러나 조상 요소가 있으면 display:none자손의 이미지가 다운로드되지 않습니다


/* Markup */

<div id="father">
    <div id="son"></div>
</div>


/* Styles */

#father {
    display: none;
}

/* #son will not be downloaded because the #father div has display:none; */

#son {
    background-image: url('https://picsum.photos/id/234/500');
}

이미지 다운로드를 방해하는 다른 상황 :

1- 대상 요소가 존재하지 않습니다

/* never will be downloaded because the target element doesn't exist */

#element-dont-exist {
    background-image: url('https://picsum.photos/id/240/400');
}

다른 이미지를로드하는 2 개의 동일한 클래스

/* The first image of #element2 will never be downloaded because the other #element2 class */

#element2 {
    background-image: url('https://picsum.photos/id/238/200');
}

/* The second image of #element2 will be downloaded */

#element2 {
    background-image: url('https://picsum.photos/id/239/300');
}

당신은 여기에서 자신을 볼 수 있습니다 : https://codepen.io/juanmamenendez15/pen/dLQPmX


답변

쿼크 모드 : 이미지 및 디스플레이 : 없음

이미지에가 display: none있는 요소 안에 또는이있는
display:none경우 브라우저는가 display
다른 값으로 설정 될 때까지 이미지를 다운로드하지 않도록 선택할 수 있습니다 .

만 오페라는 당신이 스위치 이미지 다운로드 display에를 block. 다른 모든 브라우저는 즉시 다운로드합니다.