2021年3月-第02階段-前端基礎-HTML+CSS階段-Day02
HTML5 第二天
一、rotate
2d旋轉指的是讓元素在2維平面內順時針旋轉或者逆時針旋轉
使用步驟:
-
給元素新增轉換屬性
transform
-
屬性值為
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)
transform-origin
基礎語法
transform-origin: x y;
- 重要知識點
-
注意後面的引數 x 和 y 用空格隔開
-
x y 預設旋轉的中心點是元素的中心 (50% 50%),等價於
center
center
-
還可以給 x y 設定畫素或者方位名詞(
top
、bottom
、left
、right
、center
)
三、旋轉中心案例
- 程式碼演示
<!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
scale
的作用
- 用來控制元素的放大與縮小
- 語法
transform: scale(x, y)
- 知識要點
-
注意,x 與 y 之間使用逗號進行分隔
-
transform: scale(1, 1)
: 寬高都放大一倍,相當於沒有放大 -
transform: scale(2, 2)
: 寬和高都放大了二倍 -
transform: scale(2)
: 如果只寫了一個引數,第二個引數就和第一個引數一致 -
transform:scale(0.5, 0.5)
: 縮小 -
scale
最大的優勢:可以設定轉換中心點縮放,預設以中心點縮放,而且不影響其他盒子
- 程式碼演示
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 轉換綜合寫法以及順序問題
- 知識要點
-
同時使用多個轉換,其格式為
transform: translate() rotate() scale()
-
順序會影響到轉換的效果(先旋轉會改變座標軸方向)
-
但我們同時有位置或者其他屬性的時候,要將位移放到最前面
- 程式碼演示
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)
- 什麼是動畫
- 動畫是
CSS3
中最具顛覆性的特徵之一,可通過設定多個節點來精確的控制一個或者一組動畫,從而實現
複雜的動畫效果
- 動畫的基本使用
-
先定義動畫
-
在呼叫定義好的動畫
- 語法格式(定義動畫)
@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>
- 語法格式(使用動畫)
div {
/* 呼叫動畫 */
animation-name: 動畫名稱;
/* 持續時間 */
animation-duration: 持續時間;
}
- 動畫序列
-
0% 是動畫的開始,100 % 是動畫的完成,這樣的規則就是動畫序列
-
在 @keyframs 中規定某項 CSS 樣式,就由建立當前樣式逐漸改為新樣式的動畫效果
-
動畫是使元素從一個樣式逐漸變化為另一個樣式的效果,可以改變任意多的樣式任意多的次數
-
用百分比來規定變化發生的時間,或用
from
和to
,等同於 0% 和 100%
- 程式碼演示
<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>
十、動畫常見屬性
- 常見的屬性
- 程式碼演示
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;
}
十一、 動畫簡寫方式
- 動畫簡寫方式
/* animation: 動畫名稱 持續時間 運動曲線 何時開始 播放次數 是否反方向 起始與結束狀態 */
animation: name duration timing-function delay iteration-count direction fill-mode
- 知識要點
-
簡寫屬性裡面不包含
animation-paly-state
-
暫停動畫
animation-paly-state: paused
; 經常和滑鼠經過等其他配合使用 -
要想動畫走回來,而不是直接調回來:
animation-direction: alternate
-
盒子動畫結束後,停在結束位置:
animation-fill-mode: forwards
- 程式碼演示
animation: move 2s linear 1s infinite alternate forwards;
十二、速度曲線細節
- 速度曲線細節
animation-timing-function
: 規定動畫的速度曲線,預設是ease
- 程式碼演示
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;
}
}
十三、奔跑的熊大
- 程式碼演示
<!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>