【前端】html基礎

1. display

  • display:none 隱藏元素,不會佔用任何頁面佈局空間。而visibility:hidden還會佔用。
  • display:block 塊元素
  • display:inline 內聯元素(行級元素)

2.position

position 屬性把元素放置到一個靜態的、相對的、絕對的、或固定的位置中。

  • static 默認值,沒有定位
  • relative 相對於其正常位置進行定位
  • absolute 相對於 static 定位以外的第一個父元素進行定位
  • fixed 相對於瀏覽器窗口進行定位

3.link和@import的區別

  • link屬於XHTML標籤,不僅可以加載 CSS 文件,還可以定義 RSS、rel 連接屬性,而@import完全是css提供的一種方式。
  • 加載頁面時,link標籤引入的 CSS 被同時加載;@import引入的 CSS 將在頁面加載完畢後被加載。
  • link不存在兼容性問題,@import得IE5以上
  • 使用dom控制樣式時的差別。當時用JavaScript控制dom去改變樣式的時候,只能使用link標籤,因爲@import不是dom可以控制的(不支持)。
  • 同樣的樣式,優先級 :link > @import
    綜上所述:我們要用link

4.html第一行

聲明文檔解析類型,沒有結束標籤,大小寫不敏感

html4需要引用DTD:

// 過渡的.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
// 嚴格的.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
// 框架的.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

html5不需要引用DTD:

<!DOCTYPE html>

5.DOM

⑴什麼是dom

DOM是Document Object Model的英文縮寫,翻譯過來是文檔對象模型,提供給Javascript用來動態修改文檔狀態。

⑵dom常用屬性
  • innerHTML innerHTML用來修改(獲取)HTML元素(如div)html格式的內容。包括html標籤。
  • innerText 不包括html標籤
  • value 可以用來修改(獲取)textarea和input的value屬性的值或元素的內容;
⑶dom常用操作方法
  • document.getElementById(‘id屬性值’) 返回擁有指定id的第一個對象的引用
  • document.createElement(‘元素名’) 創建新的元素節點
⑷dom常用事件
  • 點擊事件onclick
  • 進入事件onload
  • 監聽變化事件onchange
  • 鼠標指針移動到onmouseover
  • 鼠標指針離開元素onmouseout
  • 按住鼠標不鬆開事件onmousedown
  • 按住鼠標鬆開事件onmouseup

5.頁面呈現過程

在這裏插入圖片描述

  • 瀏覽器把獲取到的html代碼解析成1個Dom樹,裏面包含了所有的html tag,包括display:none隱藏,還有用JS動態添加的元素等。
  • 樣式(主要包括css和瀏覽器的樣式設置)解析成樣式結構體,在解析的過程中會去掉瀏覽器不能識別的樣式
  • dom tree和樣式結構體結合後構建呈現樹(render tree),render tree有點類似於dom tree,但其實區別有很大,render tree能識別樣式,而且render tree不包含隱藏的節點(比如display:none的節點,還有head節點),因爲這些節點不會用於呈現,而且不會影響呈現的,注意 visibility:hidden隱藏的元素還是會包含到render tree中的,因爲visibility:hidden 會影響佈局(layout),會佔有空間
  • 一旦render tree構建完畢後,瀏覽器就可以根據render tree來繪製頁面了

6.迴流和重繪

⑴迴流和重繪
  • 當render tree中的一部分(或全部)因爲元素的規模尺寸,佈局,隱藏等改變而需要重新構建。這就稱爲迴流(其實我覺得叫重新佈局更簡單明瞭些)。每個頁面至少需要一次迴流,就是在頁面第一次加載的時候。
  • 當render tree中的一些元素需要更新屬性,而這些屬性只是影響元素的外觀,風格,而不會影響佈局的,比如background-color。則就叫稱爲重繪。
  • 迴流必將引起重繪,而重繪不一定會引起迴流
⑵什麼操作會引起迴流和重繪
  • 添加、刪除元素(迴流+重繪)
  • 隱藏元素,display:none(迴流+重繪),visibility:hidden(只重繪,不迴流)
  • 移動元素,比如改變top,left(jquery的animate方法就是,改變top,left不一定會影響迴流),或者移動元素到另外1個父元素中。(重繪+迴流)
  • 對style的操作(對不同的屬性操作,影響不一樣)
  • 還有一種是用戶的操作,比如改變瀏覽器大小,改變瀏覽器的字體大小等(迴流+重繪)
⑶如何減少迴流和重繪

減少迴流、重繪其實就是需要減少對render tree的操作,並減少對一些style信息的請求,儘量利用好瀏覽器的優化策略
*
*
*
*
*

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章