[css] “display : none”으로 이미지가로드되지 않습니까?
모든 반응 형 웹 사이트 개발 자습서에서는 display:none
CSS 속성을 사용하여 콘텐츠를 모바일 브라우저에서로드하지 못하도록 숨겨 웹 사이트를 더 빠르게로드 할 것을 권장 합니다. 사실인가요? 않는 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의 경우 이상한 점이 나타납니다. 배경 이미지 및 표시가있는 요소 : 설정된 인라인이 다운로드되지 않습니다 … 그러나 해당 스타일이 인라인으로 적용되지 않으면 나타납니다.
답변
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
요소는 유사한 보이는 다소 다르다video
및audio
요소. 모든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으로 설정되어 있어도 모든 이미지를 렌더링합니다.
이를 증명할 테스트 페이지는 다음과 같습니다.
답변
** 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
. 다른 모든 브라우저는 즉시 다운로드합니다.