成人免费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

2016-12-30 13:43:35

異步編程RxJava

2009-11-17 09:47:54

Oracle SQL語

2009-11-13 15:55:52

Oracle哈希連接

2021-11-22 22:14:46

JavaScript開發模塊

2022-08-04 18:50:12

Navigator瀏覽器設備

2010-09-14 15:04:42

list-styleCSS

2010-09-07 15:17:47

CSS優先權CSS

2010-08-27 13:07:00

CSS規則

2010-08-30 10:46:13

DIV+CSS

2010-01-12 10:23:52

路由最佳路徑

2021-05-06 07:26:55

CSS 文字動畫技巧

2020-12-28 08:29:47

Vuecss框架

2009-11-12 10:05:09

Visual C++

2010-08-25 13:48:51

CSSlist-style-
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产剧情一区 | 午夜免费福利电影 | 久久久久久免费精品一区二区三区 | 日韩高清中文字幕 | 日韩综合在线播放 | 91 久久 | 亚洲欧洲小视频 | 国产一级在线观看 | 91高清在线观看 | 一区二区精品在线 | 在线观看中文字幕dvd播放 | 毛片网站在线观看视频 | 欧美一区二区大片 | 免费观看av | 免费一级欧美在线观看视频 | 国产福利在线视频 | 久久精品亚洲精品国产欧美 | 国产激情视频网站 | 免费一看一级毛片 | 孕妇一级毛片 | 欧美特级黄色 | 久久精品国产免费一区二区三区 | av黄色在线| 精品欧美乱码久久久久久 | 成人亚洲性情网站www在线观看 | 亚洲成人av| 久久国产精品偷 | 国产日韩欧美精品一区二区 | 成人做爰www免费看视频网站 | 日韩高清一区二区 | 亚洲免费福利视频 | 精品欧美黑人一区二区三区 | 中文字幕在线观看视频网站 | 欧美亚洲视频 | 在线国产视频观看 | 久久伊人久久 | 超碰人人在线 | 免费国产精品久久久久久 | 能看的av网站 | 日本a在线| 亚洲精品久久久久久久久久吃药 |