好好學習,天天向上
本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐原文連結:https://blog.csdn.net/weixin_43461520/article/details/113201713
HTML5新增標籤
HTML5針對以前的不足,新增了一些新的標籤、表單以及表單屬性等。
語義化標籤
之前在做佈局的使用,使用了大量的div,這些div都是沒有語義的,我們不能很輕易的就判斷出某個div大致是什麼內容,所以在HTML5中新增了語義化標籤來彌補這個缺陷,現在我們可以根據標籤名去推斷出其大致內容,方便程式碼的閱讀,而且使用語義化標籤也可以提高被搜尋引擎檢索的概率。
<header>
:頭部標籤
<nav>
:導航標籤
<article>
:內容標籤
<section>
:定義文件某個區域
<aside>
:側邊欄標籤
<footer>
:尾部標籤
多媒體標籤
HTML5原生支援音視訊檔案的播放,其中音訊標籤和視訊標籤的使用方式基本一致 。
<autdio>
:音訊
<audio>
標籤支援三種音訊格式,分別是MP3、Wav以及Ogg,其中MP3格式所有的瀏覽器都支援。
語法:
<audio src="檔案地址" controls="controls"></audio>
<audio>
標籤常見屬性?
屬性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 表示音訊在就緒後馬上播放 |
controls | controls | 表示向使用者顯示控制元件,比如播放按鈕 |
loop | loop | 迴圈播放,即每當音訊結束時重新開始播放 |
src | url | 要播放的音訊的url |
<video>
:視訊
<video>
標籤支援三種視訊格式,分別是MP4、WebM以及Ogg,其中MP4格式所有的瀏覽器都支援。
語法:
<video src="檔案地址" controls="controls"></video>
其中<video>
標籤有很多屬性,比較常見的有?
屬性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 視訊就緒自動播放(谷歌瀏覽器不會自動播放,需要新增muted屬性來自動播放) |
controls | controls | 向使用者顯示播放控制元件 |
width | pixels(畫素) | 設定播放器寬度 |
height | pixels(畫素) | 設定播放器高度 |
loop | loop | 插放完是否繼續播放該視訊,迴圈播放 |
preload | auto(預先載入視訊) none(不載入視訊) |
規定是否預載入視訊 (如果有了 autoplay 就忽略該屬性) |
src | url | 視訊ur地址 |
poster | 圖片的url | 載入等待的畫面圖片 |
muted | muted | 靜音插放 |
input表單
在HTML5中,增加了一些新的input型別,使其語義化更加明顯。
屬性值 | 說明 |
---|---|
type="email" | 限制使用者輸入必須為Email型別 |
type="url" | 限制使用者輸入必須為URL型別 |
type="date" | 限制使用者輸入必須為日期型別 |
type="time" | 限制使用者輸入必須為時間型別 |
type="month" | 限制使用者輸入必須為月型別 |
type="week" | 限制使用者輸入必須為周型別 |
type="number" | 限制使用者輸入必須為數字型別 |
type="tel" | 手機號碼 |
type="search" | 搜尋框 |
type="color" | 生成一個顏色選擇表單 |
HTML5中不僅新增了一些input型別,還新增了一些表單屬性?
屬性 | 值 | 說明 |
---|---|---|
required | required | 表單擁有該屬性表示其內容不能為空,必填 |
placeholder | 提示文字 | 表單的提示資訊,存在預設值將不顯示 |
autofocus | autofocus | 自動聚焦屬性,頁面載入完成自動聚焦到指定表單 |
autocomplete | off / on | 當使用者在欄位開始鍵入時,瀏覽器基於之前鍵入過的值,應該顯示出在欄位中填寫的選項。預設已經開啟,如autocomplete="on",關閉autocomplete="off,需要放在表單內,同時加上name屬性,並且提交成功過 |
multiple | multiple | 可以多選檔案提交 |
CSS3新增選擇器
屬性選擇器
屬性選擇器可以在不用藉助於類或者id選擇器的情況下直接根據元素特定屬性來選擇元素,它的權重為10。
E[att]
:選擇具有att屬性的E元素
<!-- 將具有value屬性的按鈕1中文字顏色修改為紅色,按鈕2因為不具有value屬性,所以文字顏色沒有改變 -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
input[value] {
color: red;
}
</style>
</head>
<body>
<input type="button" value="按鈕1">
<input type="button">
</body>
E[att="val"]
:選擇具有att屬性且屬性值等於val的E元素
<!-- 將value屬性值為 “按鈕2” 的button的文字顏色修改為藍色 -->
<head>
<style>
input[value="按鈕2"] {
color: blue;
}
</style>
</head>
<body>
<input type="button" value="按鈕1">
<input type="button" value="按鈕2">
</body>
E[att^="val"]
:匹配具有att屬性且值以val開頭的E元素
E[att$="val"]
:匹配具有att屬性且值以val結尾的E元素
E[att*="val"]
:匹配具有att屬性且值中含有val的E元素
結構偽類選擇器
結構偽類選擇器主要根據文件結構來選擇元素,常用於根據父級元素選擇裡面的子元素。
E: first-child
:匹配父元素中的第一個子元素E
E: last-child
:匹配父元素中最後一個E元素
E: nth-child(n)
:匹配父元素中的第n個子元素E,n也可以是關鍵字even偶數、odd奇數,如果直接寫字母n則表示選擇所有的子元素
<head>
<style>
ul li:first-child {
background-color: skyblue;
}
ul li:last-child {
background-color: aquamarine;
}
ul li:nth-child(2) {
background-color: blueviolet;
}
</style>
</head>
<body>
<ul>
<li>歡迎關注</li>
<li>微信公眾號:</li>
<li>Robod</li>
</ul>
</body>
E: first-of-type
:指定型別E的第一個
E: last-of-type
:指定型別E的最後
E: nth-of-type(n)
:指定型別E的第n個
這三個和上面三個使用起來類似,不過還是有一點區別的,nth-child是對父元素裡面所有子元素排序選擇(序號是固定的)先找到第n個孩子,然後看看是否和E匹配;而nth-of-type則是對父元素裡面指定子元素進行排序選擇,先去匹配E,然後再根據E找第n個子元素。
<head>
<style>
ul li:nth-child(1) {
/* 先對ul裡的所有子元素排序,找到序號為1的元素,發現是p標籤而不是li,所以樣式不生效 */
background-color: skyblue;
}
div li:nth-of-type(1) {
/* 先匹配對應的li元素,對li元素進行排序,排序後選擇第一個li */
background-color: skyblue;
}
</style>
</head>
<body>
<ul>
<p>微信公眾號:Robod</p> <!-- 序號是1 -->
<li>歡迎關注</li> <!-- 序號是2 -->
<li>微信公眾號:</li>
<li>Robod</li>
</ul>
<div>
<p>p</p>
<li>li1</li> <!-- 序號是1 -->
<li>li2</li> <!-- 序號是2 -->
</div>
</body>
偽元素選擇器
有的時候我們只需要一個簡單的標籤,如果用HTML做的話就會使程式碼結構變得複雜,這時候就可以用偽元素選擇器,它可以幫助我們利用CSS建立新標籤元素,從而簡化HTML結構。偽元素選擇器有兩個,分別是::before
(在元素內部的前面插入內容)和::after
(在元素內部的後面新增內容),需要注意的是它們建立的元素是行內元素,而且在文件樹裡面是找不到的,這兩個選擇器必須要有content屬性(可以沒有值),偽元素選擇器的權重是1,
<!--語法:
element::before{}
-->
<head>
<style>
div {
position: relative;
width: 300px;
height: 200px;
background-color: aquamarine;
}
div::before {
content: '微信公眾號';
}
div::after {
position: absolute;
font-size: 30px;
content: "Robod";
right: 10px;
}
</style>
</head>
<body>
<div>
:
</div>
</body>
CSS3新特性
CSS3盒模型
之前我們在定義盒子大小的時候,指定了width屬性,可是盒子實際的寬度並不是width,padding和border都會將盒子撐大,也就是實際的盒子寬度是width+padding+border,而現在可以用box-sizing
來指定盒模型,box-sizing屬性有以下兩個值。
content-box
:這個是預設值,盒子的寬度是width+padding+border
border-box
:盒子的大小為width屬性的值
<head>
<style>
.box1 {
width: 400px;
height: 100px;
border: 20px solid red;
background-color: aqua;
padding: 10px;
box-sizing: content-box;
}
.box2 {
width: 400px;
height: 100px;
border: 20px solid green;
background-color: blanchedalmond;
padding: 10px;
box-sizing: border-box;
}
</style>
</head>
<body>
<div class="box1">請小夥伴們給我的文章來個贊!</div>
<div class="box2">歡迎關注微信公眾號:Robod</div>
</body>
CSS3濾鏡filter
filter屬性將模糊或顏色偏移等圖形效果應用於元素,通常用於調整影像,背景和邊框的渲染。常用的幾個函式如下:
filter: blur(5px)
該函式用來對圖片進行模糊處理,數值越大圖片越模糊
filter: contrast(200%)
調整影像的對比度,0%會全黑,100%影像不變,超過100%更低的對比度
filter: grayscale(80%)
將影像轉換為灰度影像,100%完全轉為灰度影像,0%影像無變化
filter: hue-rotate(90deg)
給影像應用色相旋轉還有其它的一些可以參考https://developer.mozilla.org/en-US/docs/Web/CSS/filter
calc()函式
calc()函式可以在宣告CSS屬性值時執行一些計算,例如:
width: calc(100% - 30px); <!-- 表示比父盒子小30畫素 -->
CSS3過渡
過渡動畫是從一個狀態漸漸的過渡到另外一個狀態,通常和:hover一起搭配使用。
/*語法:*/
transition:要過渡的屬性 花費時間 運動曲線 何時開始
/*引數說明 */
1、屬性:想要變化的css屬性,寬度高度背景顏色內外邊距都可以,如果想要所有的屬性都變化過渡,寫一個 all 即可
2、花費時間:單位是秒(必須寫單位)比如0.5s
3、運動曲線:預設是ease(逐漸慢下來,可以省略),還可以是linear(勻速),ease-in(加速),ease-out(減速),ease-in-out(先加速後減速)
4、何時開始:單位是秒(必須寫單位),可以設定延遲觸發時間預設是0s(可以省略)
<head>
<style>
div {
width: 50px;
height: 50px;
background-color: aqua;
/* 如果要寫多個屬性,用逗號隔開即可 */
/* transition: width 1s ease-in-out .5s,height 1s ease-in-out .5s; */
/* 如果所有的屬性都要過渡,寫 all 即可 */
transition: all 1s ease-in-out .5s;
}
div:hover {
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div>微信公眾號:Robod</div>
</body>
2D轉換
移動translation
2D移動是2D轉換裡面的一種功能,可以改變元素在頁面中的位置,類似定位。
/*第一個引數是x方向移動的距離,第二個引數是y方向移動的距離,可以是百分比,值可以為0但不能沒有*/
transform: translate(20px,0);
/*也可以分開寫,?的一行等同於?兩行*/
transfrom: translateX(20px);
transform: translateY(30px);
translate的優點就是不會影響到其它元素的位置,如果單位不是px而是百分比的話,表示的就是自身元素的百分比,這種移動方式對行內標籤是沒有效果的。
<head>
<style>
div:first-child {
width: 100px;
height: 100px;
background-color: red;
transform: translate(50%,20px);
}
div:last-child {
width: 100px;
height: 100px;
background-color: aquamarine;
}
</style>
</head>
<body>
<div></div>
<div></div>
</body>
旋轉rotate
2D旋轉指的是讓元素在二維平面內順時針或者逆時針旋轉。
<!-- rotate中度數的單位是deg,順時針是正數,逆時針是負數 -->
<!-- transfrom: rotate(度數); -->
<head>
<style>
img {
transition: all 1s;
}
img:hover {
transform: rotate(360deg);
}
</style>
</head>
<body>
<img src="./images/robod.png" alt="">
</body>
現在是以元素的中心為旋轉點進行旋轉,這也是預設的旋轉點,也可以通過transfrom-origin
屬性更改旋轉點。
<!-- 兩個引數分別是x方向和y方向的位置,可以是畫素也可以是方位名詞 -->
<!-- transfrom-origin: x y; -->
<head>
<style>
img {
transform-origin: 50px bottom;
transition: all 1s;
}
img:hover {
transform: rotate(90deg);
}
</style>
</head>
<body>
<img src="./images/robod.png" alt="">
</body>
縮放scale
縮放的意思就是可以放大和縮小,可以用scale
來設定縮放,這種方式相較於直接修改寬高而言優勢就是不影響其它盒子,和rotate一樣,也可以通過transform-origin屬性來修改縮放中心。
<!-- 第一個參數列示寬縮放為原來的m倍,第二個參數列示高縮放為原來的n倍,如果只填一個引數代表寬高同時縮放為原來的x倍
transform: scale(m,n);
transform: scale(x); -->
<head>
<style>
img {
transition: all 1s;
transform-origin: right bottom;
}
img:hover {
transform: scale(.5);
}
</style>
</head>
<body>
<img src="./images/robod.png" alt="">
<p>微信公眾號:Robod</p>
</body>
上述的幾個轉換方式是可以同時使用的,中間用空格隔開即可
transform: translate() rotate() scale()...
需要注意的是,書寫順序會影響轉換的效果,比如先旋轉會改變座標軸方向,所以在同時有位移和其它屬性的時候,位移要放在最前面。
CSS3 動畫
動畫(animation)是CSS3中具有顛覆性的特徵之一,可以通過設定多個節點來精確控制一個或一組動畫,常用來實現複雜的動畫效果,相比較過渡,動畫可以實現更多變化,更多控制,連續自動播放等效果。
動畫的基本使用
-
動畫序列
在學習動畫之前,要先明確動畫序列這個概念?
- 0%是動畫的開始,100%是動畫的結束(0%~100%代表不同階段的動畫,都可以設定)。這樣的規則就是動畫序列。
- 在
@keyframes
中規定某項CSS樣式,就能建立由當前樣式逐漸改為新樣式的動畫效果。 - 動畫是使元素從一種樣式逐漸變化為另一種樣式的效果。您可以改變任意多的樣式任意多的次數。
- 請用百分比來規定變化發生的時間,或用關鍵詞 "from" 和 "to" ,等同於0%和100%。
-
1、使用@keyframes定義動畫
@keyframes 自定義的動畫名稱 { 0% { xxxxxx; } 100% { xxxxxxx; } }
-
2、元素使用動畫
給需要使用動畫的元素新增
animation-name
(呼叫動畫)以及animation-duration
(持續時間)這兩個屬性。<head> <style> @keyframes robod_animation { 0% { transform: rotate(0) scale(1); } to { transform: rotate(90deg) scale(0.5); } } img { animation-name: robod_animation; animation-duration: 2s; } </style> </head> <body> <img src="./images/robod.png" alt=""> </body>
常用動畫屬性
屬性 | 描述 |
---|---|
@keyframes | 規定動畫 |
animation | 所有動畫屬性的簡寫屬性,除了animation-play-state屬性 |
animation-name | 規定@keyframes動畫的名稱(必須) |
animation-duration | 規定動畫完成一個週期所花費的秒或毫秒,預設是0(必須) |
animation-timing-funtion | 規定動畫的速度曲線,預設是 “ease” |
animation-delay | 規定動畫何時開始,預設是0 |
animation-iteration-count | 規定動畫被播放的次數,預設是1,還有infinite(無限迴圈) |
animation-direction | 規定動畫是否在下一週期逆向播放,預設是“normal”,alternate逆播放 |
animation-play-state | 規定動畫是否正在執行或暫停,預設是 “running”,還有 “paused” |
animation-fill-mode | 規定動畫結束後狀態,保持forwards,回到起始backwards |
動畫屬性也可以採用簡寫的方式:
animation: 動畫名稱 持續時間 運動曲線 何時開始 播放次數 是否反方向 動畫起始或者結束的狀態;
需要注意的是,簡寫屬性裡面不包含animation-play-state
速度曲線
上面提到了一個animation-timing-funtion屬性用來設定動畫的速度曲線,該屬性的值一共有6個:
值 | 描述 |
---|---|
linear | 動畫從頭到尾的速度是相同的,勻速 |
ease | 預設,動畫以低速開始,然後加快,在結束前變慢 |
ease-in | 動畫以低速開始 |
ease-out | 動畫以低速結束 |
ease-in-out | 動畫以低速開始和結束 |
steps() | 指定了時間函式中的間隔數量(步長) |
前面幾個都很好理解,這個步長的意思就是整個操作劃分為多少步,然後一步一步執行,類似於那種一格一格的進度條的感覺,可以做一些有意思的動畫。
<head>
<style>
@keyframes steeeep {
from {
width: 0;
}
to {
width: 160px;
}
}
div {
width: 160px;
overflow: hidden;
white-space: nowrap;
font-size: 10px;
background-color: aqua;
animation: steeeep 2s steps(15) backwards;
}
</style>
</head>
<body>
<div>
歡迎關注微信公眾號:Robod
</div>
</body>
3D轉換
透視 perspective
在瞭解3D轉換之前首要要明確一個概念——“透視”,電腦螢幕是二維的,我們沒辦法直接看到立體的東西,如果要想看到物體在Z軸上的變化,就得使用透視,透視又稱視距,其實就是3D的東西投影在2D平面的效果,下圖中的d就是透視,當物體不變時,透視越大,在螢幕上看到的就越小,透視越小,在螢幕上看到的就越大,所謂近大遠小。透視的單位是px。
3D移動 translate3d
3D移動和2D移動類似,只不過是多了個Z軸。
/*這三個引數分別代表在xyz軸要移動的距離,z軸一般以px為單位*/
transform: translate3d(x , y , z);
/*也可以分開寫*/
translate: translateX(x);
translate: translateY(y);
translate: translateZ(z);
首先給需要移動的元素的父元素新增透視,在透視固定的情況下,改變translateZ的大小,就會改變元素在螢幕上的大小。
<head>
<style>
body {
perspective: 500px;
}
div {
width: 200px;
height: 200px;
background-color: aquamarine;
margin: 0 auto;
transform: translateZ(100px);
}
</style>
</head>
<body>
<div></div>
</body>
3D旋轉 rotate3d
3D旋轉指可以讓元素在三維平面內沿著x軸,y軸,z軸或者自定義軸進行旋轉。
transform: rotateX(45deg); /*沿x軸正方向旋轉45度*/
transform: rotateY(45deg); /*沿y軸正方向旋轉45度*/
transform: rotateZ(45deg); /*沿z軸正方向旋轉45度*/
transform: rotate3d(1,1,0,45deg); /*沿著x軸與y軸的對角線旋轉45度*/
那麼哪一個方向是旋轉正方向呢?這裡有一個技巧,就是左手準則,左手大拇指指向某一個軸的正方向,手指彎曲的方向就是旋轉的正方向,反之就是反方向。
<head>
<style>
body {
perspective: 500px;
}
img {
transition: all 1s;
}
img:hover:first-child {
transform: rotateX(45deg);
}
img:hover:nth-child(2) {
transform: rotateY(45deg);
}
img:hover:nth-child(3) {
transform: rotateZ(45deg);
}
img:hover:last-child {
transform: rotate3d(1,1,0,45deg);
}
</style>
</head>
<body>
<img src="./images/robod.png" alt="">
<img src="./images/robod.png" alt="">
<img src="./images/robod.png" alt="">
<img src="./images/robod.png" alt="">
</body>
3D呈現 transform-style
3D呈現就是用來控制子元素是否開啟三維立體環境,預設是transform-style: flat(不開啟),如果想開啟,可以修改為transform-style: preserve-3d
。注意:程式碼是寫給父元素的,但影響的子元素。
<head>
<style>
body {
perspective: 500px;
}
.box1 {
width: 200px;
height: 200px;
transition: all 2s;
transform-style: preserve-3d; /*和transform-style: flat*/
}
.box2 {
width: 100%;
height: 100%;
background-color: aqua;
transform: rotateX(45deg);
}
.box1:hover {
transform: rotateY(45deg);
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
上面程式碼中的例子,先看一下transform-style: flat的效果:
當滑鼠移到上面的時候,先是由本來的繞x軸旋轉45度的狀態轉換為普通的平面圖,再由平面圖繞y軸進行旋轉,這顯然不是我們想要的效果。
再來看看transform-style: preserve-3d的效果?
現在就是三維的轉換效果了,直接由繞x軸旋轉45度的狀態直接再繞y軸旋轉45度。
瀏覽器私有字首
瀏覽器私有字首是為了相容老版本的寫法,比較新的版本的瀏覽器無須忝加。
-moz-
:代表 firefox瀏覽器的私有屬性-ms-
:代表ie瀏覽器私有屬性-webkit-
:代表 safari、chrome私有屬性-o-
:代表Opera私有屬性
比如圓角屬性就可以這樣寫?
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
總結
好了,這就是我這段時間學習HTML5和CSS3所總結出來的一些知識點,一方面是怕我自己以後忘了可以拿來複習使用,另一方面也是希望可以幫助到一起學習的小夥伴們!
碼字不易,可以的話,給我來個
點贊
,收藏
,關注
如果你喜歡我的文章,歡迎關注微信公眾號 『 R o b o d 』
本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐原文連結:https://blog.csdn.net/weixin_43461520/article/details/113201713