原理 :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網絡