原理 :css
HTML5 的离线缓存储存是基于一个.appcache 文件的缓存机制(不是储存技术),经过这个文件上的解析清单离线储存资源,这些资源就会像 cookie同样被储存下来.这样当网络处于离线状态下的时候,浏览器会经过被离线储存下来的数据展示页面.
更新缓存html
一旦应用被缓存,他会保持缓存直到发生下列状况
1 用户清空浏览器缓存
2 manifest 文件被修改
3 由程序来更改缓存
如何使用html5
页面头部像下面同样加入一个manifest的属性git
<!DOCTYPE HTML> <html manifest = "cache.manifest"> ... </html>
在cache.manifest 文件编写离线储存的资源github
CACHE MANIFEST #v0.1 CACHE: js/index.js css/index.css NETWORK: images/logo.png FALLBACK: *.html /404.html /* / /404.html 或 /html/ /404.html 也可*/
以 # 开头的是注释, 通常会在第二行写个版本号,用来在缓存的文件更新的时候,更新 mainfest 以实现浏览器从新下载新的文件,能够是版本号,时间戳, md5 码等等
离线存储的manifest通常由三个部分组成:面试
首先说明, 确实是如今用浮动的不多了.基本上 flex 和基本的定位布局都能知足需求了;
浮动带来的问题是盒子塌陷问题.清除浮动就是为了解决这个问题的
什么是盒子塌陷
外部盒子本应该包住内部的浮动盒子,结果却没有
出现问题的缘由
父元素只包含浮动元素,那么他的高度就会塌陷为 0;前提是没有设置高度,或者设置为 auto 就会出现这种状况.若是父元素不包含任何可见元素,这个问题就很难被注意到.由于子元素设置了float属性,而float属性会把元素从标准文档流中抽离,直接结果就是外部盒子丢了两个孩子,由于内部没有其它盒子了,因此外部盒子只包裹文本节点内容,却把两个内部盒子扔在外面了.
解决办法浏览器
可读性差,不易于维护(别人很难理解为何要给父元素也添上float),并且可能须要调整整个页面布局。
引入多余元素
有可能形成溢出元素不可见,影响展现效果
用after伪元素清除浮动
给外部元素的 after 伪元素设置 clear 属性,而后再隐藏;此方法原理跟2 的在外部盒子最下方添加带上 clear 的盒子同样.只是这样是一种纯 css 的方法,避免了多余元素缓存
.clearfix::after{ content:''; display:block; height:0; line-height:0; clear:both; }
这里若是只是简单的方法其实有现成的 就是字符串的charCodeAt和charAt(). 而后还可使用encodeURIComponent()和decodeURIComponent.
先贴一个答案吧 这个答案有些地方我还没搞懂, 先贴出来你们看看,若是有人知道为啥的话但愿能够给我讲解讲解里面的+padding 是有什么用 是用来干吗的 感谢cookie
// 利用 base64, 浏览器环境自带 btoa / atob 方法 // Node.js 须要引入相关库 const str = "abcdefg"; console.log(btoa(str)); console.log(atob(btoa(str))); // 凯撒密码 const encodeCaesar = ({str = "", padding = 3}) => !str ? str : str .split("") .map((s) => String.fromCharCode(s.charCodeAt() + padding)) .join(""); const decodeCaesar = ({str = "", padding = 3}) => !str ? str : str .split("") .map((s) => String.fromCharCode(s.charCodeAt() - padding)) .join(""); console.log(encodeCaesar({str: "hello world"})); console.log(decodeCaesar({str: "khoor#zruog"}));
面试题摘自 Github网络