国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

3000 字總結CSS 中的過渡、動畫和變換詳解

開發 前端
CSS 過渡是一種平滑改變 CSS 屬性值的機制,允許屬性值在一定時間內從一個值逐漸變化到另一個值,從而創建流暢的動畫效果。過渡只能用于具有中間值的屬性(如顏色、大小、位置等),不能用于 display 等離散屬性。

一、CSS 過渡(Transitions)

1. 基本概念

CSS 過渡是一種平滑改變 CSS 屬性值的機制,允許屬性值在一定時間內從一個值逐漸變化到另一個值,從而創建流暢的動畫效果。過渡只能用于具有中間值的屬性(如顏色、大小、位置等),不能用于 display 等離散屬性。

2. 核心屬性

transition-property

指定哪些 CSS 屬性參與過渡。可以是單個屬性(如width)、多個屬性(如width, height)或all(所有可過渡屬性)。

.element {
  transition-property: width, height;
}
transition-duration

指定過渡持續的時間,單位可以是秒(s)或毫秒(ms)。

.element {
  transition-duration: 0.5s; /* 0.5秒 */
}
transition-timing-function

定義過渡的速度曲線,常見值包括:

  • ease:默認值,慢-快-慢
  • linear:勻速
  • ease-in:慢速開始
  • ease-out:慢速結束
  • ease-in-out:慢速開始和結束
  • cubic-bezier(n,n,n,n):自定義貝塞爾曲線
.element {
  transition-timing-function: ease-in-out;
}
transition-delay

指定過渡開始前的延遲時間。

.element {
  transition-delay: 0.2s; /* 延遲0.2秒 */
}

3. 簡寫語法

.element {
  transition: width 0.5s ease-in-out 0.2s;
  /* 依次為:屬性 持續時間 時間函數 延遲時間 */
}

4. 觸發方式

過渡需要一個觸發條件才能生效,常見的觸發方式有:

:hover 偽類
.button {
  background-color: blue;
  transition: background-color 0.3s;
}

.button:hover {
  background-color: red;
}
:focus 偽類
.input {
  border: 1px solid #ccc;
  transition: border-color 0.3s;
}

.input:focus {
  border-color: blue;
}
JavaScript 動態修改
<button id="changeColor">變色</button>
<div id="box" style="width: 100px; height: 100px; background-color: red; transition: background-color 0.5s;"></div>

<script>
  document.getElementById('changeColor').addEventListener('click', () => {
    const box = document.getElementById('box');
    box.style.backgroundColor = box.style.backgroundColor === 'red' ? 'blue' : 'red';
  });
</script>

5. 應用場景

  • 按鈕懸停效果
  • 導航欄交互
  • 表單元素狀態變化
  • 圖片縮放預覽

二、CSS 動畫(Animations)

1. 基本概念

CSS 動畫通過 @keyframes 規則定義一系列關鍵幀,然后將這些關鍵幀應用到元素上,實現更復雜、更可控的動畫效果。與過渡不同,動畫不需要觸發條件,可以自動運行。

2. @keyframes 規則

定義動畫的關鍵幀,格式如下:

@keyframes animationName {
  0% { /* 初始狀態 */ }
  50% { /* 中間狀態 */ }
  100% { /* 結束狀態 */ }
}

也可以使用 from 和 to 表示 0% 和 100%:

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

3. 動畫屬性

animation-name

指定要應用的動畫名稱,對應 @keyframes 定義的名稱。

.element {
  animation-name: fadeIn;
}
animation-duration

指定動畫的持續時間,單位為秒(s)或毫秒(ms)。

.element {
  animation-duration: 2s;
}
animation-timing-function

定義動畫的速度曲線,與過渡的 timing-function 類似。

.element {
  animation-timing-function: ease-in-out;
}
animation-delay

指定動畫開始前的延遲時間。

.element {
  animation-delay: 0.5s;
}
animation-iteration-count

指定動畫的播放次數,可以是數字或 infinite(無限循環)。

.element {
  animation-iteration-count: 3; /* 播放3次 */
}
animation-direction

指定動畫的播放方向,常見值包括:

  • normal:默認值,正向播放
  • reverse:反向播放
  • alternate:正向和反向交替播放
  • alternate-reverse:反向和正向交替播放
.element {
  animation-direction: alternate;
}
animation-fill-mode

定義動畫在播放前和播放后的狀態,常見值包括:

  • none:默認值,不應用任何樣式
  • forwards:保持動畫結束時的狀態
  • backwards:在延遲期間應用動畫的初始狀態
  • both:同時應用 forwards 和 backwards
.element {
  animation-fill-mode: forwards;
}
animation-play-state

控制動畫的播放狀態,可以是 running 或 paused

