Go to comments

HTML+CSS宝典 CSS进阶[扩展] 数据链接

一、如何写数据连接

数据连接也叫 data url,语法: data:MIME,数据 


数据连接,

将目标文件的数据,直接书写到路径位置,意思是应该是直接把图片数据写到src里

<img src='data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAADUAAAAdCAYAAAAKGSQrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD
cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFDMjY2RUYzOUM0MzExRUNBQkQ4QzJFOUM2NjZBN0FDIiB4bXBNTTpE
b2N1bWVudElEPSJ4bXAuZGlkOjFDMjY2RUY0OUM0MzExRUNBQkQ4QzJFOUM2NjZBN0FDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUMyNjZFRjE5QzQzMTFF
Q0FCRDhDMkU5QzY2NkE3QUMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUMyNjZFRjI5QzQzMTFFQ0FCRDhDMkU5QzY2NkE3QUMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94
OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6yoDu7AAAIt0lEQVR42tRYCVRU5xW+b5k3G+swMAxgFAQUN1RkE3ABtyhKLO1RUBMxRntsPC01jUht4/HE1KrUY1XSplg1sfG4RUTjUlGjI2rAyjKhETFjAFmHRRFm3ryZN9P7wFgmgoALPb1z3jnvzX////3ff+/97r2PgBeQ1PjRKolIut5msy3gLCZ3IMAmFcnuWXjzPo7n/rz9lPYh/A+EeAFAU0UUc3L8oHBx9NBY2tPJC3ibFSqbdXBN9xX377oSE4Jb
mHGy+PT/BSgEFMJQjGZp5C+kw1WjutX5Tl8Ge67vZM28eem2nMJDAwmKeg5ADLpc3vzgZGWwzwQAhQwgxhcgCi+pCOB+p8cp5EpAwHRB5bU5Yf5uB2/caWgZKFBkvycQ5CJ0NfewIdEAPs4A8SMAvJyFAQCrzU7X2+U1mBmUIHEQO/5lIC1F93cCEsH704bHSztARPt2ghGkrhXgX1VP6U/yjyMu3jkdjRYOQOIo78by49Dy71AEFWuxWjwIgjDTJF3aZnq0B4cP4RzLKwWFG1Agq/kN8xgJIELPlYg6B75Hz9Lo
AJniaf8maQgbHM0geazAx990WcsLD2gfRnVM5JDJzDDVSNJN7g5GswEqmnUe1+9djmhq129CvXgE9s1zg8IFxhAEOV0slfmYjIYWm81agn9rcNGmxyqj1M7eLEVSDJjwAAurAXcBcEf/zJcgQ1IFFXmJP4DC94SLafG5CN9JDrNGJFDIok+57US/KdIb964Mzi4++DXqR+EeivrFfjhJLXVwOoLxEjImajqtUHnRbQ9bbJVlWkNluZZhxNIzxvZHacL+xvqEZb0ZvlLSn5Oz4S8texVn5jkXfBwtpiUXF4Uul4/y
Gtfr3MKqfDhS+KmeNRv9EVhrnyyFgDzFUnlh5MxE5euL36UoWtQVsBzBwdVTB+d+dXzfTJ7ncwkC+C6s8RQ5dH9yBLjJlWxda00UQ4uPLQ5bIR+pDu7TgYwbFAaltUUumPfS8TGtT2Qmd3LJikBA8UtTuwJ6Ig7OrjBr0SpibWa2GC04HQO400p+bgBLQgDmIPuJeidRJ4mLDd328LRhsx36CugHmTkiQYShsAoN0Ke8SrKGthkzF/6813zl6uEFKenbmSZDY+cfQR5oAnyHuxyp3aUvqYBWO/tI4obN6XcacXdQ
CYciABrTR6IgbCbWABK5Q6/KqkF+0M61EQJDSbn/eiG0mnqdG+k3Wa528sFzeL7KzNPJm9S31fvhbXGvFcWUsX5OpV9fChkcOJp2UrgD294GeWcOgXAvlTvaxwZuSFeYz0ktNO1pwoTL4JloawFqeo9flaMaZIz8uRPqt/VavuZh1TmsTErQDV0jA1Vj8ArFS4VXC/7/5GRpY1vrWivP12WuX/6+2WRSWHmLyNFVyYdMie/WJUdNmi4qyjnLBntPkHTkpgGSxrYGMx6qf/rCqFKONQYqPNQmmaOLDfcPTfXV4t8m
RZ83PHq4AhmymvhRnvJkJNK7q/+4X+7tN7zbxYVFNiyO5TbMzmCkjGxAAFmx+k/PeZeXKxTmOW/+UjI6Mg5EjPjJuOBduUezrMjSDxBwkJ01YscHbI6YkRgeGjevx2AWFruVezKP57jX/JQBxECAQjqHWnOD4b3dx2TeQ4MAadqeGBgGAsdGECbWyOir7/mSP4qZeaGxc3ssnaxWK5w5sAtYsyHoYtkZq8lieuWAhMR9/vYp09TkdxzoLtbpTmITUyishOLtQGEHy1vMZjvFijIt7F6X0nGP5oW7JQWw6L3N7q6e
3uSFsi9fOaiC7/PAIiNt4ybN6lXXbGIFDKQ9KKv179lZW1jMXR1Wyc/Nhsz0Zfyo8KmdDHRTIyRi8B8dCss3ZhJXdReh4VHtKwN0v6UCsrWHuCXpWyXdpYKmuvtQrbsNpfmXOzxo6+pEI4bHVjtXQzAf1Vd+F7g+OSaJJCmrQBpouoAJsfMeux/f4b+CuChVMHby67DvRia/Ju4DSqjGX6ZUNt+DT/K2G5PWbDKqBg1VdKdzeOcGW3lJPoE5VoeF+AUksSxkv3w7okCut2lKq45HBLjvRgA7tnxxc8vUcf4rR4RO
cnJ284CWhloo0pyDB/o6cEZQDxrrbWXF16ubDY2ykeqx1MsCpK25BXuv72KnJa/MwRIutCc9JDRCIK7KO99oNh3ULML9V/fY+QqtBl71wj1v5j76bNtaIwKAKfPfAqz/oLGuqsN/L5/4lDVw7clF9wtqrtzNtb0oGAtvhmNFByyfF2S1+AZPSIz96bK5vc0ZNn4ixpF1ZL++UeR9W1MQ7q8UaU7+I7KxttLmMzSIErz7aOaHLG+x7NiWfWtvqL8iW9dU/jb2WmIPR8/nAnRXfxs+1myDygcVNmxEF6T/9ZTQf4UJ
Yw+bGoDDUg67iafmFV89B7rSW5euaCsO9/trEibmIVjFJ2EDGYwViB7jT2i1r3YZD8O24vLKqFSJrzKgP5UCnNQettxtLqcXpG4EkVgCn/8pvXXjgcuOxGN2uPTFPjj92U7L5DeWUGFxCYSHj69gHSgrvAH7//BrFmvXCNxL8Qt/9+tO1swNni30S6unrJOonbyfqYt1HGCu40pqbgktyc3ohOSJc976FWEytsPGlBnw+73/fGKZ62ePQM6ejHMESdZhrM/HQ5UhdQMtYhrNHJuScaLo7Ev5mNmTrE0IWYbAdqfG
/k7iKnOzG2tlH0Dx/ZuAbbqhsV1vRUPs4iymDBwa7uquPpv+yZfy43/bDMi88JOV6zrmcBi721MXGuurdElojROPvULodUh8bn6pX2ifJWlvhKaRJPnB1IBZEmepCzQbmqC0pshQ11pNi0WSC+2mto9R7Sxu6kmmX58Ucx5LoJi5Kali9ZBAMGGuLCu8Bqf27zAiVZ82tj/6Ger3iYxeWe2GpxktFcmW0ZTIk7Ow5VhS5eLf53FjbE8fSdHdNuLt2+iCSpKiLNj6lCKgDzNyio/2593/EWAAV9+uTseIbTEAAAAA
SUVORK5CYII='/>


