目前HTML5和CSS3在各大瀏覽器上的普及率已經比較高,平常開發中也是常用,但對於這二者的知識點一直沒有作一個比較詳細的整理,這裏我總結了HTML5和CSS3新增的特性詳解和使用問題。css
本篇文章預計佔用三十分鐘閱讀,若是你已經熟練於HTML5和CSS3,閱讀本文將帶你回顧其中知識點遺漏補缺。若是你尚未對HTML5和CSS3有全面的瞭解,本文將擴充完善你的知識體系。且面試當中問到HTML5和CSS3你都將能輕鬆拿下。html
若有錯誤,歡迎指出,將在第一時間修改,歡迎提出修改意見和建議html5
HTML5屬於上一代HTML的新迭代語言,設計HTML5最初目的是爲了在移動設備上支持多媒體。css3
例如: video 標籤和 audio 及 canvas 標籤git
聲明必須位於HTML5文檔中的第一行:<!DOCTYPE html>
複製代碼
新特性:web
<font></font>
和 <center></center>
...好處:面試
缺點:正則表達式
語義標籤能夠清楚地向瀏覽器和開發者描述其意義。數據庫
<header></header> // 頁眉
<nav></nav> // 導航
<section></section> // 文檔的節
<article></article> // 文章
<aside></aside> // 側邊欄
<main></main> // 主要內容
<footer></footer> // 頁腳
....
複製代碼
HTML5 規定了一種經過 video 元素來包含視頻的標準方法。canvas
目前vedio支持三種視頻格式:Ogg、MPEG 四、WebM。
標籤屬性有:
☞ 多媒體標籤在網頁中的兼容效果方式:
<video>
<source src="trailer.mp4">
<source src="trailer.ogg">
<source src="trailer.WebM">
Your browser does not support the video tag.
</video>
複製代碼
audio提供了播放音頻的標準。
目前audio提供了三種音頻格式:Ogg、MP三、Wav。
標籤屬性有:
音頻格式兼容處理:
<audio controls="controls">
<source src="song.ogg" type="audio/ogg">
<source src="song.mp3" type="audio/mpeg">
Your browser does not support the audio tag.
</audio>
複製代碼
input標籤經過type能夠對輸入類型進行限制,增長了type類型:
新的form屬性:
新的input屬性:
<input type="text" list="abc"/>
<datalist id="abc">
<option value="123">12312</option>
<option value="123">12312</option>
<option value="123">12312</option>
<option value="123">12312</option>
</datalist>
複製代碼
HTML5 的 canvas 元素使用 JavaScript 在網頁上繪製圖像,canvas自己是沒有繪圖能力的,全部的繪製工做必須在JS內部完成
注意點:
方法:
屬性:
畫布上的X、Y軸用於對繪畫進行定位:
實現一個簡單的三角形:
<!--html-->
<canvas width="600" height="400"></canvas>
<!--js-->
//獲取畫布對象
var canvas = document.querySelector('canvas')
//獲取繪圖上下文
var ctx = canvas.getContext('2d')
<!--落筆-->
ctx.moveTo(100,100);
<!--連線-->
ctx.lineTo(100,200);
<!--連線-->
ctx.lineTo(200,200);
//閉合路徑
ctx.closePath();
<!--描邊-->
ctx.stroke();
複製代碼
線性漸變:
ctx.createLinearGradient(x0,y0,x1,y1)
實現一個簡單的線性漸變:
grd.addColorStop(0,"black"); 設置漸變的開始顏色
grd.addColorStop(0.1,"yellow"); 設置漸變的中間顏色
grd.addColorStop(1,"red"); 設置漸變的結束顏色
ctx.strokeStyle=grd;
ctx.stroke();
複製代碼
addColorStop(offse,color)
中漸變的開始位置和結束位置介於0-1之間,0表明開始,1表明結束。中間能夠設置任何小數
徑向漸變:
ctx.createRadialGradient(x0,y0,r0,x1,y1,r1)
ctx.setLineDash(array)
原理:設置虛線其實就是設置實線與空白部分直接的距離,利用數組描述其中的關係。
例如:
繪製一個虛線:
ctx.moveTo(100, 100);
ctx.lineTo(300, 100);
ctx.setLineDash([2,4]);
ctx.stroke();
複製代碼
☞ ctx.strokeRect(x,y,width,height) : 繪製一個描邊矩形
☞ ctx.fillRect(x,y,width,height): 繪製一個填充矩形
☞ ctx.clearRect(x,y,width,height): 清除矩形區域
ctx.arc(x,y,radius,startradian,endradian[,direct])
☞ document.querySelector("選擇器"): 經過css選擇器選中第一個符合要求的元素
☞ document.querySelectorAll("選擇器"):返回全部符合選擇器的元素數組
☞ Dom.classList.add("類名"):給當前dom元素添加類樣式
☞ Dom.classList.remove("類名"): 給當前dom元素移除類樣式
☞ Dom.classList.contains("類名"):檢測是否包含類樣式
☞ Dom.classList.toggle("active"):切換類樣式(有就刪除,沒有就添加)
☞ 自定義屬性:data-自定義屬性名
Dom.dataset
返回的是一個對象,Dom.dataset.屬性名
或者Dom.dataset[屬性名]
Dom.dataset.自定義屬性名=值
或者 Dom.dataset[自定義屬性名]=值
一個例子:
<!--html-->
<div id="myData" data-source="qwer"></div>
<!--js-->
document.querySelector('# myData').dataset.source === 'qwer' // true
複製代碼
HTML提供了兩種在客戶端存儲數據的新方法:
以前都是由cookie完成的,但cookie不適合大量數據的存儲通常只有4KB的空間大小,每次http請求都會攜帶cookie。
localStorage不一樣點:
方法:
通常用來保存長久數據。
sessionStorage不一樣點:
方法:
通常用於一次性登陸敏感數據的存儲。
cookie、sessionStorage、localStorage共同點:
使用 HTML5,經過建立 cache manifest 文件,能夠輕鬆地建立 web 應用的離線版本。
如需啓用應用程序緩存,請在文檔的 標籤中包含 manifest 屬性:
<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
複製代碼
manifest 文件可分爲三個部分:
一個完整的Manifest文件:
CACHE MANIFEST
/theme.css
/logo.gif
/main.js
NETWORK:
login.asp
FALLBACK:
/html5/ /404.html
複製代碼
注:一旦文件被緩存,則瀏覽器會繼續展現已緩存的版本,即便您修改了服務器上的文件。爲了確保瀏覽器更新緩存,您須要更新 manifest 文件。
JavaScript是單線程語言,全部任務只能在一個線程上完成。隨着電腦能力的加強,尤爲是CPU多核,單線程沒法充分發揮計算機的能力。
Web Worker 的做用,就是爲 JavaScript 創造多線程環境,容許主線程建立 Worker 線程,將一些任務分配給後者運行。
在JavaScript主線程運行的同時,Worker 線程在後臺運行,二者互不干擾。等到 Worker 線程完成計算任務,再把結果返回給主線程。這樣的好處是,一些計算密集型或高延遲的任務,被 Worker 線程負擔了,主線程(一般負責 UI 交互)就會很流暢,不會被阻塞或拖慢。
WebWorker有幾個注意點:
☞ Worker():用來生成Worker線程。
var myWorker = new Worker(jsUrl, options);
var myWorker = new Worker('worker.js', { name : 'myWorker' });
self.name // myWorker
Worker構造函數返回一個Worker線程對象,屬性和方法以下:
Web Worker 有本身的全局對象,不是主線程的window,而是一個專門爲 Worker 定製的全局對象。所以定義在window上面的對象和方法不是所有均可以使用。
Worker 線程有一些本身的全局屬性和方法:
HTML5還新增了多種API擴充Web功能
☞ window.navigator.onLine: 返回瀏覽器的聯網狀態,正常聯網(在線)返回 true,不正常聯網(離線)返回 false。
對應兩個事件:
window
,document
或document.body
的addEventListener方法來進行監聽☞ 使用 FileReader() 構造器去建立一個新的 FileReader。
接口有三個用於讀取文件的方法,返回結果在result中:
☞ FileReader 提供的事件模型:
一個簡易的讀取上傳圖片並渲染操做:
<!--html-->
<input type="file" name="image" >
<!--js-->
const file_input = document.querySelector('input');
file_input.onChange = function() {
<!--獲取上傳圖片-->
const file = this.files[0];
<!--建立新的FileReader-->
const reader = new FileReader();
<!--將文件讀取爲DataUrl格式-->
reader.readAsDataURL(file);
<!--讀取成功回調函數-->
reader.onload = function() {
const img = document.createElement('img');
<!--將讀取結果存入img標籤的src屬性-->
img.src = reader.result;
document.body.appendChild(img);
}
}
複製代碼
window.navigator.geolocation.getCurrentPosition(success, error): 獲取當前用戶位置
第一參數爲獲取成功時的回調函數,返回對象,包含用戶地理信息:
拿到用戶經緯度便可用於一些地圖操做。
第二參數爲獲取用戶地理位置失敗或被拒絕的處理函數。
window.navigator.geolocation.watchPosition(success,error):實時獲取用戶的位置信息
clearWatch()方法中止watchPosition方法。
CSS3是CSS(層疊樣式表)技術的升級版本,於1999年開始制訂,2001年5月23日W3C完成了CSS3的工做草案,主要包括盒子模型、列表模塊、超連接方式、語言模塊、背景和邊框、文字特效、多欄佈局等模塊。
background-origin用來規定背景圖片的定位區域。
☞ padding-box:背景圖像相對內邊距定位(默認值)
☞ border-box:背景圖像相對邊框定位【以邊框左上角爲參照進行位置設置】
☞ content-box:背景圖像相對內容區域定位【之內容區域左上角爲參照進行位置設置
background-clip規定背景的繪製區域。
☞ border-box:背景被裁切到邊框盒子位置 【將背景圖片在整個容器中顯示】
☞ padding-box:背景被裁切到內邊距區域【將背景圖片在內邊距區域(包含內容區域)顯示】
☞ content-box:背景被裁切到內容區域【將背景圖片在內容區域顯示】(默認值)
background-size規定背景圖片的尺寸。
☞ cover:背景圖片按照原來的縮放比,鋪滿整個容器
☞ contain:背景圖片按照原來的縮放比,完整地顯示到容器中(不肯定是否鋪滿屏幕)
box-shadow: x y blur spread color inset
複製代碼
向方框添加一個或多個陰影。
border-radius:設置全部四個border-*-radius
屬性的簡寫屬性,想邊框添加圓角。
border-image向邊框添加圖片。
border-image 屬性是一個簡寫屬性,用於設置如下屬性:
☞ text-shadow:x,y,blur,color 設置文本陰影
☞ word-wrap:容許長單詞或 URL 地址換行到下一行。。normal|break-word
☞ text-overflow:規定當文本溢出包含元素時發生的事情。clip|ellipsis|string
實現一個單行文本省略:
.text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
複製代碼
多行文本省略:
.text {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
複製代碼
☞ 屬性選擇器:
[target=_blank]
,選擇 target="_blank" 的全部元素。例如:爲 target="_blank"
的 <a>
元素設置樣式:
a[target=_blank]
{
background-color:yellow;
}
複製代碼
☞ 結構僞類選擇器:
☞ 結構僞元素選擇器:
僞類和僞元素:
css引入僞類和僞元素概念是爲了格式化文檔樹之外的信息。
僞類用於當已有元素處於的某個狀態時,爲其添加對應的樣式,這個狀態是根據用戶行爲而動態變化的。
僞元素用於建立一些不在文檔樹中的元素,併爲其添加樣式,好比說,咱們能夠經過::before
來在一個元素前增長一些文本。
二者的使用區別:
:
,僞元素使用雙冒號::
.box:first-child:hover { color: #000;} //使用僞類
.box::first-letter { color: #000;} //使用僞元素
.box::first-letter:hover { color: #000;} //錯誤寫法
複製代碼
☞ 線性漸變:
background-image: linear-gradient(
to right, // 漸變方向 to + right | top | bottom | left
red, // 開始漸變的顏色
blue // 結束漸變的顏色
);
複製代碼
☞ 徑向漸變:
background-image: radial-gradient(
shape, // 肯定圓的類型,ellipse(默認:橢圓)|circle(圓的經向漸變)
start-color,
...,
last-color,
);
複製代碼
新的轉換屬性transform:向元素應用 2D 或 3D 轉換
☞ 位移:
div {
transform: translate(50px,100px);
}
複製代碼
☞ 旋轉:rotate(angle)
div {
transform: rotate(60deg); // 備註:取值爲角度
}
複製代碼
☞ 縮放:
備註: 取值爲倍數關係,縮小大於0小於1,放大設置大於1
☞ 傾斜:
☞ transform-style: preserve-3d;:將平面圖形轉換爲立體圖形
☞ 位移:
tranform: translate3d(x,y,z);
transform: translateX() translateY() translateZ();
☞ 旋轉:transform: rotateX(60deg) rotateY(60deg) rotateZ(60deg);
☞ 縮放:
tranform: scale3d(x,y,z);
transform: scaleX(0.5) scaleY(1) scaleZ(1);
☞ 設置哪些屬性要參與到過渡動畫效果中:transition-property: all;
☞ 設置過渡執行時間:transition-duration: 1s;
☞ 設置過渡的速度類型:transition-timing-function:
☞ 設置過渡延時執行時間:transition-delay: 1s;
☞ 簡寫模式:transition: property duration timing-function delay;
☞ 定義動畫集:
@keyframes rotate {
/* 定義開始狀態 0%*/
from {
transform: rotateZ(0deg);
}
/* 結束狀態 100%*/
to {
transform: rotateZ(360deg);
}
}
複製代碼
注意:若是設置動畫集使用的是百分比,那麼記住百分比是相對整個動畫執行時間的。
☞ 調用動畫集:
animation簡寫模式:animation: name duration timing-function delay iteration-count direction;
傳統的佈局方式對於特殊的佈局很是不方便,好比垂直居中。Flex是2009年W3C提出的新方案--Flex佈局,能夠簡便、完整、響應式地實現各類頁面佈局。
☞ 設置父元素爲伸縮盒子【直接父元素】
display: flex;
複製代碼
注:設爲 Flex 佈局之後,子元素的float、clear和vertical-align屬性將失效。
用於容器上的屬性:
☞ 設置伸縮盒子主軸方向
flex-direction: row; // 默認值,主軸爲水平方向,起點在左側
flex-direction: row-reverse; // 主軸爲水平方向,起點在右側
flex-direction: column; // 主軸爲垂直方向,起點在上沿
flex-direction: column-reverse; // 主軸爲垂直方向,起點在下沿
複製代碼
☞ 設置元素是否換行顯示
在伸縮盒子中全部的元素默認都會在一條線上顯示
若是但願換行:
flex-wrap: wrap | nowrap | wrap-reverse;
複製代碼
☞ 設置元素在主軸的對齊方式
justify-content: flex-start; // 左對齊
justify-content: flex-end; // 右對齊
justify-content: center; // 居中
justify-content: space-between; // 兩端對齊,項目之間的間隔相等
justify-content: space-around; // 每一個項目兩側之間的間隔相等
複製代碼
☞ 設置元素在側軸的對齊方式
align-items: flex-start; // 交叉軸的起點對齊。
align-items: flex-end; // 交叉軸的終點對齊。
align-items: center; // 交叉軸的中點對齊。
align-items: stretch; //(默認值)若是項目未設置高度或設爲auto,將佔滿整個容器的高度。
align-items: baseline; // 項目的第一行文字的基線對齊。
複製代碼
☞ 設置元素換行後的對齊方式,定義了多根軸線的對齊方式。
align-content: flex-start;
align-content: flex-end;
align-content: center;
align-content: space-around;
align-content: space-between;
/* 換行後的默認值 */
align-content: stretch;
複製代碼
flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值爲row nowrap。
.box {
flex-flow: <flex-direction> || <flex-wrap>;
}
複製代碼
定義項目的排列順序。數值越小,排列越靠前,默認爲0。
.item {
order: <integer>;
}
複製代碼
定義項目的放大比例,默認爲0,即若是存在剩餘空間,也不放大。
定義了項目的縮小比例,默認爲1,即若是空間不足,該項目將縮小。
flex-basis屬性定義了在分配多餘空間以前,項目佔據的主軸空間。瀏覽器根據這個屬性,計算主軸是否有多餘空間。
它的默認值爲auto,即項目的原本大小。
.item {
flex-basis: <length> | auto; /* default auto */
}
複製代碼
flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值爲0 1 auto。後兩個屬性可選。
.item {
flex: none | flex-grow flex-shrink flex-basis
}
複製代碼
align-self屬性容許單個項目有與其餘項目不同的對齊方式,可覆蓋align-items屬性。
默認值爲auto,表示繼承父元素的align-items屬性,若是沒有父元素,則等同於stretch。
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
複製代碼