.element {
  animation-play-state: paused;
}

4. 簡寫語法

.element {
  animation: fadeIn 2s ease-in-out 0.5s 3 alternate forwards;
  /* 依次為:名稱 持續時間 時間函數 延遲時間 播放次數 播放方向 填充模式 */
}

5. 應用場景

  • 加載動畫
  • 通知提示效果
  • 頁面滾動動畫
  • 互動游戲元素

三、CSS 變換(Transforms)

1. 基本概念

CSS 變換允許改變元素的形狀、大小和位置,而不影響文檔流。變換可以是 2D 或 3D 的,通過 transform 屬性實現。

2. 2D 變換

translate()

移動元素的位置,參數為 X 和 Y 方向的偏移量。

.element {
  transform: translate(50px, 20px); /* 向右移動50px,向下移動20px */
}
rotate()

旋轉元素,參數為旋轉角度(單位為 deg)。

.element {
  transform: rotate(45deg); /* 順時針旋轉45度 */
}
scale()

縮放元素,參數為 X 和 Y 方向的縮放比例。

.element {
  transform: scale(1.5, 0.8); /* 水平放大1.5倍,垂直縮小0.8倍 */
}
skew()

傾斜元素,參數為 X 和 Y 方向的傾斜角度。

.element {
  transform: skew(20deg, 10deg); /* 水平傾斜20度,垂直傾斜10度 */
}
matrix()

使用矩陣方式定義變換,包含六個參數:matrix(a, b, c, d, e, f)。

.element {
  transform: matrix(1.1, 0, 0, 1.1, 50, 0); /* 相當于 scale(1.1) translate(50px, 0) */
}

3. 3D 變換

translate3d()

在 3D 空間中移動元素,參數為 X、Y、Z 方向的偏移量。

.element {
  transform: translate3d(50px, 20px, 100px);
}
rotate3d()

在 3D 空間中旋轉元素,參數為 (x, y, z, angle),其中 x、y、z 定義旋轉軸。

.element {
  transform: rotate3d(1, 1, 0, 45deg); /* 繞X軸和Y軸的對角線旋轉45度 */
}
scale3d()

在 3D 空間中縮放元素,參數為 X、Y、Z 方向的縮放比例。

.element {
  transform: scale3d(1.5, 0.8, 2);
}
perspective()

設置透視效果,定義觀察者與 z=0 平面的距離。

.container {
  perspective: 1000px;
}

.element {
  transform: perspective(1000px) rotateY(45deg);
}
transform-style

指定子元素是否保留 3D 變換效果,值為 flat(默認)或 preserve-3d

.container {
  transform-style: preserve-3d;
}
backface-visibility

控制元素背面是否可見,值為 visible(默認)或 hidden

.card {
  backface-visibility: hidden;
}

4. 變換原點

transform-origin 屬性允許改變變換的原點位置,默認值為元素中心 (50% 50%)。

.element {
  transform-origin: top left; /* 變換原點為左上角 */
  transform: rotate(45deg);
}

四、綜合應用

1. 過渡與變換結合

.button {
background-color: blue;
color: white;
padding: 10px20px;
border: none;
transition: background-color 0.3s, transform 0.3s;
}

.button:hover {
background-color: red;
transform: scale(1.1);
}

2. 動畫與變換結合

@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-20px); }
}

.ball {
width: 50px;
height: 50px;
background-color: red;
border-radius: 50%;
animation: bounce 1s infinite;
}

3. 3D 卡片翻轉效果

.card {
width: 200px;
height: 200px;
perspective: 1000px;
position: relative;
}

.card-inner {
width: 100%;
height: 100%;
transition: transform 0.8s;
transform-style: preserve-3d;
}

.card:hover.card-inner {
transform: rotateY(180deg);
}

.card-front, .card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
}

.card-front {
background-color: #bbb;
color: black;
}

.card-back {
background-color: dodgerblue;
color: white;
transform: rotateY(180deg);
}

五、性能優化

1. 使用 transform 和 opacity

transform 和 opacity 是性能最高的 CSS 屬性,因為它們不會觸發重排(reflow)和重繪(repaint),只會觸發合成(composite)。

2. 避免過多重排和重繪

頻繁修改會觸發重排和重繪的屬性(如 width、height、margin 等)會導致性能問題。盡量批量修改樣式,或者使用 transform 替代位置和大小的改變。

3. 使用 will-change

提前告知瀏覽器某個元素即將發生變化,有助于瀏覽器提前優化。

.element {
  will-change: transform;
}

4. 硬件加速

通過 transform: translateZ(0) 或 transform: translate3d(0,0,0) 觸發硬件加速。

.element {
  transform: translateZ(0);
}

六、瀏覽器兼容性

1. 前綴問題

