모든 반응 형 웹 사이트 개발 자습서에서는 display:noneCSS 속성을 사용하여 콘텐츠를 모바일 브라우저에서로드하지 못하도록 숨겨 웹 사이트를 더 빠르게로드 할 것을 권장 합니다. 사실인가요? 않는 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는 비활성화되어 있기 때문에 여전히로드되지 않습니다.
<div hidden style="display:none;width:0;height:0;visibility:hidden;background:url('test.jpg')"></div>. 결과 : Firefox 29 및 Opera 12가로드되지 않습니다. IE 11 및 Chrome 34가로드되었습니다.
background-image에 none당신이 부하 이미지를 원하지 않는 경우에. JS를 사용하지 않는이 사용 사례에 대한 더 나은 대안을 찾지 못했습니다.
display: none;있습니다. 그 폭 아래 창 테스트 네트워크 : 크롬 35, IE11 및 Edge는 이미지를로드하지 않았다
대답은 단순한 예 또는 아니오만큼 쉽지 않습니다. 최근에 수행 한 테스트 결과를 확인하십시오.
그래서 더 파고 난 후에 이것을 발견 했습니다 . 이것은 각 브라우저가 CSS 표시에 따라 img 자산로드를 처리하는 방법을 설명합니다 : none;
블로그 게시물에서 발췌 :
- Chrome 및 Safari (WebKit) :
WebKit은 일치하지 않는 미디어 쿼리를 통해 배경이 적용되는 경우를 제외하고 매번 파일을 다운로드합니다.- Firefox :
스타일이 숨겨져 있으면 Firefox는 배경 이미지와 함께 호출 된 이미지를 다운로드하지 않지만 여전히 img 태그에서 자산을 다운로드합니다.- Opera :
Firefox와 마찬가지로 Opera는 쓸모없는 배경 이미지를로드하지 않습니다.- Internet Explorer :
WebKit과 같은 IE는 배경 이미지가 표시되어 있어도 배경 이미지를 다운로드합니다. none; IE6의 경우 이상한 점이 나타납니다. 배경 이미지 및 표시가있는 요소 : 설정된 인라인이 다운로드되지 않습니다 ... 그러나 해당 스타일이 인라인으로 적용되지 않으면 나타납니다.

