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

由 transform 被占用引發(fā)的思考

開發(fā) 前端
transform并不是一個(gè)簡寫屬性,所以沒有辦法像background那樣對(duì)某一部分進(jìn)行賦值。為了解決這個(gè)問題,從Chrome 104開始,瀏覽器終于正式支持單獨(dú)賦值了。

一、transform 很容易被占用

眾所周知,CSS 中的transform是一個(gè)包含很多值的屬性,例如:

div{
transform: translate(-50%, -50%) scale(1.5)
}

但是,這并不是簡寫,而是就該這么寫,這一點(diǎn)和background不一樣。

div{
background: url('1xxx') 10px 10px / 20px 20px no-repeat;
}
/*等同于以下寫法*/
div{
background-image: url('1xxx');
background-position: 10px 10px;
background-size: 20px 20px;
background-repeat: no-repeat;
}

分開寫的好處在于,如果只需要改變某一部分就很容易覆蓋。

div.div1{
background-image: url('2xxx'); /*只改變圖片,不改變其他*/
}

回到前面,如果希望改變transform中的某一部分,就不太行了,必須把沒改變的部分也寫一遍,而且更改的部分也無法抽離出來作為一個(gè)公共的樣式。

div.scale{
transform: scale(2) /*這樣不行,會(huì)丟失translate*/
}
/*必須寫完整*/
div.scale{
transform: translate(-50%, -50%) scale(2)
}

那如何巧妙的解決這個(gè)問題呢?

二、目前的幾種思路

1. 用其他方式來代替 transform

碰到這種情況,第一感覺可能就是放棄原有transform屬性,用其他方式代替。

比如translate(-50%, -50%)一般是為了實(shí)現(xiàn)元素居中效果,可以用flex等其他方式實(shí)現(xiàn)。

.parent{
display: flex
}
div{
margin: auto; /*通過margin:auto實(shí)現(xiàn)居中*/
}

再比如translate(10px, 10px)這樣的偏移,可以用left或者margin-left等方式實(shí)現(xiàn)。

div{
position: relative;
left: 10px;
top: 10px;
}

或者干脆再包裹一層父級(jí),也能避免transform被占用的問題。

<div class="wrap">
<div class="box">

</div>
</div>

不過,這些方式都是規(guī)避方式,其實(shí)還有官方解決方案。

2. transform 的單獨(dú)賦值

前面提到過transform并不是一個(gè)簡寫屬性,所以沒有辦法像background那樣對(duì)某一部分進(jìn)行賦值。為了解決這個(gè)問題,從Chrome 104開始,瀏覽器終于正式支持單獨(dú)賦值了。

有興趣的可以參考這篇文章:解放生產(chǎn)力!transform 支持單獨(dú)賦值改變[1]。

就拿前面那個(gè)例子來說:

div{
transform: translate(-50%, -50%) scale(1.5)
}

可以寫成。

div{
translate: -50% -50%;
scale: 1.5
}

這樣如果需要改變某一部分,就只需要像普通屬性一樣覆蓋就行了。

div.scale{
scale: 2
}

不過目前兼容性欠佳,謹(jǐn)慎使用!(適合內(nèi)部項(xiàng)目嘗鮮)。

三、借助 CSS 變量拆分屬性

前面的transform 的單獨(dú)賦值雖然很好,但是太新了,無法立刻在項(xiàng)目中使用。下面介紹一個(gè)兼容性更好,使用更放心的解決方案。

還是上面這個(gè)例子:

div{
transform: translate(-50%, -50%) scale(1.5)
}

通過 CSS 變量,將transform拆分;

div{
--translate: -50%, -50%;
--scale: 1.5;
transform: translate(var(--translate)) scale(var(--scale))
}

經(jīng)過這樣拆分以后,CSS 變量就成了獨(dú)立屬性,如果需要覆蓋,只需要修改其中一個(gè)就行了,而無需關(guān)注--translate是什么樣的,這樣變化的部分就可以單獨(dú)作為一個(gè)公共的樣式了,如下:

.div1{
--translate: -50%, -50%;
}
.div1{
--translate: 10px, 10px;
}
div.scale{
--scale: 2; /*無需關(guān)注其他transform,可以作為公共的樣式*/
}

是不是非常清晰明了?下面是一個(gè)演示demo;

