背景圖片閃現空白問題

前言

那每天氣不錯,心情並很差,由於感冒了。
實現前端一個彈出框功能時,發現有背景圖片的彈出框,會出現閃白現象。由於心情不太好,我一直忍着。
直到今天, 研究一下解決方案,因而有了今天的文章。css

這是一個很基礎的問題,也很常見的問題。 正常狀況下咱們都會忽視他。html

總結

我===內容 & 你 === 背景圖片前端

  1. 我顯示的時候,你已經在git

  2. 若不能,我顯示的時候,你儘快在github

  3. 你儘量的小web

方案

能夠到背景圖片閃現空白解決方案 看到各類方案演示。瀏覽器

方案1 base64

若是背景圖片相對小,或者你執意要這嘛作,圖片轉爲bas464,存到css或者html裏面。
演示: 背景圖片閃現空白方案-base背景圖片app

不足: base64佔帶寬啊!ide

方案2 prefetch

<link rel="prefetch" ></link>
<link rel="prefetch" href="./img/bg-huoluo.jpg"/>   


    .bg {
        background-image:url("./img/bg-huoluo.jpg");
        background-size: contain;
    }

prefetch是對瀏覽器的暗示,暗示未來可能須要某些資源,但由瀏覽器決定是否加載以及何時加載這些資源。 優先級低。
pre家族:preload, prefetch, dns-prefetch, preconnect, prerender。
有人可能會問,幹嗎不用preload。 呵呵, 你說呢?
演示: 背景圖片閃現空白方案-preferchfetch

方案3: 建立隱藏Img節點

<img src="./img/bg-huoluo.jpg" alt="" title="" style="display: none"/>

    .bg {
        background-color: #2D2C27;
        background-image: url(./img/bg-huoluo.jpg);
        background-size: contain;
    }

這方案好理解,圖片已經請求下載啦。 其實不能解決首屏背景圖片的問題。
演示:背景圖片閃現空白方案-建立隱藏Img節點

方案4 等待圖片加載完畢再顯示彈框

let dg = null;
        function createDialog() {

            onImageLoad('./img/bg-huoluo.jpg').then(src => {
                if (!dg) {
                    dg = document.createElement('div');
                    dg.className = "bg";
                    dg.style.backgroundImage = `url(${src})`;
                    dg.id = "dialog";
                    dg.innerHTML = `
                <div class="content">我愛赫蘿!!!!</div>
            `
                    document.body.appendChild(dg);
                }
            })


        }

        function onImageLoad(src) {
            return new Promise((resolve, reject) => {
                let img = new Image();
                img.src = src;
                img.onload = function () {
                    resolve(src)
                }
                img.onerror = reject
            })

        }

固然這是有明顯問題的,你不能由於一個背景圖片而讓內容沒法正常展示。
固然你能夠有修正方案。
演示: 背景圖片閃現空白方案-等待圖片加載完畢再顯示彈框

方案5 同時設置背景顏色和圖片

.bg {
            background-color:#433F34;
            background-size: contain;
        }

        .bg-new{
            background-image: url(./img/bg-huoluo.jpg)
        }

這樣,背景圖片加載上的時候,不會有明顯的閃白效果。 固然要是背景圖片,五光十色,估計有點爲難客官啦。

演示: 背景圖片閃現空白方案-同時設置背景顏色和圖片

其餘呢

再回頭看看總結:
我===內容 & 你 === 背景圖片

  1. 我顯示的時候,你已經在

  2. 若不能,我顯示的時候,你儘快在

  3. 你儘量的小

那麼:有下面的一些額外的話:

  • webp格式,減小圖片大小
  • css spirte, 減小http開銷
  • jpg格式圖片壓縮
  • 圖片cdn
  • 多域名
  • 背景圖片切割,能repeat就repeat

最後

jpg有漸進式, png有交錯模式。
咱們一塊兒來看看效果。
演示: png正常,png交錯,jpg漸進

相關文章
相關標籤/搜索