成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解放生產(chǎn)力!Transform 支持單獨(dú)賦值改變

開發(fā) 前端
本文比較簡單,沒有復(fù)雜的 CSS 動效,主要介紹了從 Chrome 104 開始,Transform 支持單獨(dú)賦值這一更新。

在 Chrome 104 中,支持了一個非常有意思的新特性。CSS 中的 ??transform?? 支持單獨(dú)賦值改變。不要小看這一點(diǎn),此點(diǎn)改動在很多時候,能夠非常有效的解放生產(chǎn)力,算是一個非常 NICE 的更新。

淺析一下

什么意思呢?我們來看這樣一個例子:

在之前,我們可以利用 transform 配合絕對定位的 top、left 進(jìn)行任意元素的水平垂直居中,像是這樣:

<div></div>
div {
width: 200px;
height: 200px;
background: #000;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

這樣,我們就得到了一個水平垂直居中的元素:

圖片

但是,如果我們想對這個元素進(jìn)行一個縮放的動畫,該怎么做呢?會是這樣:

div {
width: 200px;
height: 200px;
background: #000;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@keyframes scale {
0% {
transform: translate(-50%, -50%) scale(1);
}
100% {
transform: translate(-50%, -50%) scale(1.2);
}
}

好的,動畫本身,并不是重點(diǎn)。重點(diǎn)在于,在上述的 @keyframes 代碼中,我們想改變的其實(shí)只有 scale()? 的值,但是基于現(xiàn)有的 CSS 機(jī)制,我們必須把前面控制定位的 ?translate()? 一并寫上。

transform 拆開書寫

為了解決這個痛點(diǎn),規(guī)范支持了將 transform 分開書寫的方式。

所以,對于這一句,transform: translate(-50%, -50%) scale(1),我們可以分別拆開成 translate 和 scale:

div {
width: 200px;
height: 200px;
background: #000;
position: absolute;
top: 50%;
left: 50%;
// transform: translate(-50%, -50%); 刪掉這句
translate: -50% -50%;
scale: 1;
animation: scale 1s infinite linear alternate;
}
@keyframes scale {
0% {
scale: 1;
}
100% {
scale: 1.2
}
}

是的,我們可以通過 translate? 和 scale? 分開控制它們,這樣我們就能愉快的在 @keyframes? 中,只進(jìn)行 scale 的動畫了!妙哉。

所以,根據(jù)規(guī)范 -- [1],于 transform 而言,我們可以將它整個拆解為:

  1. translate
  2. rotate
  3. scale

具體的語法會有一點(diǎn)點(diǎn)不同,具體使用的時候,多看看文檔,譬如 translate 接收 3 個參數(shù),第 2、3 個參數(shù)如果不存在,則為零(例如:translate: 50% 50% 0)。又譬如 rotate,如果想改變 Y 軸的旋轉(zhuǎn)角度,可以這樣寫 rotate: y 30deg。

再舉個例子,下面兩組代碼是等效的:

// 上下兩組代碼產(chǎn)生的效果等效!
{
transform: translate(-50%, -50%) rotateZ(30deg) scale(1.2);
}
{
translate: -50% -50%;
rotate: Z 30deg;
scale: 1.2;
}

是的,比較奇怪的是,規(guī)范里沒有涉及到 skew 的拆解。

順序?qū)?transform 的影響

當(dāng)然。拆開后和原本寫在一起并非完全一樣。

如果,我們使用的是 transform,將它們?nèi)繉懺谝黄穑袷沁@樣:

div {
transform: rotateY(90deg) translateZ(400px) scale(1.2);
}

此時,元素的 transform 變換遵循的是從左向右進(jìn)行變換。也就是先旋轉(zhuǎn) ??rotate???,再 ??translateZ()???,最后縮放 ??scale()??。

但是如果,我們分開來寫:

div {
rotate: Y 90deg;
translate: 0 0 400px;
scale: 1.2;
}

雖然代碼屬性的順序是 rotate --> translate --> scale,但是實(shí)際上,無論他們的書寫順序如何,解析的時候都會按照首先 translate,然后 rotate,最后 scale 的順序進(jìn)行!

這個會有什么影響嗎?當(dāng)然,這里我們來看這樣一個例子。假設(shè),我們想實(shí)現(xiàn)這樣一個立方體:

圖片