[type="checkbox"]:checked+div{
--scale: 1.5
}

效果如下:

圖片

完整代碼可以查看以下任意鏈接:

  • CSS transform (codepen.io)[2]
  • CSS transform - 碼上掘金 (juejin.cn)[3]
  • CSS transform (runjs.work)[4]

四、借助 @property 實(shí)現(xiàn)過渡動(dòng)畫

上面的實(shí)現(xiàn)看似完美,其實(shí)還是有問題的,比如加一個(gè)動(dòng)畫。

由于拆分成了 CSS 變量寫法,所以動(dòng)畫的變化對(duì)象也變成了 CSS 自定義屬性(--scale),如下:

div{
/**/
animation: scale 1s infinite linear alternate;
}
@keyframes scale {
from {
--scale:1
}
to {
--scale:1.5
}
}

實(shí)際效果是這樣的:

圖片

動(dòng)是動(dòng)了,但是沒有過渡,太生硬了,那如何解決呢?

這就需要用到@property[5]了,是干什么的呢?簡單來講,可以自定義屬性,讓自定義變量像顏色一樣進(jìn)行過渡和動(dòng)畫,換句話說,現(xiàn)在執(zhí)行動(dòng)畫的是--scale這個(gè)屬性,而不再是transform了。

所以,要實(shí)現(xiàn)過渡動(dòng)畫,只需要將這個(gè)自定義屬性通過@property定義一下就行了,如下:

@property --scale { 
syntax: '<number>';
inherits: false;
initial-value: 1;
}

效果如下

圖片

和傳統(tǒng)實(shí)現(xiàn)效果一樣,但是代碼上更加優(yōu)雅。

完整代碼可以查看以下任意鏈接:

  • CSS transform @property (codepen.io)[6]
  • CSS transform @property - 碼上掘金 (juejin.cn)[7]
  • CSS transform @property (runjs.work)[8]

五、不僅僅是 transform

下面來拓展一下,打開你的格局。

除了transform,還有很多其他復(fù)雜的 CSS 屬性,在現(xiàn)階段并沒有分開的情況下,這種通過 CSS 變量的方式就再適合不過了,比如filter。

el{
filter: brightness(0.4) invert(75%) grayscale(50%);
}

通過 CSS 變量分離開來就是;

el{
--brightness: 0.4;
--invert: 75%;
--grayscale: 50%;
filter: brightness(0.4) invert(75%) grayscale(50%);
}

這樣在做一些圖片調(diào)整時(shí),可以直接用單獨(dú)的變量控制了,比如像keynote這樣的。

圖片

再比如rgb顏色值,寫成一個(gè)變量不好控制,拆分成三個(gè)變量就容易多了。

el{
--r: 255;
--g: 255;
--b: 255;
color: rgb(var(--r), var(--g), var(--b));
}

這樣在做一些顏色調(diào)整交互時(shí)就非常方便,還是keynote中的例子。

圖片

還有一些可以無限疊加的屬性,比如background-image,對(duì),又是這個(gè),可謂是相當(dāng)復(fù)雜了,在有多層背景,而且背景都是很長一段base64時(shí),就成了這樣。

el{
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z'%3E%3C/path%3E %3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z'%3E%3C/path%3E %3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z'%3E%3C/path%3E %3C/svg%3E")
}

這樣一段 CSS 就像亂碼一樣,非常不利于閱讀,分不清哪個(gè)圖片是哪個(gè),像這種情況就可以借助 CSS 變量改寫成如下形式。

:root{
--背景1:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z'%3E%3C/path%3E %3C/svg%3E");
--背景2:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z'%3E%3C/path%3E %3C/svg%3E");
--背景3:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z'%3E%3C/path%3E %3C/svg%3E");
}
el{
background-image: var(--背景1), var(--背景2), var(--背景3)
}

這樣對(duì)于el來說,用到了哪些背景是不是一目了然呢?

六、總結(jié)一下

