1. 程式人生 > 其它 >2021年3月-第02階段-前端基礎-HTML+CSS階段-Day02

2021年3月-第02階段-前端基礎-HTML+CSS階段-Day02

前端基礎-HTML+CSS階段-Day02

HTML5 第二天

一、rotate

2d旋轉指的是讓元素在2維平面內順時針旋轉或者逆時針旋轉

使用步驟:

  1. 給元素新增轉換屬性 transform

  2. 屬性值為 rotate(角度)transform:rotate(30deg) 順時針方向旋轉30度

div{
      transform: rotate(0deg);
}
二、三角
  • 程式碼演示
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            position: relative;
            width: 249px;
            height: 35px;
            border: 1px solid #000;
        }
        
        div::after {
            content: "";
            position: absolute;
            top: 8px;
            right: 15px;
            width: 10px;
            height: 10px;
            border-right: 1px solid #000;
            border-bottom: 1px solid #000;
            transform: rotate(45deg);
            transition: all 0.2s;
        }
        /* 滑鼠經過div  裡面的三角旋轉 */
        
        div:hover::after {
            transform: rotate(225deg);
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
二、設定元素旋轉中心點(transform-origin)
  1. transform-origin 基礎語法
transform-origin: x y;
  1. 重要知識點
  • 注意後面的引數 x 和 y 用空格隔開

  • x y 預設旋轉的中心點是元素的中心 (50% 50%),等價於 center center

  • 還可以給 x y 設定畫素或者方位名詞(topbottomleftrightcenter)

三、旋轉中心案例
  • 程式碼演示
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
            transition: all 1s;
            /* 1.可以跟方位名詞 */
            /* transform-origin: left bottom; */
            /* 2. 預設的是 50%  50%  等價於 center  center */
            /* 3. 可以是px 畫素 */
            transform-origin: 50px 50px;
        }
        
        div:hover {
            transform: rotate(360deg);
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
四、2D 轉換之 scale
  1. scale 的作用
  • 用來控制元素的放大與縮小
  1. 語法
transform: scale(x, y)
  1. 知識要點
  • 注意,x 與 y 之間使用逗號進行分隔

  • transform: scale(1, 1): 寬高都放大一倍,相當於沒有放大

  • transform: scale(2, 2): 寬和高都放大了二倍

  • transform: scale(2): 如果只寫了一個引數,第二個引數就和第一個引數一致

  • transform:scale(0.5, 0.5): 縮小

  • scale 最大的優勢:可以設定轉換中心點縮放,預設以中心點縮放,而且不影響其他盒子

  1. 程式碼演示
   div:hover {
	   /* 注意,數字是倍數的含義,所以不需要加單位 */
	   /* transform: scale(2, 2) */
   
	   /* 實現等比縮放,同時修改寬與高 */
	   /* transform: scale(2) */
   
	   /* 小於 1 就等於縮放*/
	   transform: scale(0.5, 0.5)
   }
五、圖片放大案例
  • 程式碼演示
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            overflow: hidden;
            float: left;
            margin: 10px;
        }
        
        div img {
            transition: all .4s;
        }
        
        div img:hover {
            transform: scale(1.1);
        }
    </style>
</head>

<body>
    <div>
        <a href="#"><img src="media/scale.jpg" alt=""></a>
    </div>
    <div>
        <a href="#"><img src="media/scale.jpg" alt=""></a>
    </div>
    <div>
        <a href="#"><img src="media/scale.jpg" alt=""></a>
    </div>
</body>

</html>
六、分頁按鈕案例
  • 程式碼演示
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        li {
            float: left;
            width: 30px;
            height: 30px;
            border: 1px solid pink;
            margin: 10px;
            text-align: center;
            line-height: 30px;
            list-style: none;
            border-radius: 50%;
            cursor: pointer;
            transition: all .4s;
        }
        
        li:hover {
            transform: scale(1.2);
        }
    </style>
</head>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
    </ul>
</body>

</html>
七、 2D 轉換綜合寫法以及順序問題
  1. 知識要點
  • 同時使用多個轉換,其格式為 transform: translate() rotate() scale()

  • 順序會影響到轉換的效果(先旋轉會改變座標軸方向)

  • 但我們同時有位置或者其他屬性的時候,要將位移放到最前面

  1. 程式碼演示
