注:花一個多月時間,重學基礎,學習完、整理完、總結概括完,痛並快樂着。javascript
(歡迎提出問題和建議,採納後會附上提議者名字連接)css
alt
是是圖片內容的等價描述,用於圖片沒法加載時顯示、讀屏器閱讀圖片。可提圖片高可訪問性,除了純裝飾圖片外都必須設置有意義的值,搜索引擎會重點分析。新增元素:html
canvas
video 和 audio
元素localStorage
長期存儲數據,瀏覽器關閉後數據不丟失sessionStorage
的數據在瀏覽器關閉後自動刪除article 、footer、header、nav、section
calendar 、 date 、 time 、 email 、 url 、 search
webworker 、 websocket 、 Geolocation
移除的元素:html5
basefont 、 big 、 center 、 font 、 s 、 strike 、 tt 、 u
frame 、 frameset 、 noframes
支持 HTML5 新標籤:java
IE8/IE7/IE6
支持經過 document.createElement
方法產生的標籤HTML5
新標籤如何使用:python
manifest
的屬性;cache.manifest
文件的編寫離線存儲的資源window.applicationCache
進行需求實現在線的狀況下,瀏覽器發現 html
頭部有 manifest
屬性,它會請求 manifest
文件,若是是第一次訪問 app
,那麼瀏覽器就會根據manifest
文件的內容下載相應的資源而且進行離線存儲。若是已經訪問過 app
而且資源已經離線存儲了,那麼瀏覽器就會使用離線的資源加載頁面,而後瀏覽器會對比新的manifest
文件與舊的 manifest
文件,若是文件沒有發生改變,就不作任何操做,若是文件改變了,那麼就會從新下載文件中的資源並進行離線存儲。web
src 用於替換當前元素,href用於在當前文檔和引用資源之間確立聯繫。
src 是 source 的縮寫,指向外部資源的位置,指向的內容將會嵌入到文檔中當前標籤所在位置;在請求src 資源時會將其指向的資源下載並應用到文檔內,例如 js 腳本,img 圖片和 frame 等元素ajax
當瀏覽器解析到該元素時,會暫停其餘資源的下載和處理,直到將該資源加載、編譯、執行完畢,圖片和框架等元素也如此,相似於將所指向資源嵌入當前標籤內。這也是爲何將js腳本放在底部而不是頭部canvas
canvas標籤的width和height是畫布實際寬度和高度,繪製的圖形都是在這個上面。而style的width和height是canvas在瀏覽器中被渲染的高度和寬度。若是canvas的width和height沒指定或值不正確,就被設置成默認值 。瀏覽器
在線的狀況下,瀏覽器發現html頭部有manifest屬性,它會請求manifest文件,若是是第一次訪問app,那麼瀏覽器就會根據manifest文件的內容下載相應的資源而且進行離線存儲。若是已經訪問過app而且資源已經離線存儲了,那麼瀏覽器就會使用離線的資源加載頁面,而後瀏覽器會對比新的manifest文件與舊的manifest文件,若是文件沒有發生改變,就不作任何操做,若是文件改變了,那麼就會從新下載文件中的資源並進行離線存儲。
離線的狀況下,瀏覽器就直接使用離線存儲的資源。
class
:爲元素設置類標識data-*
: 爲元素增長自定義屬性draggable
: 設置元素是否可拖拽id
: 元素 id ,文檔內惟一lang
: 元素內容的的語言style
: 行內 css 樣式title
: 元素相關的建議信息
改版的時候更方便 只要改 css 文件。
頁面加載速度更快、結構化清晰、頁面顯示簡潔。
表現與結構相分離。
易於優化( seo )搜索引擎更友好,排名更容易靠前。
@import是 CSS 提供的語法規則,只有導入樣式表的做用;link是HTML提供的標籤,不只能夠加載 CSS 文件,還能夠定義 RSS、rel 鏈接屬性等。
加載頁面時,link引入的CSS被同時加載,@import引入的CSS將在頁面加載完畢後加載。
link標籤做爲HTML元素,不存在兼容性問題,而@import是CSS2.1纔有的語法,故老版本瀏覽器(IE5以前)不能識別。
能夠經過JS操做DOM,來插入link標籤改變樣式;因爲DOM方法是基於文檔的,沒法使用@import方式插入樣式。
共同點:
1.改變行內元素的呈現方式,display被置爲block;
2.讓元素脫離普通流,不佔據空間;
3.默認會覆蓋到非定位元素上不一樣點:
absolute的」根元素「是能夠設置的,而fixed的」根元素「固定爲瀏覽器窗口。當你滾動網頁,fixed元素與瀏覽器窗口之間的距離是不變的。
根元素
浮動元素( float 不取值爲 none )
絕對定位元素( position 取值爲 absolute 或 fixed )
display 取值爲 inline-block 、 table-cell 、 table-caption 、 flex 、inline-flex 之一的元素
overflow 不取值爲 visible 的元素
能夠包含浮動元素
不被浮動元素覆蓋
阻止父子元素的 margin 摺疊
父級 div 定義 height
結尾處加空 div 標籤 clear:both
父級 div 定義僞類 :after 和 zoom
父級 div 定義 overflow:hidden
父級 div 也浮動,須要定義寬度
結尾處加 br 標籤 clear:both
p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每一個 <p> 元素。
p:last-of-type 選擇屬於其父元素的最後 <p> 元素的每一個 <p> 元素。
p:only-of-type 選擇屬於其父元素惟一的 <p> 元素的每一個 <p> 元素。
p:only-child 選擇屬於其父元素的惟一子元素的每一個 <p> 元素。
p:nth-child(2) 選擇屬於其父元素的第二個子元素的每一個 <p> 元素。
:enabled 已啓用的表單元素。
:disabled 已禁用的表單元素。
:checked 單選框或複選框被選中。
::before 在元素以前添加內容。
::after 在元素以後添加內容,也能夠用來作清除浮動。
::first-line 添加一個特殊的樣式到文本的首字母。
::first-letter 添加一行特殊樣式到首行。
相信你們也看出來他們的不一樣,
僞類語法一個:,它是爲了彌補css常規類選擇器的不足
僞元素語法兩個:,它是憑空建立的一個虛擬容器生成的元素
W3C盒模型: 內容(content)、填充( padding )、邊界( margin )、 邊框( border );
box-sizing: content-box
width = content width;
IE盒子模型: IE 的content 部分把 border 和 padding 計算了進去;
box-sizing: border-box
width = border + padding + content width
移除空格
使用 margin 負值
使用 font-size:0
letter-spacing
word-spacing
行內元素設置成浮動以後變得更加像是 inline-block (行內塊級元素,設置
成這個屬性的元素會同時擁有行內和塊級的特性,最明顯的不一樣是它的默認寬度不是 100% ),這時候給行內元素設置 padding-top 和 padding-bottom或者 width 、 height 都是有效果的
!important 規則最重要,大於其它規則
行內樣式規則,加 1000
對於選擇器中給定的各個 ID 屬性值,加 100
對於選擇器中給定的各個類屬性、屬性選擇器或者僞類選擇器,加 10
對於選擇其中給定的各個元素標籤選擇器,加1
若是權值同樣,則按照樣式規則的前後順序來應用,順序靠後的覆蓋靠前的規則
均具備「變量」、「混合」、「嵌套」、「繼承」、「顏色混合」五大基本特性
Sass 和 LESS 語法較爲嚴謹, LESS 要求必定要使用大括號「{}」, Sass 和 Stylus 能夠經過縮進表示層次與嵌套關係
Sass 無全局變量的概念, LESS 和 Stylus 有相似於其它語言的做用域概念
Sass 是基於 Ruby 語言的,而 LESS 和 Stylus 能夠基於 NodeJS NPM 下載相應庫後進行編譯;這也是爲何安裝Sass的時候有時候會報錯,須要安裝python腳本
優勢:就不用我多說了,誰用誰知道,真香。
clientHeight:表示的是可視區域的高度,不包含border和滾動條
offsetHeight:表示可視區域的高度,包含了border和滾動條
scrollHeight:表示了全部區域的高度,包含了由於滾動被隱藏的部分。
clientTop:表示邊框border的厚度,在未指定的狀況下通常爲0
scrollTop:滾動後被隱藏的高度,獲取對象相對於由offsetParent屬性指定的父座標(css定位的元素或body元素)距離頂端的高度。
首先是三個事件,分別是mousedown,mousemove,mouseup
當鼠標點擊按下的時候,須要一個tag標識此時已經按下,能夠執行mousemove裏面的具體方法。
clientX,clientY標識的是鼠標的座標,分別標識橫座標和縱座標,而且咱們用offsetX和offsetY來表示元素的元素的初始座標,移動的舉例應該是:
鼠標移動時候的座標-鼠標按下去時候的座標。
也就是說定位信息爲:
鼠標移動時候的座標-鼠標按下去時候的座標+元素初始狀況下的offetLeft.
還有一點也是原理性的東西,也就是拖拽的同時是絕對定位,咱們改變的是絕對定位條件下的left
以及top等等值。
補充:也能夠經過html5的拖放(Drag 和 drop)來實現
defer:只支持IE若是您的腳本不會改變文檔的內容,可將 defer 屬性加入到<script>標籤中,以便加快處理文檔的速度。由於瀏覽器知道它將可以安全地讀取文檔的剩餘部分而不用執行腳本,它將推遲對腳本的解釋,直到文檔已經顯示給用戶爲止。
async,HTML5屬性僅適用於外部腳本,而且若是在IE中,同時存在defer和async,那麼defer的優先級比較高,腳本將在頁面完成時執行。
建立script標籤,插入到DOM中
防抖(Debouncing)
防抖技術便是能夠把多個順序地調用合併成一次,也就是在必定時間內,規定事件被觸發的次數。
通俗一點來講,看看下面這個簡化的例子:
// 簡單的防抖動函數 function debounce(func, wait, immediate) { // 定時器變量 var timeout; return function() { // 每次觸發 scroll handler 時先清除定時器 clearTimeout(timeout); // 指定 xx ms 後觸發真正想進行的操做 handler timeout = setTimeout(func, wait); }; }; // 實際想綁定在 scroll 事件上的 handler function realFunc(){ console.log("Success"); } // 採用了防抖動 window.addEventListener('scroll',debounce(realFunc,500)); // 沒采用防抖動 window.addEventListener('scroll',realFunc);
上面簡單的防抖的例子能夠拿到瀏覽器下試一下,大概功能就是若是 500ms 內沒有連續觸發兩次 scroll 事件,那麼纔會觸發咱們真正想在 scroll 事件中觸發的函數。
上面的示例能夠更好的封裝一下
// 防抖動函數 function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; var myEfficientFn = debounce(function() { // 滾動中的真正的操做 }, 250); // 綁定監聽 window.addEventListener('resize', myEfficientFn);
函數內再嵌套函數
內部函數能夠引用外層的參數和變量
參數和變量不會被垃圾回收機制回收
做用域鏈的做用是保證執行環境裏有權訪問的變量和函數是有序的,做用域鏈的變量只能向上訪問,變量訪問到 window對象即被終止,做用域鏈向下訪問變量是不被容許的。
簡單的說,做用域就是變量與函數的可訪問範圍,即做用域控制着變量與函數的可見性和生命週期
每一個對象都會在其內部初始化一個屬性,就是 prototype (原型),當咱們訪問一個對象的屬性時,若是這個對象內部不存在這個屬性,那麼他就會去 prototype 裏找這個屬性,這個prototype 又會有本身的 prototype ,因而就這樣一直找下去,也就是咱們平時所說的原型鏈的概念
關係: instance.constructor.prototype = instance._proto_
特色:JavaScript 對象是經過引用來傳遞的,咱們建立的每一個新對象實體中並無一份屬於本身的原型副本。當咱們修改原型時,與之相關的對象也會繼承這一改變當咱們須要一個屬性的時, Javascript 引擎會先看當前對象中是否有這個屬性, 若是沒有的,就會查找他的 Prototype 對象是否有這個屬性,如此遞推下去,一直檢索到 Object內建對象
事件代理( Event Delegation ),又稱之爲事件委託。是 JavaScript 中經常使用的綁定事件的經常使用技巧。顧名思義,「事件代理」便是把本來須要綁定的事件委託給父元素,讓父元素擔當事件監聽的職務。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好處是能夠提升性能
能夠大量節省內存佔用,減小事件註冊,好比在 table 上代理全部 td 的 click 事件就很是棒
能夠實現當新增子對象時無需再次對其綁定
原型 prototype 機制或 apply 和 call 方法去實現較簡單,建議使用構造函數與原型混合方式
function Parent(){ this.name = 'wang'; } function Child(){ this.age = 28; } Child.prototype = new Parent();//繼承了Parent,經過原型 var demo = new Child(); alert(demo.age); alert(demo.name);//獲得被繼承的屬性
this 老是指向函數的直接調用者(而非間接調用者)
若是有 new 關鍵字, this 指向 new 出來的那個對象
在事件中, this 指向觸發這個事件的對象,特殊的是, IE 中的 attachEvent 中的this 老是指向全局對象 Window
建立一個空對象,而且 this 變量引用該對象,同時還繼承了該函數的原型
屬性和方法被加入到 this 引用的對象中
新建立的對象由 this 所引用,而且最後隱式的返回 this
Ajax 的原理簡單來講是在用戶和服務器之間加了—箇中間層( AJAX 引擎),經過XmlHttpRequest 對象來向服務器發異步請求,從服務器得到數據,而後用 javascript來操做 DOM 而更新頁面。使用戶操做與服務器響應異步化。這其中最關鍵的一步就是從服務器得到請求數據
Ajax 的過程只涉及 JavaScript 、 XMLHttpRequest 和 DOM 。 XMLHttpRequest 是ajax的核心機制