以上就是本文全部內(nèi)容了,也是 CSS 變量的一些實(shí)戰(zhàn)小技巧,下面總結(jié)一下:

  • 部分 CSS 屬性比較復(fù)雜,比如transform,很容易被占用
  • 通常的解決方式是規(guī)避,比如換一種居中方式,或者用left、top等代替
  • 新出現(xiàn)的transform 的單獨(dú)屬性可以解決這個(gè)問題,目前還比較新,僅適合內(nèi)部項(xiàng)目嘗鮮
  • 借助 CSS 變量可以拆分復(fù)雜的屬性
  • 借助@property 讓CSS自定義屬性支持過渡動(dòng)畫
  • 不僅僅是transform,思維放開,復(fù)雜的屬性都可以采取這樣的思路

參考資料

[1]解放生產(chǎn)力!transform 支持單獨(dú)賦值改變: https://juejin.cn/post/7152331836578856967

[2]CSS transform (codepen.io): https://codepen.io/xboxyan/pen/BaVLMpv

[3]CSS transform - 碼上掘金 (juejin.cn): https://code.juejin.cn/pen/7161704312681758755

[4]CSS transform (runjs.work): https://runjs.work/projects/4714accc300d441a

[5]@property: https://developer.mozilla.org/zh-CN/docs/Web/CSS/@property

[6]CSS transform @property (codepen.io): https://codepen.io/xboxyan/pen/OJERdpr

[7]CSS transform @property - 碼上掘金 (juejin.cn): https://code.juejin.cn/pen/7161709269698478083

[8]CSS transform @property (runjs.work): https://runjs.work/projects/377a051b84d54bf6

責(zé)任編輯:武曉燕 來源: 前端偵探
相關(guān)推薦

2013-03-05 10:05:52

2010-06-02 16:22:58

2020-10-14 11:20:35

人工智能人臉識(shí)別技術(shù)

2010-08-26 10:58:41

云服務(wù)

2009-03-13 16:39:16

Linux開源改變

2018-02-28 14:32:24

2015-02-04 14:36:07

格式串漏洞Ghost漏洞安全漏洞

2011-06-10 10:11:44

2012-08-31 14:00:40

IT運(yùn)維

2009-03-12 15:25:50

firefox火狐

2013-08-02 14:27:28

2021-10-08 08:55:23

FacebookBGP工具

2013-12-12 16:28:04

Lua腳本語言

2009-11-02 12:46:15

Winform

2012-04-09 09:53:56

2009-09-07 15:56:16

2018-05-23 08:28:39

2017-05-26 12:59:48

Linux端口

2017-01-12 14:26:49

Quality Cen測(cè)試管理

2017-01-11 10:38:17

MySQL客戶端代碼
點(diǎn)贊
收藏

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

