zoukankan      html  css  js  c++  java
  • Data URI scheme

    相信有人会注意到这种情况,网页上面有些图片的src或者css背景图片的url后面跟了一大串字符,比如下面代码:

    <style type="text/css">
    .title {
    background-image:url(data:image/gif;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D);
    background-repeat:repeat-x;
    height:28px;
    line-height: 28px;
    text-align:center;
    }
    </style>

    这是为什么呢?这是Data URI scheme。
    Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件导入。
    比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到他了,一张1×36的淡蓝色png图片。

    在上面的Data URI中,data表示取得数据的协定名称,image/png是数据类型名称,base64是数据的编码方法,逗号后面就是这个image/png文件base64编码后的数据。
    目前,Data URI scheme支持的类型有:

    data:,                                   文本数据
    data:text/plain,                         文本数据
    data:text/html,                          HTML代码
    data:text/html;base64,                   base64编码的HTML代码
    data:text/css,                           CSS代码
    data:text/css;base64,                    base64编码的CSS代码
    data:text/javascript,                    javascript代码
    data:text/javascript;base64,             base64编码的javascript代码
    data:image/gif;base64,                   base64编码的gif图片数据
    data:image/png;base64,                   base64编码的png图片数据
    data:image/jpeg;base64,                  base64编码的jpeg图片数据
    data:image/x-icon;base64,                base64编码的icon图片数据

    base64简单地说,它把一些8-bit数据翻译成标准ASCII字符,网上有很多免费的base64编码和解码的工具,在php中可以使用base64_encode()进行编码,如:
    echo base64_encode(file_get_contents('lbm.png'));
    目前,IE8、Firefox、Chrome、Opera浏览器都支持这种小文件签入。
    举个图片的例子:
    网页中一张图片可以这样显示:
    <img src="lbm.png"/>
    也可以这样显示:

    <img src="data:image/gif;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D"/>

    我们把图像文件的内容直接写在了HTML 文件中,这样做的好处是,节省了一个HTTP 请求。坏处呢,就是浏览器不会缓存这种图像。大家可以根据实际情况进行自由取舍。

  • 相关阅读:
    对于在git上面拉代码报"error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054"解决方法
    在vue项目中如何添加eslint
    vscode编辑如何保存时自动校准eslint规范
    css3动画
    JS中的深拷贝与浅拷贝
    JS中的防抖与节流
    金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
    正则表达式元字符大整理
    常规正则表达式练习,一起来开心的掉发吧
    关于子元素的margin-top对父级容器无效
  • 原文地址:https://www.cnblogs.com/liubeimeng/p/4284377.html
Copyright © 2011-2022 走看看