不算上下兩個面,以其余 4 個面為例子,正常的做法是,在 transform-style: preserve-3d 狀態(tài)下,每個面先繞 Y 軸旋轉(zhuǎn)一定的角度,然后進(jìn)行 translateZ() 的位移。

像是這樣:

圖片

所以,代碼會是這樣:

face1 {
transform: rotateY(0) translateZ(200px);
}
face2 {
transform: rotateY(90deg) translateZ(200px);
}
face3 {
transform: rotateY(180deg) translateZ(200px);
}
face4 {
transform: rotateY(270deg) translateZ(200px);
}

注意,這里 transform 的變換是先旋轉(zhuǎn),再位移。

如果我們拆開寫,變成:

face2 {
rotate: Y 90deg;
translate: 0 0 200px;
}
//...

則整個效果就變成了:

圖片

因為這里實(shí)際執(zhí)行的順序是,先 translate,后 rotate。

所以,實(shí)際使用的時候一定要注意,矩陣變換的順序會影響最終的效果。如果對順序有嚴(yán)格的要求,還是需要合在一起寫。

總結(jié)一下

本文比較簡單,沒有復(fù)雜的 CSS 動效,主要介紹了從 Chrome 104 開始,transform 支持單獨(dú)賦值這一更新。其中有三點(diǎn)需要注意:

  1. 于transform 而言,我們可以將它整個拆解為 translate、rotate、scale 的分開寫法。
  2. 對于完整的transform 而言,其執(zhí)行順序遵循從左向右進(jìn)行變換。
  3. 對于分開寫的transform 而言,無論其書寫順序,總是按照先 translate,然后 rotate,最后 scale 的順序進(jìn)行!

最后

好了,本文到此結(jié)束,希望本文對你有所幫助 :)

參考資料

[1]W3 - individual-transforms: ?https://www.w3.org/TR/css-transforms-2/#individual-transforms?。

[2]CodePen Demo -- 3D Box View: https://codepen.io/Chokcoco/pen/vYjpWBW?editors=0100?。

[3]Github -- iCSS: https://github.com/chokcoco/iCSS?。

責(zé)任編輯:姜華 來源: iCSS前端趣聞
相關(guān)推薦

2022-03-14 15:07:28

DockerJavaIdea

2022-06-29 07:29:54

WeChatSync工具

2019-07-08 14:46:57

AI 數(shù)據(jù)人工智能

2020-01-15 08:42:16

TCP三次握手弱網(wǎng)絡(luò)

2022-03-02 16:05:16

Web前端代碼

2024-05-23 15:20:36

SQLModelPython

2013-04-26 16:14:09

視頻會議MCU統(tǒng)一通信

2014-12-14 14:43:31

中軟JointForce

2013-09-04 18:41:01

Testin云測試

2025-02-07 08:32:56

AI場景Oracle

2018-02-27 09:39:00

區(qū)塊鏈分布式比特幣

2012-08-27 13:30:21

BYOD

2020-12-07 06:22:05

MyBatisPlus開發(fā)MP

2016-02-23 11:39:47

Adobe數(shù)字化營銷

2016-09-21 10:10:50

2016-07-14 14:12:11

華為
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产婷婷色综合av蜜臀av | 国产激情一区二区三区 | 精品久久久久久久久久久院品网 | 色视频成人在线观看免 | 天天干天天爱天天操 | 国产女人叫床高潮大片免费 | 国产乱码精品一区二区三区忘忧草 | 在线免费观看一区二区 | www.久久 | 日韩激情免费 | 久热精品在线观看视频 | 影音先锋久久 | av毛片在线播放 | 九九免费视频 | 成人 在线 | 日韩中文字幕一区二区 | 日日噜噜噜夜夜爽爽狠狠视频97 | 亚洲精品日韩在线 | 在线免费观看毛片 | 羞羞视频免费观看入口 | 亚洲精品久久久一区二区三区 | 日韩综合 | 成人一级视频在线观看 | 国产精品人人做人人爽 | 天堂国产 | 97超碰在线免费 | 免费一级欧美在线观看视频 | 一级免费在线视频 | 国产精品久久久精品 | 性色的免费视频 | 一级a爱片久久毛片 | 中文字幕高清免费日韩视频在线 | 日韩免费视频一区二区 | 日韩欧美国产精品一区二区 | 成人在线视频一区二区三区 | 国产三级国产精品 | 日本不卡一区 | 国产午夜亚洲精品不卡 | 免费v片| 欧美天堂在线 | 91精品国产91久久久久久密臀 |