早期的瀏覽器需要添加前綴支持,現在大多數現代瀏覽器已經不需要了,但為了兼容性,仍然可以添加:

.element {
  -webkit-transition: all 0.3s;
  -moz-transition: all 0.3s;
  -ms-transition: all 0.3s;
  -o-transition: all 0.3s;
  transition: all 0.3s;
}

2. 瀏覽器支持情況

  • 過渡和 2D 變換:IE10+、Chrome、Firefox、Safari、Edge 等現代瀏覽器均支持
  • 3D 變換:IE10+、Chrome、Firefox、Safari、Edge 等現代瀏覽器均支持
  • 動畫:IE10+、Chrome、Firefox、Safari、Edge 等現代瀏覽器均支持

七、常見應用場景

1. 懸停效果

  • 按鈕縮放
  • 圖片放大
  • 導航項高亮

2. 加載動畫

  • 旋轉加載圖標
  • 脈沖效果
  • 骨架屏

3. 交互反饋

  • 表單驗證動畫
  • 點擊波紋效果
  • 拖放反饋

4. 頁面過渡

  • 路由切換動畫
  • 模態框淡入淡出
  • 滾動視差效果

八、注意事項

1. 性能陷阱

過度使用復雜的動畫和變換會導致性能下降,特別是在移動設備上。

2. 無障礙性

確保動畫和變換不會影響視力障礙用戶的體驗,避免閃爍效果(可能引發癲癇)。

3. 兼容性處理

對于不支持某些特性的瀏覽器,提供降級方案。

4. 代碼維護

避免過多的動畫和變換導致代碼難以維護,保持簡潔和一致性。

通過合理使用 CSS 過渡、動畫和變換,可以創建出視覺上引人入勝、交互上流暢自然的現代 Web 應用。這些技術不僅提升了用戶體驗,也為設計師和開發者提供了豐富的創意空間。

責任編輯:武曉燕 來源: 青竹閱書
相關推薦

2024-03-28 09:11:24

CSS3TransitionCSS屬性

2024-03-15 08:50:08

CSS3@keyframes動畫制作

2020-10-22 08:50:04

Cascading S

2023-02-06 09:31:17

CSSJS 動態

2024-09-23 09:20:02

calc-sizeCSS前端

2021-05-21 07:41:15

Vue 過渡動畫

2020-07-17 19:36:26

Python編程代碼

2023-04-14 16:45:21

CSS前端CSS3

2024-01-15 10:41:31

C++關鍵字開發

2024-08-13 15:07:20

2015-08-03 11:42:27

Swift漢堡式過度動畫

2012-12-24 13:38:01

iOSUIView

2013-01-30 15:59:29

adobeCSS3HTML5

2021-07-15 07:23:25

React動畫頁面

2024-12-31 00:00:01

驅動設計應用場景業務邏輯

2024-09-26 13:33:12

2024-08-30 10:29:21

2020-10-29 15:15:09

SQL數據清洗Python

2011-02-17 10:54:59

CSS3變換 簡單快捷

2024-04-26 08:27:15

JavaScriptCSSHTML元素
點贊
收藏

51CTO技術棧公眾號

