HTML5與CSS3知識點總結

Robod丶發表於2021-01-26

好好學習,天天向上


本文已收錄至我的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屬性且屬性值等於valE元素

<!-- 將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屬性且值中含有valE元素

結構偽類選擇器

結構偽類選擇器主要根據文件結構來選擇元素,常用於根據父級元素選擇裡面的子元素

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

⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