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

快速了解 CSS @starting-style 規則

開發 前端
最近 Chrome 117,CSS 又悄悄推出了一個新的的@規則,叫做??@starting-style??。從名稱上來看,表示定義初始樣式。那么,具體是做什么的?有什么用?一起了解一下吧!

一、快速了解 @starting-style

通常做一個動畫效果,你可能會考慮 transition 和 animation。

相對于animation,transition使用更簡單,但是有一定條件,需要有狀態的改變,例如手動添加一個class。

div{
  transform: scale(0)
}
div.show{
  transform: scale(1)
}

示意如下:

但是,如果這個show是一開始就存在的,比如:

<div class="show">
  
</div>

這樣在頁面打開的時候,肯定也是沒有過渡效果的,因為沒有狀態的變化。

在以前,我們可以換成用animation的方式,這樣即使是一開始存在的,也能有動畫效果,因為animation是可以自動運行的。

不過到了現在,我們可以用transition的方式來實現了,將上面的例子改寫一下。

div{
  transform: scale(1);
  transition: 1s;
}
@starting-style {
  div{
    transform: scale(0);
  }  
}

這里的@starting-style表示初始樣式,相當于在渲染之前就有了一個初始狀態,這樣也就算有狀態變化了。

實際效果如下(每次刷新瀏覽器都有放大動畫)。

這樣,即使不手動添加狀態也能觸發過渡動效了,這就是@starting-style。

二、元素添加時添加過渡

有時候,即使是手動添加class,也無法保證一定能觸發過渡動效,比如新創建的元素。

const div = document.createElement('div')
div.className = 'show' //過渡無效,直接就生效了
document.body.append(div)

這種情況下,transition就失效了,因為你在添加class的時候元素還未完全渲染。

要解決這個問題,之前也有幾種方式。

首先是定時器,添加一點點延時。

settimeout(()=>{
  div.className = 'show'
},50)

還有一種方式,主動觸發元素的渲染,強制重繪。

div.clientWidth // 強制觸發重繪
div.className = 'show'

另外,還可以用動畫animation來代替,這樣也能主動觸發動畫。

.show{
  animation: ...
}

現在,使用@starting-style也能實現這樣的效果。

div.show{
  transition: 1s;
}
@starting-style {
  div{
    transform: scale(0);
  }  
}

下面是一個元素出現過渡效果:

你也可以訪問以下鏈接查看實際效果(Chrome 117+)

  • CSS @style-rule (juejin.cn)[1]
  • CSS @style-rule (codepen.io)[2]

這讓我想起了之前做過一個message效果,實現原理是這樣的,如果頁面上還沒有 message元素,就先創建,然后添加show類名,讓這個元素出現,這里就是通過強制觸發重繪實現的。

function showMessage(txt){
    this.timer && clearTimeout(this.timer);
    var oDiv = document.getElementById('messageInfo');
    if(!oDiv){
      oDiv = document.createElement('div');
      oDiv.className = 'messageInfo';
      oDiv.id = 'messageInfo';
      document.body.appendChild(oDiv);
    }
    oDiv.innerHTML = '<span>'+txt+'</span>';
  	div.clientWidth; // 強制觸發重繪
    oDiv.classList.add('show');
    this.timer = setTimeout(function(){
      oDiv.classList.remove('show');
    },2000)
}

效果如下,第一次創建的時候也有過渡效果:

有興趣的可以回顧之前這篇4年前的文章:css3元素出現動畫實例 。

三、讓 display:none 也支持過渡

大家可能知道,當一個元素從display:none變成display:block時,是無法觸發過渡效果的,即便有一些過渡屬性。

div{
  display: none;
  transition: 1s;
  transform: scale(0)
}
div.show{
  display: block;
  transform: scale(1)
}

像這種情況下沒有過渡效果的,如下:

不過,現在有了@starting-style,也能輕易實現過渡效果,不管你有沒有display:none。

/*僅需添加一個初始狀態*/
@starting-style {
  div{
    transform: scale(0);
  }  
}

效果如下:

遺憾的是,從display:block變為display:none是無法觸發過渡效果的。