不仅仅是图片,凡是写 url 地址的地方都可以使用数据连接,css文件、js文件都可以使用这种方式,

我们不在使用一个文件作为数据的来源了,而是直接把数据写到路径位置


比如,不直接引用css文件,把css文件的内容直接写在连接位置

<link rel="stylesheet" href="data:text/css,h1{color:red}">

<h1>标题</h1>

data               关键字

text/css         css 的 MIME 类型

h1{color:red} 直接写的数据


二、数据类型的意义

优点一,减少了浏览器中的请求


什么是请求?

比如访问淘宝,请求是从我们从自己的电脑向淘宝服务器发出一个消息,让淘宝服务器把网页页面给我,这就是请求。


请求就是向互联网中去获取一些资源,相对于请求还有一个东西叫响应


响应是相对于服务器端的,

是把网页页面,给发出请求的我们就是响应,

当然不一定是网页,有可能是图片、css样式、js等等这些都是响应


分析一下淘宝网的请求,在调试工具里面 Network 表示网络传输,每一次请求这里都会记录下来,All 表示所有的请求

image.png

点击 www.taobao.com 淘宝网的请求,

可以看到服务器的相应 Headers

服务器给我们响应结果点击 Response,相应结果是html代码(浏览器会开始渲染代码)


为什么左侧边栏 www.taobao.com 后面会多出那么多请求?