国产成人精品影视| 国产午夜亚洲精品午夜鲁丝片 | 欧美日韩国产小视频在线观看| 中文不卡1区2区3区| 欧美激情a在线| 欧美精品国产| 少妇性l交大片| 日韩你懂的在线播放| 精品人人人人| 潘金莲一级淫片aaaaaa播放1| 91av一区| 国产精品一区二区三区久久久 | 一级黄色特级片| 日韩精品一区二区三区在线观看| 日本欧美高清| 性一交一乱一伧国产女士spa| 色老头久久综合| 91精品尤物| 99热久久这里只有精品| 欧美日韩极品在线观看一区| 北条麻妃一区二区三区在线| 欧美与动交zoz0z| 8x8x8国产精品| 久久免费精品视频在这里| 99蜜桃臀久久久欧美精品网站| 欧美tk丨vk视频| 激情六月综合| 头脑特工队2在线播放| 午夜精品一区二区三区在线播放 | 粉嫩粉嫩芽的虎白女18在线视频| 最近2019免费中文字幕视频三 | 欧美主播一区二区三区| 国产精品tv| 丰满少妇久久久| 日韩二区三区在线| 亚洲影院一区| 爱久久·www| 国产精品免费在线免费| 欧美激情一区二区三区在线| 不卡亚洲精品| 一级二级三级欧美| 欧美一区二区久久久| 午夜精品亚洲| 天堂а√在线8种子蜜桃视频 | 亚洲女同一区| 午夜黄色一级片| 久久久久久久香蕉网| 91网站黄www| 亚洲毛片在线免费| 成人黄色大片网站| 一区二区欧美激情| 国产精品资源在线观看| 91福利区在线观看| 亚洲精品第一区二区三区| 精品三级在线看| 卡一卡二国产精品| av日韩中文| 97av中文字幕| 亚洲乱码国产乱码精品精天堂| 美腿丝袜在线亚洲一区| 日本高清在线观看| 色999日韩自偷自拍美女| 91精品国产综合久久精品麻豆| 香蕉国产精品偷在线观看不卡| a级毛片免费观看在线| 天堂社区 天堂综合网 天堂资源最新版| 欧美色videos| 国内精品久久久久久久97牛牛| 99青草视频在线播放视| 久久精品国产精品青草色艺| 91精品国产一区二区三区香蕉| 午夜在线精品| 中文字幕在线视频网站| 精品无码一区二区三区爱欲| 欧美成人亚洲成人| 亚洲免费在线视频一区 二区| youjizz亚洲| 两个人看的免费完整在线观看| 91精品在线播放| 欧美日韩五月天| 美国十次了思思久久精品导航| 韩国成人在线| 99免费视频观看| 国产精品免费一区豆花| 欧美视频一区二区三区在线观看| 久久国产毛片| 91国拍精品国产粉嫩亚洲一区| 91看片在线免费观看| 国产成人综合精品| 精品视频在线视频| 国产一区二区三区高清播放| 97视频一区| 日本一区视频| 国产奶头好大揉着好爽视频| 久久久久久久久中文字幕| 精品久久中文字幕| 免费成人av资源网| 97人人澡人人爽91综合色| 亚洲人成电影| 五月天综合婷婷| 欧美一级电影久久| 538在线一区二区精品国产| 国产91露脸合集magnet| 国产精品中文字幕亚洲欧美| 超碰在线网址| 国产精品入口免费软件| 国产精品福利视频| 一区二区福利视频| 亚洲高清在线视频| 免费观看日韩电影| 日韩一级电影| 久草在线新免费首页资源站| 五月婷婷六月丁香激情| 蜜桃欧美视频| 97在线视频免费播放| 欧美一级国产精品| 中文字幕av一区二区三区| 国产日韩欧美高清免费| 亚洲精品福利| 黄在线免费观看| 色综合天天色综合| 国产视频一区二区不卡| 久久国产精品影片| 欧美日韩国产一区二区三区地区| 99视频精品全部免费在线| 欧美不卡高清| 日本少妇精品亚洲第一区| 幼a在线观看| 日本不卡一区在线| 亚洲高清123| 国产精品视频播放| 一区二区三区亚洲| 色猫猫国产区一区二在线视频| 97久久超碰国产精品| 亚洲精品一二| 香蕉久久精品| 69堂精品视频在线播放| 电影在线一区| 亚洲视频第二页| 亚洲午夜在线观看| 国产欧美日韩中文字幕| 精品国偷自产在线| 欧美一级片在线看| 亚洲国产欧美在线人成| 91麻豆视频网站| 久久国产精品99久久人人澡| 国产精品传媒精东影业在线| 日本在线成人| 欧亚在线中文字幕免费| 成人在线免费看| 国产jizz| 成年人视频观看| 在线观看日韩羞羞视频| 产国精品偷在线| 日韩av电影在线网| 欧美成人亚洲成人| 亚洲免费电影一区| 日韩精品一区二区三区四区视频| 精品久久久久久久久国产字幕| 日本一区二区在线不卡| 国产精品亚洲一区二区三区妖精| 欧美专区18| 在线播放不卡| 中文av一区| 久久人人99| 激情五月色综合国产精品| 国内不卡的一区二区三区中文字幕| 草草在线视频| av网址在线| 欧美jizz18hd性欧美| 你懂的视频在线免费| 一二三四中文在线| 国产三级视频| 99热免费在线观看| 天天碰免费视频| 日韩少妇内射免费播放| 国产成人亚洲综合无码| 亚洲精品一品区二品区三品区| 久久久久一区二区三区| 国语精品免费视频| 成人欧美视频在线| 成人写真福利网| 91综合免费在线| 91网站在线看| 成人av资源网| 韩国成人av| 精品在线视频一区二区三区| 国产亚洲福利社区| 国产一区二区三区四区hd| 5g国产欧美日韩视频| www.成人av.com| 九九九久久久| 午夜视频久久久| 久久久久久久免费| 日韩免费av电影| 手机成人av在线| 亚洲 欧美 综合 另类 中字| 97国产精东麻豆人妻电影| 国产a级一级片| 无码内射中文字幕岛国片|