豆花视频一区二区| 蜜桃专区在线| 久草.com| 午夜免费视频在线国产| 成人性生交大片免费看午夜| 日韩精品99| 91麻豆精品国产91久久久平台| 亚洲一卡久久| 国产精品久久毛片| 欧美一卡2卡3卡4卡| 3d动漫精品啪啪一区二区竹菊| 91精品婷婷国产综合久久竹菊| 国产偷亚洲偷欧美偷精品| 日韩精品一二三四区| 国产精品久久久久999| 久久男人资源站| av在线女优影院| 精品国产乱码一区二区三区| 久久国产亚洲| 成人免费精品视频| 国产精品国产三级国产普通话三级 | 精品视频免费| 国产高清在线精品| 欧美一a一片一级一片| 2018国产精品视频| 少妇人妻大乳在线视频| 在线观看视频污| 日韩理论电影| 欧美三级午夜理伦三级在线观看| 国产毛片av在线| 青青青国产精品| 免费在线欧美视频| 亚洲欧美色一区| 日韩久久免费视频| 欧美一级免费视频| 久久久久久久影院| 国产欧美日韩伦理| 欧洲成人av| 99精品国产九九国产精品| 狠狠狠色丁香婷婷综合激情| 精品久久久久久久久国产字幕 | 五月天精品一区二区三区| 欧美日韩精品是欧美日韩精品| 一本一本久久a久久精品牛牛影视| 国产另类第一区| 免费在线超碰| 亚洲综合色站| 疯狂欧美牲乱大交777| 国产精品毛片a∨一区二区三区|国| 一区二区三区观看| 午夜久久久精品| 日韩伦理福利| 综合亚洲色图| 欧美在线观看天堂一区二区三区| 国语自产精品视频在线看8查询8| 国产一区二区三区的电影| 石原莉奈在线亚洲二区| a91a精品视频在线观看| 午夜精品视频一区二区三区在线看| 日本免费精品| 成人短视频下载| 精品欧美一区二区在线观看| 精品蜜桃一区二区三区| 日p在线观看| 日日夜夜免费精品| 日韩欧美久久久| 一区二区精品免费视频| 中文字幕在线视频久| 懂色av一区二区夜夜嗨| 亚洲国产99精品国自产| 日本黄色a视频| 精品黄色免费中文电影在线播放 | 999在线观看精品免费不卡网站| 日韩一区二区三区视频| 三区在线观看| 亚洲国产高清视频| 日韩精品一区二| 日韩欧美一区二区在线观看| www.51av欧美视频| 中日韩av电影| 国产精品一国产精品k频道56| 欧美在线一级视频| 午夜av一区二区| 亚洲变态欧美另类捆绑| 欧美成人激情在线| 中文字幕色呦呦| 黑人与亚洲人色ⅹvideos| 国产精品美女午夜爽爽| 韩国女主播一区二区三区| 亚州av乱码久久精品蜜桃| 欧美午夜美女看片| 亚洲色图都市激情| 欧美日韩另类图片| 91精品国产综合久久精品性色| 一区在线电影| 91影院成人| 一区二区三区美女xx视频| 天堂中文资源在线| 91污在线观看| 亚洲欧洲中文| 日本福利视频| 99久久99久久精品国产片果冰| 欧美一区二区三区日韩视频| 欧美1819sex性处18免费| 日韩成人精品在线观看| 欧美亚州一区二区三区| sm捆绑调教国产免费网站在线观看| 欧美国产97人人爽人人喊| 日韩女优中文字幕| 91精品国产调教在线观看| 欧美精品www| 99九九久久| 91精品福利在线一区二区三区| 国产天堂在线观看| 韩国成人在线视频| 国产精品乱码一区二区三区| 午夜欧洲一区| 欧美tk—视频vk| av播放在线| 精品久久久久久久久久久久久久| 黑人粗进入欧美aaaaa| 另类人妖一区二区av| 国产激情一区二区三区在线观看| www一区二区三区| 亚洲级视频在线观看免费1级| 超碰免费97在线观看| 亚洲天堂中文字幕| 男人舔女人下面高潮视频| 蜜芽一区二区三区| 国产福利久久| 国产精品久久占久久| 97成人精品视频在线观看| 国产一区二区三区| 日韩性xxxx爱| 澳门成人av网| 国产视频精品va久久久久久| 国产乱码精品一区二三赶尸艳谈| 日韩三级中文字幕| 黄色网址视频在线观看| 日本福利一区二区| 思思99re6国产在线播放| 欧美丝袜自拍制服另类| 写真福利理论片在线播放| 欧美日韩在线视频首页| 香蕉av一区| 高清一级毛片视频| 欧美激情性爽国产精品17p| 国产精品va在线播放| 亚洲都市激情| 欧美与欧洲交xxxx免费观看| 香蕉人人精品| 成人欧美一区二区三区在线| 欧美一区综合| 懂色av一区二区三区在线播放| 久久精品国产亚洲blacked| 5566成人精品视频免费| 欧美丝袜激情| 久久婷婷开心| proumb性欧美在线观看| 国产福利久久精品| 中文字幕一区二区三区中文字幕 | 伊人久久亚洲美女图片| 欧美午夜欧美| 91精品秘密在线观看| 久久久久久久久久亚洲| 国产精品xxx| 国产精品久久久91| 成人精品国产免费网站| 国产精品12p| 国产精品18久久久久久久久久久久| 国产高清精品软男同| 亚洲一区二区网站| 国产成人亚洲综合91精品| 一区二区电影免费观看| 久久综合色综合88| 国产精成人品localhost| 先锋影音国产精品| 欧美v日韩v国产v| 午夜精彩视频| 成人av一区二区三区| siro系绝美精品系列| 成人97在线观看视频| 黑丝一区二区| 久久精品国产精品亚洲色婷婷| 麻豆一区二区在线| 一级性生活视频| 久久伊人中文字幕| jizz在亚洲| 性久久久久久久| 可播放的18gay1069| 亚洲成人自拍网| 琪琪五月天综合婷婷| 亚洲国产aⅴ天堂久久| 女同互忝互慰dv毛片观看| 国产91在线|亚洲| 亚洲在线www| 日韩在线卡一卡二| 久久综合狠狠综合久久综青草| 欧美亚洲三级| 久久在线中文字幕|