另外,原生組件很多的隱藏和顯示都是直接通過display:none實現的,例如dialog,可以直接添加@starting-style規則來實現打開動畫,而無需改變默認 display。

dialog{
  transition: 1s;
}
@starting-style {
  dialog{
    transform: scale(0);
  }  
}

效果如下:

你也可以訪問以下鏈接查看實際效果(Chrome 117+)

  • CSS @style-rule display (juejin.cn)[3]
  • CSS @style-rule display (codepen.io)[4]

四、總結一下

一個可以改變元素初始狀態的新特性,你學到了嗎?

  • transition 需要有狀態的改變才能觸發過渡效果。
  • animation 無需狀態改變,因為可以自動運行。
  • @starting-style 可以改變元素的初始狀態,讓元素在初次渲染時也有過渡效果。
  • @starting-style 可以在元素添加時直接添加過渡效果。
  • @starting-style 可以讓 display:none 也支持過渡。

不過像這樣的 CSS 特性注定是冷門屬性,主要是可替代性太強了,而且不知道什么時候才可以正式投入使用,現在就當提前了解吧。

[0]css3元素出現動畫實例: https://segmentfault.com/a/1190000018889396。

[1]CSS @style-rule (juejin.cn): https://code.juejin.cn/pen/7299436237318799423。

[2]CSS @style-rule (codepen.io): https://codepen.io/xboxyan/pen/ZEwKYpR。

[3]CSS @style-rule display (juejin.cn): https://code.juejin.cn/pen/7299479246152400896。

[4]CSS @style-rule display (codepen.io): https://code.juejin.cn/pen/7299479246152400896。

責任編輯:姜華 來源: 前端偵探
相關推薦

2023-11-06 09:24:14

CSS相對顏色

2024-07-24 10:58:32

2024-03-25 09:20:22

CSS語法fixed

2015-08-26 16:17:49

OpenStack OpenStack 架開源云平臺

2020-10-22 08:50:04

Cascading S

2010-08-25 09:11:57

DIVCSS

2009-11-13 15:55:52

Oracle哈希連接

2021-11-22 22:14:46

JavaScript開發模塊

2022-08-04 18:50:12

Navigator瀏覽器設備

2016-12-30 13:43:35

異步編程RxJava

2009-11-17 09:47:54

Oracle SQL語

2010-09-14 15:04:42

list-styleCSS

2010-08-27 13:07:00

CSS規則

2010-08-30 10:46:13

DIV+CSS

2010-09-07 15:17:47

CSS優先權CSS

2021-05-06 07:26:55

CSS 文字動畫技巧

2010-08-25 13:48:51

CSSlist-style-

2009-11-12 10:05:09

Visual C++

2010-01-12 10:23:52

路由最佳路徑

2020-12-28 08:29:47

Vuecss框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品视频一区二区三区 | 国产日韩欧美在线 | 欧美日韩亚洲二区 | 亚洲一区二区精品视频 | 日本成人在线观看网站 | 日韩电影免费在线观看中文字幕 | 国产精品99久久久久久动医院 | av国产精品 | 欧美日韩在线看 | 亚洲一区二区三区四区五区中文 | 久久精品久久久久久 | 四虎在线观看 | 91在线视频网址 | 国产农村妇女精品一区 | 91精品国产一区二区三区 | 81精品国产乱码久久久久久 | 免费h在线 | 国产二区视频 | 久久99精品国产 | 国产成人精品一区二区三区在线 | 亚洲国产高清高潮精品美女 | 国产精品不卡 | 一区二区三区国产 | 亚洲一区中文字幕 | aaa级片 | 九九综合九九 | 久久久久久女 | 国产精品毛片无码 | 一区二区三区回区在观看免费视频 | 国产精品中文字幕一区二区三区 | 尤物视频在线免费观看 | 国产亚韩 | 欧美精品久久久 | 91人人看 | av一区二区三区四区 | 免费毛片在线 | 午夜视频免费在线 | 精品欧美黑人一区二区三区 | av免费网站在线 | 美女天堂在线 | 中文字幕一区二区三区四区 |