里面這段css選擇器是什么意思,css選擇器包括class選擇器嗎?
不包括
?一:css基本選擇器有哪些
1.css屬性選擇器
2.css標簽選擇器
3.cssID選擇器
4.css的通配符
二:css有哪些高級選擇器
1.css標簽選擇器
css標簽選擇器其實就是頁面上的所有類型的標簽,我們對經常描述稱為共性,對無法描述的稱為個性。我們在頁面上看到input,div和ul都有可能是選擇器,無論這個標簽藏得多深,都可能被選擇上,并且選擇的是所有標簽,并不是單單指一個。
2.cssID選擇器
css中我們使用#來對名字進行自定義,#是指對一個特殊的標簽來使用,并且只能用一次,在任何html標簽中,都可以有id屬性,但是前提要按照字母開頭,更不能用字母去開頭,或者和標簽同名。還有一些高手建議在css層面上盡量不要使用id。
3.css類選擇器
css中類選擇器,我們使用.來表示,我們使用類來表示,其實就是比較靈活。class和id是十分相似的,并且同一個標簽可以使用很多個類選擇器,也可以多種標簽使用。
4.css的通配符,可以替換任何標簽,目前有些瀏覽器是不支持使用。
css如何設置網頁鏈接?
1. 打開文檔,然后打開“CSS樣式”面板。
2. 在“CSS樣式”面板中,點擊右下角的“新建 CSS 規則”按鈕,打開“新建 CSS 規則”對話框。
在“選擇器類型”中選擇“復合內容(基于選擇的內容)”項。
在“選擇器名稱”中點擊右邊的下拉箭頭,我們可以看到:
a:link:未訪問的超鏈接。
a:visited:已經訪問過的超鏈接。
a:hover:鼠標指針移動到上面時的超鏈接。
a:active:正在訪問的超鏈接。
3. 在“選擇器名稱”中選擇“a:link”項,然后點擊“確定”按鈕,打開“CSS 規則定義”對話框。
4. 在“CSS 規則定義”對話框中,在“分類”下拉框中選擇“類型”,然后在右邊“類型”部分設置鏈接字體的顏色、大小和修飾等。
5. 設置好以后單擊“確定”按鈕,完成“a:link”項的設置。
瀏覽器響應用戶的機制是什么?
1. 瀏覽器是多進程的
GPU進程
最多一個,用于3D繪制等
Browser進程
負責瀏覽器界面顯示,與用戶交互。如前進,后退等
負責各個頁面的管理,創建和銷毀其他進程
將Renderer進程得到的內存中的Bitmap,繪制到用戶界面上
網絡資源的管理,下載等
第三方插件進程
每種類型的插件對應一個進程,僅當使用該插件時才創建
瀏覽器渲染進程(瀏覽器內核)
默認每個tab頁一個進程
頁面渲染,腳本執行,事件處理等
2. 瀏覽器渲染進程是多線程的
GUI渲染線程
負責渲染瀏覽器界面,解析HTML,CSS,構建DOM樹和RenderObject樹,布局和繪制等。
當界面需要重繪(Repaint)或由于某種操作引發回流(reflow)時,該線程就會執行
注意,GUI渲染線程與JS引擎線程是互斥的,當JS引擎執行時GUI線程會被掛起(相當于被凍結了),GUI更新會被保存在一個隊列中等到JS引擎空閑時立即被執行。
js引擎線程
也稱為JS內核,負責處理Javascript腳本程序。(例如V8引擎)
JS引擎線程負責解析Javascript腳本,運行代碼。
JS引擎一直等待任務隊列中任務的到來,然后加以處理,一個Tab頁(renderer進程)中只有一個JS線程在運行
同樣注意,GUI渲染線程與JS引擎線程是互斥的。所以如果JS執行的時間過長,要放在body下面,否則就會導致頁面渲染加載阻塞。
事件觸發線程
管理著事件隊列
監聽事件,符合條件時把回調函數放入事件隊列中
定時觸發器線程
setInterval與setTimeout在此線程中計時完畢后,把回調函數放入事件隊列中
瀏覽器定時計數器并不是由JavaScript引擎計數的,(因為JavaScript引擎是單線程的, 如果處于阻塞線程狀態就會影響記計時的準確),因此通過單獨線程來計時并觸發定時(計時完畢后,添加到事件隊列中,等待JS引擎空閑后執行)
注意,W3C在HTML標準中規定,規定要求setTimeout中低于4ms的時間間隔算為4ms。
異步http請求線程
檢測到XHR對象狀態變化時,將回調函數放入事件隊列中
event loop整體流程
3. repaint、reflow
repaint
repiant或者redraw遍歷所有的節點檢測各節點的可見性、顏色、輪廓等可見的樣式屬性,然后根據檢測的結果更新頁面的響應部分。
當render tree中的一些元素需要更新屬性,而這些屬性只是影響元素的外觀,風格,而不會影響布局的,比如background-color。則就叫稱為重繪
reflow
reflow指的是計算頁面布局。某個節點reflow時會重新計算節點的尺寸和位置,而且還有可能觸發其子節點、祖先節點和頁面上的其他節點reflow。在這之后再觸發一次repaint。
當render tree中的一部分(或全部)因為元素的規模尺寸,布局,隱藏等改變而需要重新構建。這就稱為回流,每個頁面至少需要一次回流,就是在頁面第一次加載的時候。
導致reflow的操作
調整窗口大小
改變字體
增加或者移除樣式表
內容變化,比如用戶在input框中輸入文字
激活 CSS 偽類,比如 :hover (IE 中為兄弟結點偽類的激活)
操作 class 屬性
腳本操作 DOM
計算 offsetWidth 和 offsetHeight 屬性
設置 style 屬性的值
它們會大大影響web性能,如何減少reflow、repaint
不要通過父級來改變子元素樣式,最好直接改變子元素樣式,改變子元素樣式盡可能不要影響父元素和兄弟元素的大小和尺寸
盡量通過class來設計元素樣式,切忌用style多次操作單個屬性
實現元素的動畫,對于經常要進行回流的組件,要抽離出來,它的position屬性應當設為fixed或absolute
權衡速度的平滑。比如實現一個動畫,以1個像素為單位移動這樣最平滑,但reflow就會過于頻繁,CPU很快就會被完全占用。如果以3個像素為單位移動就會好很多。
不要用tables布局的另一個原因就是tables中某個元素一旦觸發reflow就會導致table里所有的其它元素reflow。在適合用table的場合,可以設置table-layout為auto或fixed,
這樣可以讓table一行一行的渲染,這種做法也是為了限制reflow的影響范圍。
css里不要有表達式expression
減少不必要的 DOM 層級(DOM depth)。改變 DOM 樹中的一級會導致所有層級的改變,上至根部,下至被改變節點的子節點。這導致大量時間耗費在執行 reflow 上面。
避免不必要的復雜的 CSS 選擇器,尤其是后代選擇器(descendant selectors),因為為了匹配選擇器將耗費更多的 CPU。
盡量不要過多的頻繁的去增加,修改,刪除元素,因為這可能會頻繁的導致頁面reflow,可以先把該dom節點抽離到內存中進行復雜的操作然后再display到頁面上。
請求如下值offsetTop, offsetLeft, offsetWidth, offsetHeight,scrollTop/Left/Width/Height,clientTop/Left/Width/Height,瀏覽器會發生reflow,建議將他們合并到一起操作,可以減少回流的次數。
元素選擇器的權值規則是哪些?
1. 內聯樣式表的權值最高 1000 2. ID 選擇器的權值為 100 3. Class 類選擇器的權值為 10 4. HTML 標簽選擇器的權值為 1 CSS 優先級法則: A 選擇器都有一個權值,權值越大越優先 B 當權值相等時,后出現的樣式表設置要優于先出現的樣式表設置 C 創作者的規則高于瀏覽者:即網頁編寫者設置的CSS 樣式的優先權高于瀏覽器所設置的樣式 D 繼承的CSS 樣式不如后來指定的CSS 樣式 E 在同一組屬性設置中標有“!important”規則的優先級最大 這是規定好的,自然不能打破