<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. 다른 모든 브라우저는 즉시 다운로드합니다.
div가 설정된 경우 div 요소의 배경 이미지 는 'display : none'으로 로드 됩니다.
어쨌든 동일한 div에 부모가 있고 해당 부모가 'display : none'으로 설정된 경우 자식 요소의 배경 이미지는 로드되지 않습니다 . :)
부트 스트랩 사용 예 :
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<div class="col-xs-12 visible-lg">
<div style="background-image: url('http://via.placeholder.com/300x300'); background-repeat:no-repeat; height: 300px;">lg</div>
</div>
<div class="col-xs-12 visible-md">
<div style="background-image: url('http://via.placeholder.com/200x200'); background-repeat:no-repeat; height: 200px;">md</div>
</div>
<div class="col-xs-12 visible-sm">
<div style="background-image: url('http://via.placeholder.com/100x100'); background-repeat:no-repeat; height: 100px">sm</div>
</div>
<div class="col-xs-12 visible-xs">
<div style="background-image: url('http://via.placeholder.com/50x50'); background-repeat:no-repeat; height: 50px">xs</div>
</div>
그렇다면 모바일 브라우저에 불필요한 컨텐츠를로드하지 않는 방법이 있습니까?
사용하다 <img src="" srcset="">
http://www.webdesignerdepot.com/2015/08/the-state-of-responsive-images/
CSS에서 이미지를 div의 배경 이미지로 만들면 해당 div가 'display : none'으로 설정되면 이미지가로드되지 않습니다.
브렌트 솔루션을 확장하기 만하면됩니다.
순수한 CSS 솔루션을 위해 다음을 수행 할 수 있습니다 .img 상자는 실제로 반응 형 디자인 설정 (투명한 png의 용도)에서 img 상자처럼 작동하게합니다. 이미지 크기 조정.
<img style="display: none; height: auto; width:100%; background-image:
url('img/1078x501_1.jpg'); background-size: cover;" class="center-block
visible-lg-block" src="img/400x186_trans.png" alt="pic 1 mofo">
visible-lg-block에 연결된 미디어 쿼리가 트리거되고 display : none이 display : block으로 변경 될 때만 이미지가로드됩니다. 투명한 png는 브라우저가 유동적 인 디자인 (높이 : 자동; 너비 : 100 %)에서 <img> 블록 (및 배경 이미지)에 적절한 높이 : 너비 비율을 설정하는 데 사용됩니다.
1078/501 = ~2.15 (large screen)
400/186 = ~2.15 (small screen)
따라서 3 가지 뷰포트에 대해 다음과 같은 결과가 나타납니다.
<img style="display: none; height: auto; width:100%; background-image: url('img/1078x501_1.jpg'); background-size: cover;" class="center-block visible-lg-block" src="img/400x186_trans.png" alt="pic 1">
<img style="display: none; height: auto; width:100%; background-image: url('img/517x240_1.jpg'); background-size: cover;" class="center-block visible-md-block" src="img/400x186_trans.png" alt="pic 1">
<img style="display: none; height: auto; width:100%; background-image: url('img/400x186_1.jpg'); background-size: cover;" class="center-block visible-sm-block" src="img/400x186_trans.png" alt="pic 1">
초기로드 중에 기본 미디어 뷰포트 크기 이미지 만로드 된 다음 뷰포트에 따라 이미지가 동적으로로드됩니다.
그리고 자바 스크립트가 없습니다!
안녕하세요, 같은 문제로 어려움을 겪고있는 사람들, 이미지를 모바일에로드하지 않는 방법.
그러나 좋은 해결책을 찾았습니다. 먼저 img 태그를 만든 다음 src 속성에 빈 svg를로드하십시오. 이제 url ( 'link to your image'); 컨텐츠를 사용하여 URL을 이미지의 인라인 스타일로 설정할 수 있습니다. 이제 img 태그를 원하는 래퍼로 포장하십시오.
<div class="test">
<img src="data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22/%3E" style="content:url('https://blog.prepscholar.com/hubfs/body_testinprogress.gif?t=1495225010554')">
</div>
@media only screen and (max-width: 800px) {
.test{
display: none;
}
}
이미지를로드하지 않으려는 중단 점에 랩퍼가 표시되지 않도록 설정하십시오. 래퍼에 래핑 된 요소의 스타일이 표시되지 않으므로 img 태그의 인라인 CSS는 이제 무시되므로 래퍼에 표시 블록이있는 중단 점에 도달 할 때까지 이미지가로드되지 않습니다.
모바일 중단 점에 img를로드하지 않는 정말 쉬운 방법입니다. :)
실제 코드 예를 보려면이 코드 펜을 확인하십시오. http://codepen.io/fennefoss/pen/jmXjvo
content-property를 사용 하여 표시된 이미지를 변경합니다. 호환성에 대한 통계를 줄 수 있습니까?
또 다른 가능성은 <noscript>태그를 사용 하고 이미지를 <noscript>태그 안에 배치하는 것 입니다. 그런 다음 noscript이미지가 필요할 때 자바 스크립트를 사용하여 태그 를 제거하십시오 . 이러한 방식으로 점진적 향상을 사용하여 필요에 따라 이미지를로드 할 수 있습니다.
내가 작성한 polyfill을 사용 <noscript>하여 IE8 의 태그 내용을 읽습니다.
@media query CSS를 사용하십시오. 기본적으로 우리는 측면에 데스크탑에 거대한 나무 이미지가 있지만 테이블 / 모바일 화면에는 표시되지 않는 프로젝트를 출시했습니다. 따라서 이미지가 아주 쉽게로드되지 않도록하십시오.
다음은 작은 스 니펫입니다.
.tree {
background: none top left no-repeat;
}
@media only screen and (min-width: 1200px) {
.tree {
background: url(enormous-tree.png) top left no-repeat;
}
}
동일한 CSS를 사용하여 표시 / 가시성 / 불투명도로 표시하고 숨길 수 있지만 이미지가 여전히로드 중입니다. 이것은 우리가 생각해 낸 가장 안전한 코드입니다.
우리는 모바일에 이미지가로드되지 않는 것에 대해 이야기하고 있습니다. @media (최소 너비 : 400px) {background-image : thing.jpg}를 수행 한 경우 어떻게해야합니까?
그런 다음 특정 화면 너비 이상에서 이미지 만 찾지 않습니까?
이미지와 함께 display : none을 사용하는 방법은 이미지에 ID를 할당하는 것입니다. 이것은 작동시키는 데 필요한 코드가 많지 않았습니다. 다음은 미디어 쿼리와 3 개의 스타일 시트를 사용하는 예입니다. 하나는 전화, 하나는 태블릿, 하나는 데스크탑입니다. 3 개의 이미지, 휴대 전화 이미지, 태블릿 및 데스크톱이 있습니다. 전화기 화면에는 전화기 이미지 만 표시되고 태블릿에는 타블렛 이미지 만 표시되고 데스크탑은 데스크탑 컴퓨터 이미지에 표시됩니다. 작동시키는 코드 예제는 다음과 같습니다.
소스 코드:
<div id="content">
<img id="phone" src="images/phone.png" />
<img id="tablet" src="images/tablet.png" />
<img id="desktop" src="images/desktop.png" />
</div>
미디어 쿼리가 필요없는 전화 CSS. 작동하는 img # phone입니다.
img#phone {
display: block;
margin: 6em auto 0 auto;
width: 70%;
}
img#tablet {display: none;}
img#desktop {display: none;}
태블릿 CSS :
@media only screen and (min-width: 641px) {
img#phone {display: none;}
img#tablet {
display: block;
margin: 6em auto 0 auto;
width: 70%;
}
}
그리고 데스크톱 CSS :
@media only screen and (min-width: 1141px) {
img#tablet {display: none;}
img#desktop {
display: block;
margin: 6em auto 0 auto;
width: 80%;
}
}
행운을 빌어 요 그리고 그것이 당신을 위해 어떻게 작동하는지 알려주세요.
display: none이미지 를 설정하는 방법이 아닙니다 . 그것은이다 : 합니까 "디스플레이 : 없음"로드에서 이미지를 방지하지?