网页的 html 代码里有一些 href(url地址),表示浏览器还要发生一些请求,来获取这些东西(url地址)


比如,页面上的图片 img 标签,标签里有 src 属性连接到了一张图片

image.png

图片数据在 g.ailcdn.com/s.git 上,代码里没有 s.gif 图片的数据,网页上要显示 s.gif 图片,就必须把图片的数据拿到(图片的内容拿到)


怎么拿 s.gif 的内容呢?

要重新发送一个请求,去请求图片数据,然后把图片渲染出来

image.png

不仅是图片,css文件、js文件这些都是外部资源,要拿到这些文件内容,就必须要重新发送请求


所以,虽然我们访问了一网站的时候只访问了首页,

但是网站首页里面的图片、css文件、js文件、字体文件等,这些都要发送请求,把数据拿到


所以,这个地方不会发生请求,因为这里写的是数据,直接把数据写到这了

<link rel="stylesheet" href="data:text/css,h1{color:red}">

这样减少了请求中的浪费的时间,

意思是服务器 和 客户端之间会出现一些验证,虽然这些时间感受不到,如果发生太多请求,会降低页面的相应速度。


优点2,有利于动态生成数据

如果数据要发生变化, 我们可以用数据连接的方式,

用 java、PHP 把数据生成到 src 这里,有利于数据的动态生成


缺点1

增加了资源的体积(HTML页面是资源、css是资源、图片也是资源),

导致传输内容的增加,从而增加了单个资源的传输时间


缺点2

不利于浏览器的缓冲,

浏览器通常会缓冲图片文件、css文件、js文件


缺点3

base64 编码会增加原资源的体积到原来的 4/3,

意思就是说如果图片文件体积是 3kb,使用 base64 编码数据后会变成 4kb,会增加体积


三、应用场景

1. 当请求单个图片体积较小,并且该图片因为各种原因,不适合制作雪碧图(雪碧图也能有效的降低请求数量的作用),可以使用数据连接

2. 图片由其它代码动态生成(java,js,PHP),并且图片较小,可以使用数据连接


数据连接不仅可以用在src里面,也可以用再css里面

比如  background: url("data:imge/png,base64,数据") 

就是凡是可以写url的地方,都可以使用数据连接


四、base64是什么

css 这里面没有使用 base64,直接书写数据

<link rel="stylesheet" href="data:text/css,h1{color:red}">

<h1>标题</h1>


但是图片这里使用了 base64

 src='data:img/jpg;base64, 


base64 是一种编码方式,

这里的编码和字符集的编码还不太一样,


编码的整体意思是,是把数据从一种形态,转换成另一种形态

简单的说数字 3 进行二进制编码就变成了 11


base64 通常用于将一些二进制数据(图片就是二进制数据),用一个书写的字符串表示


 <img src='data:img/jpg;base64,iVBORw0KGgoAA 

如果不写 base64,后面的数据没法写,base64 就告诉按照 base64 的格式解析成图片


除了图片其它数据也可以变成 base64 格式,

百度搜索 base64(不叫加密,应该叫编码和解码)

https://tool.oschina.net/encrypt?type=3


比如把  h1{color: red}  编码

<link rel="stylesheet" href="data:text/css;base64,aDF7Y29sb3I6cmVkfQ==">

<h1>标题</h1>



Leave a comment 0 Comments.

Leave a Reply

换一张