代码之家  ›  专栏  ›  技术社区  ›  Basj

如何使用CSS防止加载<img src=“url”>?

  •  1
  • Basj  · 技术社区  · 6 年前

    假设我有这样一个图像:

    <img src="https://via.placeholder.com/150" class="abcd" />

    如何在仅使用CSS的情况下使url https://via.placeholder.com/150 从来没装过吗?

    我试过:

    1. .abcd { display: none; } :获取图像的操作仍然完成(您可以通过浏览器的 Developer Tools > Network )

    2. .abcd { visibility: hidden; } :同上

    3. <img> 在一个 <div> 它本身就在 display: none; :idem,图像的GET请求仍然完成

    4. 我试过这个方法 Is it possible to set the equivalent of a src attribute of an img tag in CSS? :

      .abcd { content:url("https://via.placeholder.com/200"); }
      

      但两者都有 https://via.placeholder.com/150 https://via.placeholder.com/200 都装了子弹。

    5. .abcd { content: none; } 也不管用


    应用:我正在尝试为电子邮件创建1px跟踪系统,我想通过注入自定义CSS(带触控笔chrome扩展,uBlockOrigin)来防止跟踪我自己的视图

    注:当然,我已经读过了 Does "display:none" prevent an image from loading? 但它并没有给出这个相关问题的确切解决方案。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Temani Afif    6 年前

    应用:我正在尝试为电子邮件创建1px跟踪系统,我想通过注入自定义CSS(带触控笔chrome扩展,uBlockOrigin)来防止跟踪我自己的视图

    为什么不做相反的事情,默认情况下不加载图像,然后在需要时加载它。

    下面是一个使用CSS变量的想法

    img {
      content:var(--img);
    }
    
    /* The CSS to disable the loading
    img {
      --img:initial!important;
    }
    */
    <img style="--img:url('https://via.placeholder.com/150')" class="abcd" />

    另一个没有CSS变量的想法是默认情况下加载图像。确保尽早加载CSS以避免加载。

    /*to disable the loading. Make sure it's considered before the inline style
    img {
      content: none!important;
    }
    */
    <img style="content:url('https://via.placeholder.com/150')" class="abcd" />
        2
  •  0
  •   Basj    6 年前

    蒂姆·卡德莱克已经在一个月前做了很多测试 this page .

    简言之,具有 <img> :

    <div id="test1"><img src="images/test1.png" alt="" /></div>
    

    将始终加载,即使是:

    #test1 { display:none; }
    

    相反,使用 div 具有 background-image 这样地:

    <div id="test1"><div style="background-image: url('https://via.placeholder.com/159');"></div></div>
    

    将允许在使用时不加载图像 #test1 { display:none; } .