程序員HTML5培訓教程-css樣式的繼承性、層疊性 、優先級
一、css樣式的繼承性:
作用:給父元素設置一些屬性,子元素也可以使用
應用場景:
一般用于設置網頁上的一些共性信息,例如網頁的文字顏色,字體,文字大小等內容。優化代碼,降低工作量
注意點:
1.并不是所有的屬性都可以繼承,、
只有color/font-/text-/ line開頭的屬性才能繼承;
2.在css的繼承中,不僅僅是兒子可以繼承,只要是后代
都能繼承
3.繼承性中的特殊性
3.1 a標簽的文字和顏色 和下劃線是不能繼承父元素的——舉例:
復制代碼
<style type="text/css">
div{
color:red
font-size:24px;
text-decoration: none;
}
</style>
<body>
< div>
<h1>我是大標題</h1>
<a heref="#">我是超鏈接</a>
<p>我是段落</p>
</div>
(上面的代碼,只有p繼承了div設置的屬性,而a標簽是不能繼承父元素的屬性,顏色不會變紅,下劃線也不會被去掉)
復制代碼
3.2 h標簽的文字大小也是不能繼承父元素的(見上面代碼,<h1>標簽中我是大標題不會繼承<div>的 font-size:24px;屬性,所以需要給<h1>單獨寫個css樣式:h1{font-size:24px;}
應用場景:
一般用于設置網頁上的一些共性信息,例如網頁的文字顏色,
字體,文字大小燈內容
格式:
body{屬性:值;}
二、層疊性
比如p標簽,給p標簽設置id和class類名,選擇器上選擇p 和p的id或者class類名,設置相同的屬性,就是層疊性
三、優先級:(三一)
作用:當多個選擇器(比如選擇p標簽和p標簽里設置的id或者class昵稱),選中同一個標簽,并且給同一個標簽設置相同的屬性時,
如何層疊就優先級來確定。
2.優先級判斷的三種方式
2.1 是否直接選中,直接選中指的是直接選中要設置css樣式的標簽,和標簽的id或者class類名。(間接選中就是指的是繼承性,比如選擇<ul>那里面的li繼承ul的屬性,就稱為繼承屬性)
如果是間接選中,誰離目標標簽比較近就聽誰的。
2.2是否是相同的選擇器。
如果是相同選擇器,那么就是誰寫在后面就聽誰的。(比如給兩個p標簽設置css樣式
p{color:blue}
p{color:red}
那么就會以第二個p為標準,文字變成紅色
2.3不同的選擇器
如果都是直接選中,并且不是相同類型的選擇器,那么就會按照
選擇器的優先級來層疊
id>類>標簽>通配符>繼承>瀏覽器默認
權重計算
如果選擇器里有直接選中和間接選中。哪怕是間接的選擇器為id選擇器,也會優先實行直接選中的效果。
感謝關注好程序員前端教程分享!
麗楓,鄭力新,王佳斌
(華僑大學 工學院,福建 泉州 362021)
摘要:隨著互聯網技術的不斷發展,Web技術在各個領域得到了不同程度的運用,人們對于Web應用的實時性提出了更高的要求,HTML5WebSocket協議因此得到了廣泛的關注。通過對基于HTTP的傳統Web實時通信方案進行分析,針對其中的不足與缺點,深入介紹了基于HTML5 WebSocket協議的實時通信機制以及相對于傳統方案的優勢,并通過使用Node.js的Express框架和HTML5 WebSocket協議的第三方應用程序編程接口Socket.io類庫實現了一個基于WebSocket協議的Web應用。經實驗表明,所描述的研究能成功地在客戶端和服務器端完成基于HTML5 WebSocket協議的實時通信過程并建立連接。
0引言
隨著互聯網技術的高速發展,人們對Web應用的實時性要求越來越高,傳統的Web實時通信方案已經無法滿足一些現實應用的需求。在長期的Web應用過程中該傳統方案逐漸露出資源浪費、實時性不高等問題,這些問題的出現對一些實時性要求較高的Web應用(如在線游戲、在線證券、設備監控等)造成了不好的用戶體驗。除此之外,這些不足還會制約Web實時通信的性能,對通信效率造成影響。面對這種情況,HTML5規范中定義了WebSocket協議來實現更好的用戶體驗和實時通信功能,并針對傳統的Web實時通信方案在實際運用中產生的資源浪費問題進行改善,提高通信效率。
目前,WebSocket協議的實現主要分為客戶端和服務器端兩部分。對于其客戶端而言,許多的主流瀏覽器(包括個人電腦和移動終端)如谷歌、火狐、IE等都在不同的版本上支持WebSocket客戶端應用程序編程接口。而對于其服務器端而言,也有許多常見的應用服務器如WebSphere、WebLogic、Tomcat等在不同的版本上支持WebSocket服務器端應用程序編程接口。綜上所述,本文從傳統的Web實時通信方案出發,針對其在Web應用中所體現的不足與缺點,深入研究WebSocket協議在Web實時通信方面的原理與優勢,并根據該協議的通信機制進行實現。
1傳統的Web實時通信方案
1.1輪詢
在早期的Web應用中,所采用的Web實時通信方案是輪詢。在使用輪詢時,客戶端需要頻繁地向服務器端發送HTTP請求來保持客戶端和服務器端的同步以便不斷地刷新客戶端所要呈現的信息。在這個過程中,客戶端無法確定合適的時間間隔向服務器端發送HTTP請求。若間隔的時間太短,客戶端頻繁的請求將會給服務器端造成巨大的壓力;若間隔的時間太長,就無法滿足客戶端和服務器端實時通信的要求。由于客戶端在頻繁地發送請求時服務器端的數據可能還未進行更新,導致服務器端返回的大部分應答包中的數據域為空,因而產生了很多無謂的網絡傳輸,浪費了大量的帶寬資源和其他網絡資源。對于圖1客戶端與服務器端的交互圖每次的HTTP請求而言,過長的HTTP頭信息也會占用不必要的帶寬資源。因此,這是一種缺乏靈活性又低效的Web實時通信方案。其中客戶端和服務器端的交互過程如圖1(a)所示。
1.2Comet技術
目前,Comet技術[1]的實現方式包括基于異步JavaScript和可擴展標記語言(Asynchronous JavaScript and Extensible Markup Language,AJAX)的長輪詢方式和基于Iframe的流方式。這兩種方式針對輪詢都做出了較大的改進。
1.2.1基于AJAX的長輪詢方式
基于AJAX的長輪詢方式[2]通過采用AJAX技術讓客戶端向服務器端發送HTTP請求,進而與服務器端建立連接,且該連接會在服務器端保持一段時間。若服務器端檢測到有新數據產生,那么它會將這些數據通過連接發送至客戶端,然后關閉連接;若服務器端在連接存在期間都沒有產生新的數據發送至客戶端,那么它將會向客戶端發送一個超時信息,然后關閉連接。無論服務器端的數據是否還在更新,在連接關閉之后,客戶端都需要重新向服務器端發送HTTP請求來建立連接。其中客戶端和服務器端的交互過程如圖1(b)所示。
雖然這種方式能夠對客戶端的部分頁面進行更新,減少服務器端發送的數據量,降低客戶端請求的頻率,減少無效的網絡傳輸,但當服務器端更新數據的速度較快時,基于AJAX的長輪詢方式將變成普通的輪詢,不僅會降低其性能,而且還會對服務器端造成較大的處理壓力。除此之外,為了保持HTTP連接長時間處于打開狀態,服務器端也需要消耗一定的服務器資源。因此,使用基于AJAX的長輪詢方式會產生資源浪費的問題。
1.2.2基于Iframe的流方式
基于Iframe的流方式[3]通過客戶端頁面上內嵌的一個Iframe標簽向服務器端發送HTTP請求,服務器端在響應該請求后與客戶端建立一條長連接。連接建立后,服務器端通過不斷地更新該連接的狀態以保持其不過期。當服務器端檢測到有新數據產生時,它會將新數據通過該連接發送給客戶端;當客戶端和服務器端之間的通信出現問題導致連接出現錯誤或者關閉時,客戶端會立即發出連接請求與服務器端重新建立連接,否則該連接會一直持續,不會關閉。其中客戶端和服務器端的交互過程如圖1(c)所示。
雖然這種方式有利于減少客戶端的請求次數,減輕客戶端和服務器端之間的網絡負擔,避免因頻繁的建立連接和關閉連接所帶來的資源浪費,但由于基于Iframe的流方式在連接過程中始終只維持一個長連接,因此客戶端頁面會一直處于加載過程中而無法顯示頁面加載完成,從而影響用戶體驗。且當有多個客戶端同時向服務器端發送HTTP請求時,由于服務器端長期只維持一個連接,因此會導致服務器端在這種高并發狀態下的處理能力降低,造成大量的服務器資源和其他網絡資源被消耗。
由于基于AJAX的長輪詢方式和基于Iframe的流方式在通信過程中一直采用HTTP作為通信協議,因此每次的HTTP請求和應答所攜帶的完整的HTTP頭信息不僅增加了實時更新信息時的數據傳輸量,還造成帶寬資源的浪費。此外,為了維持和協調通信過程中HTTP連接隨時處于可用狀態,服務器端也需要消耗資源。對于HTTP連接的建立和關閉過程而言,服務器端新產生的數據有可能會因為無法及時發送到客戶端而導致客戶端的數據丟失。由于這兩種方式對Web應用中的實時信息和非實時信息的請求/響應方式都未發生改變,因此,當實時信息的請求較為頻繁時,可能會造成服務器端較大的處理壓力,從而影響非實時信息的呈現。其中基于HTTP的Web實時應用模型如圖2所示。
2傳統的Web實時通信方案
WebSocket協議[45]是HTML5規范中的一種新的通信協議,是能夠在客戶端和服務器端進行異步通信的一種方法。它支持客戶端與服務器端通過全雙工通信的方式實現實時通信,本質上是一個基于傳輸控制協議的協議。因此,WebSocket連接的建立過程與傳輸控制協議連接的建立過程有些相似,客戶端和服務器端需要通過“握手”來建立WebSocket連接。
首先由客戶端向服務器端發送一個HTTP請求,該請求不同于一般的HTTP請求,它包含了一些附加的HTTP頭信息,其中一條信息“Upgrade:WebSocket”表明這是一個申請將當前HTTP協議升級為WebSocket協議的HTTP請求。若服務器端收到該請求后能正確解讀其HTTP頭信息,那么它會返回一個基于HTTP的應答報文給客戶端,此時連接建立成功[6],之后,客戶端和服務器端便可以通過該連接主動向對方發送或者接收數據,直到其中一方主動關閉該連接。其中客戶端和服務器端的交互過程如圖3所示。
通過WebSocket協議,客戶端和服務器端之間只要做一個“握手”的動作就可以建立一條雙向通信的通道。這不僅讓服務器端可以主動與客戶端互發信息,而且還避免了因客戶端頻繁請求而造成的網絡資源浪費、實時通信效率低、服務器處理壓力大等問題[7]。由于WebSocket連接采用WebSocket協議作為通信協議,因此在傳輸過程中數據幀的頭部信息所占的字節數將大大降低,從而有效地減小了通信過程中傳輸的數據量和網絡負載,節約了帶寬資源。在基于WebSocket協議的實時通信方案中,Web應用中的實時部分和非實時部分被加以區分。客戶端使用WebSocket協議獲取實時內容,使用HTTP協議獲取非實時內容。而服務器端則采用兩種不同的模塊來處理實時的WebSocket請求和非實時的HTTP請求,其應用模型如圖4所示。
通過上述模型可以看出,該實時通信方案使服務器端的結構更加明確,不僅讓WebSocket協議和HTTP協議各司其職、互不干擾,而且還降低了系統的耦合性,在最大程度上發揮了兩個模塊的功能。此外,由于采用以傳輸控制協議為基礎的WebSocket協議來處理實時服務,因此可以保證傳輸數據過程中的穩定性和及時性,在較大程度上提高了實時通信的性能。相對于傳統方案來說,該方案不僅減小了對服務器資源的浪費,也減輕了服務器端的處理壓力。
3基于WebSocket的Web實時通信應用實例
本文采用基于Node.js[8]的Express框架和Socket.io類庫來實現基于WebSocket的Web實時通信應用。其中,Node.js是一個JavaScript運行平臺,可用于構建響應速度快、容易擴展的網絡程序。但由于Node.js中只提供了大量的低端功能,因此文中將使用Express框架進行Web實時通信應用的開發。Express是一個能夠在Node.js中使用的 Web應用程序開發框架,它提供的一系列強大的特性,能夠讓Web應用程序的開發變得更加方便、快速。
Socket.io是一個開源、跨平臺且支持客戶端和服務器端進行實時雙向通信的WebSocket庫[9-10]。它包括客戶端的JavaScript庫和服務器端的Node.js模塊。它能夠根據不同的客戶端自動在一些實時通信機制中選擇合適的一個來實現Web實時應用。當使用支持HTML5技術的瀏覽器客戶端進行實時通信時,Socket.io會選譯效率最高、消耗服務器資源最少的WebSocket協議來實現實時通信,并在瀏覽器客戶端發生變化時自動選擇其他方式進行通信。因此,Socket.io能有效解決跨平臺的實時通信問題。
3.1在線聊天室的設計
在線聊天室的設計分為客戶端與服務器端兩個部分,其實時通信過程如圖5所示。
3.2在線聊天室的實現
在線聊天室的實現也分為客戶端和服務器端兩個部分。其中客戶端通過使用HTML5、層疊樣式表以及JavaScript來實現用戶名的驗證功能、消息顯示功能和數據傳送功能。服務器端通過JavaScript來實現與客戶端的實時通信功能、廣播功能以及在線用戶列表的管理功能。圖8用戶登錄成功時客戶端與服務器端的交互圖3.2.1客戶端的實現過程
當有新的客戶端用戶加入聊天室時,已在聊天室的用戶將會接收到新用戶加入聊天室的消息且用戶列表會被即時更新以顯示新加入的用戶名。新用戶所在頁面也會被更新以顯示所有在線用戶。當有客戶端用戶在聊天室發送聊天消息時,該消息會被即時廣播給所有在線用戶。當有客戶端用戶退出聊天室時,其他在線用戶將會接收到該用戶退出聊天室的消息且用戶列表會被實時更新以移除下線用戶的用戶名。下線用戶所在的頁面也會進行相應的調整。若用戶在聊天過程中直接退出聊天室頁面,則所有在線用戶都會收到該用戶退出聊天室的消息。客戶端的具體實現流程如圖6所示。
3.2.2服務器端的實現過程
當有多個客戶端用戶存在時,服務器端的主要功能包括管理所有在線用戶的用戶列表以及廣播它們之間的聊天消息。服務器端的具體實現流程如圖7所示。
3.2.3客戶端和服務器端的交互過程
本文主要針對用戶成功登錄進聊天室的情況進行介紹。當用戶成功登錄在線聊天室時,客戶端和服務器端通過觸發事件進行實時交互,其具體交互過程如圖8所示。
4結論
傳統的Web實時通信方案是在長期的應用實踐中發展出來的,其中比較常用的是基于AJAX的長輪詢方式和基于Iframe的流方式。但由于這兩種方案都是采用基于HTTP的通信方式,因此當Web實時應用采用這兩種方案時會產生難以解決的問題。而WebSocket協議的出現適時地提供了一種新的Web實時通信方案,它能夠更加快捷有效地構建出簡單高效的Web實時應用。因此,本文通過分析傳統的Web實時通信方案的不足之處,不僅從理論層面分析了基于WebSocket的Web實時通信方案的優勢,而且還通過使用HTML5、層疊樣式表和JavaScript編寫了具體的應用實例簡單的實現了該方案。隨著WebSocket協議的不斷發展,基于WebSocket的Web實時通信方案將會被廣泛應用。
參考文獻
[1] 蔡驥然,曹海傳.B/S架構下基于OPC與Comet技術的實時監控系統[J].計算機應用,2012,32(z2):214216.
[2] 文愛平,文德民.基于IE瀏覽器的Ajax Comet架構[J].電腦知識與技術,2010,6(17):46464648.
[3] 張家愛,孫飛.Comet技術在Web開發中的研究與應用[J].煤炭技術,2011,30(12):153154.
[4] 陸晨,馮向陽,蘇厚勤.HTML5 WebSocket握手協議的研究與實現[J].計算機應用與軟件,2015,32(1):128131,178.
[5] 李代立,陳榕.WebSocket在Web實時通信領域的研究[J].電腦知識與技術,2010,6(28):79237925,7935.
[6] 周東仿,孟寧.基于WebSocket的網絡設備自發現機制[J].計算機工程與設計,2013,34(2):392396,438.
[7] 溫照松,易仁偉,姚寒冰.基于WebSocket的實時Web應用解決方案[J].電腦知識與技術,2012,8(16):38263828.
[8] 王金龍,宋斌,丁銳.Node.js:一種新的Web應用構建技術[J].現代電子技術,2015,38(6):7073.
[9] 李廣文.基于Socket.io的互動教學即時反饋系統的設計與實現[J].中國現代教育裝備,2012(18):1012.
[10] 黃經贏.基于Socket.io+Node.js+Redis構建高效即時通訊系統[J].現代計算機(專業版),2014(19):6264,69.
家好
這里是有新媒之聲給大家帶來的html5教程
話不多說直接看效果圖
首先我們先創建一個html
我們再建一個存放視頻背景的文件夾video
我們給建好的html寫入基本代碼
然后我們再把作為背景網站的視頻拷貝到video這個文件夾下
我們在給剛剛建好的html寫入視頻代碼
效果如下
并未網頁全屏,而且視頻重復播放
別急現在我們給視頻添加樣式,使它成為名副其實的視頻背景
我們給視頻代碼寫一個class="index-video"
我們在head頭寫上css樣式
我們現在再來看看效果
現在網頁視頻是以全屏播放并且你可以在上面寫上其它的效果,比如說導航欄之類的,因為現在視頻已經成為了我們網頁的背景。
現在我們在head加上跳轉代碼
現在就讓我們回顧一下需要用到那些代碼和注意的要去
body體里
<body>
<!--autoplay 屬性設置或返回音視頻是否在加載后即開始播放-->
<!--true - 指示音視頻在加載完成后隨即播放-->
<!--false - 默認。指示音視頻不應在加載后立即播放。-->
<!--loop:意思是否在網頁里加入背景音樂-->
<!--loop=-1就是表示你的背景音樂的循環次數是無限次,直到你關閉網頁-->
<video class="index-video" src="video/logo.mp4" autoplay="true" loop="-1"></video>
</body>
css樣式
<style type="text/css">
.index-video {
position: fixed; right: 0; bottom: 0;
min-width: 100%; min-height: 100%;
width: auto;
height: auto;
z-index: -100;
}
</style>
跳轉代碼
<!--http-equiv顧名思義,相當于http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個參數的變量值。-->
<!--meat標簽的http-equiv屬性語法格式是:<meta http-equiv="參數" content="為跳轉時間+跳轉網址"content="8;url=http://www.baidu.com">//為八秒后跳轉到百度網站-->
<meta http-equiv="refresh" content="8;url=http://www.baidu.com" />
<meta charset="utf-8">//網站編碼utf-8為通用的國際代碼
<meta http-equiv="refresh" content="8;url=http://www.baidu.com" />
//<!--meat標簽的http-equiv屬性語法格式是:<meta http-equiv="參數" content="為跳轉時間+跳轉網址"content="8;url=http://www.baidu.com">//為八秒后跳轉到百度網站-->
<title>炫酷跳轉演示站</title>//為網頁標題
position 屬性規定元素的定位類型。
position語法:
position : static absolute relative
position參數:
static : 無特殊定位,對象遵循HTML定位規則
absolute : 將對象從文檔流中拖出,使用left,right,top,bottom等屬性進行絕對定位。而其層疊通過css z-index屬性定義。此時對象不具有邊距,但仍有補白和邊框
relative : 對象不可層疊,但將依據left,right,top,bottom等屬性在正常文檔流中偏移位置
position說明:
設置對象的定位方式,可以讓布局層容易位置絕對定位,控制盒子對象更加準確。
min-width: 最小寬度; min-height: 最小高度;
width: auto;//寬度為自動
height: auto;//高度為自動
z-index: -100;
//當你定義的CSS中有position屬性值為absolute、relative或fixed,
用z-index此取值方可生效。
此屬性參數值越大,則被層疊在最上面。
完整代碼
*請認真填寫需求信息,我們會在24小時內與您取得聯系。