모든 반응 형 웹 사이트 개발 자습서에서는 display:none
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는 비활성화되어 있기 때문에 여전히로드되지 않습니다.
<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
이미지 를 설정하는 방법이 아닙니다 . 그것은이다 : 합니까 "디스플레이 : 없음"로드에서 이미지를 방지하지?