5V升壓8.4V,鋰電池充電管理晶片
技術標籤:htmlcss屬性jscsscss3htmljavascript
面試題2
面試題2
html部分
第一題
問:
HTML全域性屬性(global attribute)有哪些(包含H5)?
答:
全域性屬性:用於任何HTML5元素的屬性
屬性 | 描述 |
---|---|
accesskey | 設定訪問元素的鍵盤快捷鍵。 |
class | 規定元素的類名(classname) |
contenteditable (h5) | 規定是否可編輯元素的內容。 |
contextmenu (h5) | 指定一個元素的上下文選單。當用戶右擊該元素,出現上下文選單 |
data-*(h5) | 用於儲存頁面的自定義資料 |
dir | 設定元素中內容的文字方向。 |
draggable (h5) | 指定某個元素是否可以拖動 |
dropzone (h5) | 指定是否將資料複製,移動,或連結,或刪除 |
hidden (h5) | hidden 屬性規定對元素進行隱藏。 |
id | 規定元素的唯一 id |
lang | 設定元素中內容的語言程式碼。 |
spellcheck (h5) | 檢測元素是否拼寫錯誤 |
style | 規定元素的行內樣式(inline style) |
tabindex | 設定元素的 Tab 鍵控制次序。 |
title | 規定元素的額外資訊(可在工具提示中顯示) |
translate (h5) | 指定是否一個元素的值在頁面載入時是否需要翻譯 |
第二題:
問:
HTML 5的檔案離線儲存怎麼使用,工作原理是什麼?
答:
HTML5 的離線儲存的使用:
什麼是HTML5 的離線儲存?
HTML5提供了很多新的功能以及相應的介面,離線儲存就是其中的一個,離線儲存可以將站點的一些檔案儲存在本地,在沒有網路的時候還是可以訪問到以快取的對應的站點頁面,其中這些檔案可以包括html,js,css,img等等檔案,但其實即使在有網路的時候,瀏覽器也會優先使用已離線儲存的檔案,返回一個200(from cache)頭。這跟HTTP的快取使用策略是不同的。
本地快取應用所需的檔案
怎麼使用HTML5的離線儲存
首先,你得告訴瀏覽器你想要離線儲存哪些檔案,那就需要有一個快取檔案清單,這跟檔案是一個manifest字尾名的檔案,注意,使用HTML5的離線儲存就必須有這個檔案,而且必須在伺服器端做修改,使得.manifest字尾名的檔案的mime型別為text/cache-manifest。
配置manifest
檔案
頁面上:
<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
manifest
檔案:
manifest
是最簡單的文字檔案,它告知瀏覽器被快取的內容(以及不快取的內容)。
manifest
檔案分為三個部分:
CACHE MANIFEST
-在此標題下列出的檔案將在首次下載後進行快取NETWOrK
-在此標題下的檔案需要與伺服器進行連線,且不會被快取FALLBACK
-在此標題下的檔案規定當頁面無法被訪問時的回退頁面(比如404
頁面)- 指定上述檔案,可以用相對路徑,也可以用絕對路徑,都是ok的。但是絕對路徑要加上http://
完整demo
CACHE MANIFEST
# 2016-07-24 v1.0.0
/theme.css
/main.js
NETWORK:
login.jsp
FALLBACK:
/html/ /offline.html
伺服器上:manifest
檔案需要配置正確的MIME-type
,即text/cache-manifest
。
常用API
核心是applicationCache
物件,有個status
屬性,表示應用快取的當前狀態:
0 (UNCACHED)
:無快取,沒有和頁面相關的應用快取
1 (IDLE)
:閒置,應用快取沒有得到更新
2 (CHECKING)
:檢查中,正在下載描述檔案並檢查更新
3 (DOWNLOADING)
:下載中,應用快取正在下載與描述檔案中指定的資源
4 (UPDATEREADY)
:更新完成,所有資源都已經下載完畢
5 (IDLE)
:廢棄,應用快取的描述檔案已經不存在了,因此頁面無法再訪問應用快取
相關事件
表示應用快取狀態的改變:
checking
:在瀏覽器為應用快取查詢更新時觸發
error
:在檢查更新或下載資源期間發生錯誤時觸發
noupdate
:在檢查描述檔案發現檔案無變化時觸發
downloading
:在開始下載應用快取資源時觸發
progress
:在檔案下載應用快取的過程中持續不斷地下載時觸發
updateready
:在頁面新的應用快取下載完畢時觸發
cached
:在應用快取完整可用時觸發
application cache
的三個優勢:
- 離線瀏覽
- 提升頁面載入速度
- 降低伺服器壓力
注意事項:
- 瀏覽器對快取資料的容量限制可能不太一樣(某些瀏覽器設定的限制是每個站點
5M
) - 如果是
manifest
檔案,或者內部列舉的某一個檔案不能正常下載,整個更新過程將視為失敗,瀏覽器繼續全部使用舊的快取 - 引用
manifest
的html
必須與manifest
檔案同源,在同一個域下 - 瀏覽器會自動快取引用
manifest
檔案的html
檔案,這就導致瞭如果更改了html
內容,也需要更新版本才能做到最新 manifest
檔案中的CACHE
與NETWOrK
、FALLBACK
的位置順序沒有關係,如果是隱式宣告需要在最前面FALLBACK
中的資源必須和manifest
檔案同源- 更新完版本後,必須重新整理一次才會啟動新版本(會出現重刷一次頁面的情況),需要新增監聽版本事件
- 站點中的其他頁面即使沒有設定
manifest
屬性,請求的資源如果在快取中也從快取中訪問 - 當
manifest
檔案發生改變時,資源請求本身也會觸發更新
離線快取和傳統瀏覽器快取的區別
- 離線快取是針對整個應用,瀏覽器快取是單個檔案
- 離線快取可以主動通知瀏覽器更新資源
css部分
第一題
問:
在頁面上隱藏元素的方法有哪些?
答:
利用 dispaly
- disaplay: none; 頁面不會渲染
- visibility: hidden; 頁面會渲染只是不限顯示
- opacity: 0; 看不見,但是會佔據空間
利用 position (absolute 的情況下)
- left/right/top/bottom: 9999px/-9999px 讓元素在視區外
- z-index: -9999 放到最底層,同一位置可以讓其他元素把這個給遮掉
利用2D動畫
- transform: scale(0) 設定元素縮放比例為0,起到display:none; 的作用
超出隱藏
- overflow: hidden;
寬高設定
- width:0; height:0;
僅對塊內文字元素:
- text-indent: -9999px;
- font-size: 0;
第二題:
問:
CSS選擇器有哪些?哪些屬性可以繼承?
答:
css選擇器
選擇器 | 例子 | 例子描述 | CSS |
---|---|---|---|
.class | .intro | 選擇 class=“intro” 的所有元素。 | 1 |
#id | #firstname | 選擇 id=“firstname” 的所有元素。 | 1 |
* | * | 選擇所有元素。 | 2 |
element | p | 選擇所有元素。 | 1 |
element,element | div,p | 選擇所有元素和所有元素。 | 1 |
element element | div p | 選擇元素內部的所有元素。 | 1 |
element>element | div>p | 選擇父元素為元素的所有元素。 | 2 |
element+element | div+p | 選擇緊接在元素之後的所有元素。 | 2 |
[attribute] | [target] | 選擇帶有 target 屬性所有元素。 | 2 |
[attribute=value] | [target=_blank] | 選擇 target="_blank" 的所有元素。 | 2 |
[attribute~=value] | [title~=flower] | 選擇 title 屬性包含單詞 “flower” 的所有元素。 | 2 |
[attribute|=value] | [lang|=en] | 選擇 lang 屬性值以 “en” 開頭的所有元素。 | 2 |
:link | a:link | 選擇所有未被訪問的連結。 | 1 |
:visited | a:visited | 選擇所有已被訪問的連結。 | 1 |
:active | a:active | 選擇活動連結。 | 1 |
:hover | a:hover | 選擇滑鼠指標位於其上的連結。 | 1 |
:focus | input:focus | 選擇獲得焦點的 input 元素。 | 2 |
:first-letter | p:first-letter | 選擇每個元素的首字母。 | 1 |
:first-line | p:first-line | 選擇每個元素的首行。 | 1 |
:first-child | p:first-child | 選擇屬於父元素的第一個子元素的每個元素。 | 2 |
:before | p:before | 在每個元素的內容之前插入內容。 | 2 |
:after | p:after | 在每個元素的內容之後插入內容。 | 2 |
:lang(language) | p:lang(it) | 選擇帶有以 “it” 開頭的 lang 屬性值的每個元素。 | 2 |
element1~element2 | p~ul | 選擇前面有元素的每個元素。 | 3 |
[attribute^=value] | a[src^=“https”] | 選擇其 src 屬性值以 “https” 開頭的每個 元素。 | 3 |
[attribute$=value] | a[src$=".pdf"] | 選擇其 src 屬性以 “.pdf” 結尾的所有 元素。 | 3 |
[attribute*=value] | a[src*=“abc”] | 選擇其 src 屬性中包含 “abc” 子串的每個 元素。 | 3 |
:first-of-type | p:first-of-type | 選擇屬於其父元素的首個元素的每個元素。 | 3 |
:last-of-type | p:last-of-type | 選擇屬於其父元素的最後元素的每個元素。 | 3 |
:only-of-type | p:only-of-type | 選擇屬於其父元素唯一的元素的每個元素。 | 3 |
:only-child | p:only-child | 選擇屬於其父元素的唯一子元素的每個元素。 | 3 |
:nth-child(n) | p:nth-child(2) | 選擇屬於其父元素的第二個子元素的每個元素。 | 3 |
:nth-last-child(n) | p:nth-last-child(2) | 同上,從最後一個子元素開始計數。 | 3 |
:nth-of-type(n) | p:nth-of-type(2) | 選擇屬於其父元素第二個元素的每個元素。 | 3 |
:nth-last-of-type(n) | p:nth-last-of-type(2) | 同上,但是從最後一個子元素開始計數。 | 3 |
:last-child | p:last-child | 選擇屬於其父元素最後一個子元素每個元素。 | 3 |
:root | :root | 選擇文件的根元素。 | 3 |
:empty | p:empty | 選擇沒有子元素的每個元素(包括文字節點)。 | 3 |
:target | #news:target | 選擇當前活動的 #news 元素。 | 3 |
:enabled | input:enabled | 選擇每個啟用的 元素。 | 3 |
:disabled | input:disabled | 選擇每個禁用的 元素 | 3 |
:checked | input:checked | 選擇每個被選中的 元素。 | 3 |
:not(selector) | :not§ | 選擇非元素的每個元素。 | 3 |
::selection | ::selection | 選擇被使用者選取的元素部分。 | 3 |
屬性可以繼承
1. 所有元素都可以繼承
visibility
和cursor
2. 內聯元素可以繼承
letter-spacing
:字元之間的間隙word-spacing
:單詞之間的間隙white-space
:換行方式line-height
:行高color
:顏色font
:字型設定font-family
:字型名稱font-size
:字型大小font-style
:字型樣式font-variant
:是否為小型的大寫字母font-weight
:文字字型的粗細text- decoration
:複合屬性。文字的裝飾。text-transform
:文字的大小寫direction
:文字流的方向
3. 塊級元素可以繼承
text-indent
:文字縮排text-align
:文字對齊方式
4. 列表元素可以繼承
list-style
:複合屬性。設定列表專案相關內容list-style-type
:列表項所使用的預設標記list-style-position
:列表項標記如何根據文字排列list-style-image
:列表項標記的影象
5. 表格元素嗯昆蟲繼承
border-collapse
:表格的行和單元格的邊是合併還是獨立
6. 不可繼承的元素
display`、`margin`、`border`、`padding`、`background`、`height`、`min-height`、`max- height`、`width`、`min-width`、`max-width`、`overflow`、`position`、`left`、`right`、`top`、 `bottom`、`z-index`、`float`、`clear`、`table-layout`、`vertical-align`、`page-break-after`、 `page-bread-before和unicode-bid
js部分
第一題:
問:
去除字串中最後一個指定的字元
答:
var str = "123456789"
function strdelete (str, del) {
if (typeof str !== 'string') {
return false
} else {
var index = str.lastIndexOf(del)
return str.substring(0,index ) + str.substring(index+1,str.length);
}
}
var a=strdelete(str, "9")
console.log(a)
第二題:
問:
寫一個方法把下劃線命名轉成大駝峰命名
答:
第一種:
function transoform(str) {
var result = str.split('');
result.forEach(function(e, i, a) {
if (e === '_') {
a[i + 1] = a[i + 1].toUpperCase();
}
});
return result.join('').replace(/\_*/g, '');
}
var result = transoform('if_you_are_my_world');
console.log(result); // ifYouAreMyWorld
第二種:
function toCamel(str) {
return str.replace(/(\w)(_)(\w)/g, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
}
console.log(toCamel('a_bc_def')) // aBcDef