div:hover {
  transform: translate(200px, 0) rotate(360deg) scale(1.2)
}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            transition: all .5s;
        }
        
        div:hover {
            /* transform: rotate(180deg) translate(150px, 50px); */
            /* 我們同時有位移和其他屬性,我們需要把位移放到最前面 */
            transform: translate(150px, 50px) rotate(180deg) scale(1.2);
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
八、 動畫(animation)
  1. 什麼是動畫
  • 動畫是 CSS3 中最具顛覆性的特徵之一,可通過設定多個節點來精確的控制一個或者一組動畫,從而實現
    複雜的動畫效果
  1. 動畫的基本使用
  • 先定義動畫

  • 在呼叫定義好的動畫

  1. 語法格式(定義動畫)
@keyframes 動畫名稱 {
    0% {
        width: 100px;
    }
    100% {
        width: 200px
    }
}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        /* 我們想頁面一開啟,一個盒子就從左邊走到右邊 */
        /* 1. 定義動畫 */
        
        @keyframes move {
            /* 開始狀態 */
            0% {
                transform: translateX(0px);
            }
            /* 結束狀態 */
            100% {
                transform: translateX(1000px);
            }
        }
        
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* 2. 呼叫動畫 */
            /* 動畫名稱 */
            animation-name: move;
            /* 持續時間 */
            animation-duration: 2s;
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
  1. 語法格式(使用動畫)
div {
    /* 呼叫動畫 */
    animation-name: 動畫名稱;
    /* 持續時間 */
    animation-duration: 持續時間;
}
  1. 動畫序列
  • 0% 是動畫的開始,100 % 是動畫的完成,這樣的規則就是動畫序列

  • 在 @keyframs 中規定某項 CSS 樣式,就由建立當前樣式逐漸改為新樣式的動畫效果

  • 動畫是使元素從一個樣式逐漸變化為另一個樣式的效果,可以改變任意多的樣式任意多的次數

  • 用百分比來規定變化發生的時間,或用 fromto,等同於 0% 和 100%

  1. 程式碼演示
<style>
    div {
      width: 100px;
      height: 100px;
      background-color: aquamarine;
      animation-name: move;
      animation-duration: 0.5s;
    }

    @keyframes move{
      0% {
        transform: translate(0px)
      }
      100% {
        transform: translate(500px, 0)
      }
    }
  </style>
九、動畫序列
  • 程式碼演示
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        /* from to 等價於  0% 和  100% */
        /* @keyframes move {
            from {
                transform: translate(0, 0);
            }
            to {
                transform: translate(1000px, 0);
            }
        } */
        /* 動畫序列 */
        /* 1. 可以做多個狀態的變化 keyframe 關鍵幀 */
        /* 2. 裡面的百分比要是整數 */
        /* 3. 裡面的百分比就是 總的時間(我們這個案例10s)的劃分 25% * 10  =  2.5s */
        
        @keyframes move {
            0% {
                transform: translate(0, 0);
            }
            25% {
                transform: translate(1000px, 0)
            }
            50% {
                transform: translate(1000px, 500px);
            }
            75% {
                transform: translate(0, 500px);
            }
            100% {
                transform: translate(0, 0);
            }
        }
        
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
            animation-name: move;
            animation-duration: 10s;
        }
    </style>
</head>

<body>
    <div>

    </div>
</body>

</html>
十、動畫常見屬性
  1. 常見的屬性
  1. 程式碼演示
div {
  width: 100px;
  height: 100px;
  background-color: aquamarine;
  /* 動畫名稱 */
  animation-name: move;
  /* 動畫花費時長 */
  animation-duration: 2s;
  /* 動畫速度曲線 */
  animation-timing-function: ease-in-out;
  /* 動畫等待多長時間執行 */
  animation-delay: 2s;
  /* 規定動畫播放次數 infinite: 無限迴圈 */
  animation-iteration-count: infinite;
  /* 是否逆行播放 */
  animation-direction: alternate;
  /* 動畫結束之後的狀態 */
  animation-fill-mode: forwards;
}

div:hover {
  /* 規定動畫是否暫停或者播放 */
  animation-play-state: paused;
}
十一、 動畫簡寫方式
  1. 動畫簡寫方式
/* animation: 動畫名稱 持續時間 運動曲線 何時開始 播放次數 是否反方向 起始與結束狀態 */
animation: name duration timing-function delay iteration-count direction fill-mode
  1. 知識要點
  • 簡寫屬性裡面不包含 animation-paly-state

  • 暫停動畫 animation-paly-state: paused; 經常和滑鼠經過等其他配合使用

  • 要想動畫走回來,而不是直接調回來:animation-direction: alternate

  • 盒子動畫結束後,停在結束位置:animation-fill-mode: forwards

  1. 程式碼演示
animation: move 2s linear 1s infinite alternate forwards;
十二、速度曲線細節
  1. 速度曲線細節
  • animation-timing-function: 規定動畫的速度曲線,預設是ease
  1. 程式碼演示
div {
  width: 0px;
  height: 50px;
  line-height: 50px;
  white-space: nowrap;
  overflow: hidden;
  background-color: aquamarine;
  animation: move 4s steps(24) forwards;
}

@keyframes move {
  0% {
    width: 0px;
  }

  100% {
    width: 480px;
  }
}

十三、奔跑的熊大

  1. 程式碼演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            background-color: #ccc;
        }      
        div {
            position: absolute;
            width: 200px;
            height: 100px;
            background: url(media/bear.png) no-repeat;
            /* 我們元素可以新增多個動畫, 用逗號分隔 */
            animation: bear .4s steps(8) infinite, move 3s forwards;
        }
        
        @keyframes bear {
            0% {
                background-position: 0 0;
            }
            100% {
                background-position: -1600px 0;
            }
        }
        
        @keyframes move {
            0% {
                left: 0;
            }
            100% {
                left: 50%;
                /* margin-left: -100px; */
                transform: translateX(-50%);
            }
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

掃一掃下面的二維碼,關注我們,獲取更多精彩活動資訊,有好禮相送哦~

微信贊助 微信打賞 支付寶打賞

A thousand journey is started by taking the first step.