日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

快速了解 CSS @starting-style 規則

來源: 責編: 時間:2023-11-20 17:12:19 335觀看
導讀一、快速了解 @starting-style通常做一個動畫效果,你可能會考慮 transition 和 animation。相對于animation,transition使用更簡單,但是有一定條件,需要有狀態的改變,例如手動添加一個class。div{ transform: scale(0)}di

sIr28資訊網——每日最新資訊28at.com

一、快速了解 @starting-style

通常做一個動畫效果,你可能會考慮 transition 和 animation。sIr28資訊網——每日最新資訊28at.com

相對于animation,transition使用更簡單,但是有一定條件,需要有狀態的改變,例如手動添加一個class。sIr28資訊網——每日最新資訊28at.com

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

示意如下:sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

但是,如果這個show是一開始就存在的,比如:sIr28資訊網——每日最新資訊28at.com

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

這樣在頁面打開的時候,肯定也是沒有過渡效果的,因為沒有狀態的變化。sIr28資訊網——每日最新資訊28at.com

在以前,我們可以換成用animation的方式,這樣即使是一開始存在的,也能有動畫效果,因為animation是可以自動運行的。sIr28資訊網——每日最新資訊28at.com

不過到了現在,我們可以用transition的方式來實現了,將上面的例子改寫一下。sIr28資訊網——每日最新資訊28at.com

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

這里的@starting-style表示初始樣式,相當于在渲染之前就有了一個初始狀態,這樣也就算有狀態變化了。sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

實際效果如下(每次刷新瀏覽器都有放大動畫)。sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

這樣,即使不手動添加狀態也能觸發過渡動效了,這就是@starting-style。sIr28資訊網——每日最新資訊28at.com

二、元素添加時添加過渡

有時候,即使是手動添加class,也無法保證一定能觸發過渡動效,比如新創建的元素。sIr28資訊網——每日最新資訊28at.com

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

這種情況下,transition就失效了,因為你在添加class的時候元素還未完全渲染。sIr28資訊網——每日最新資訊28at.com

要解決這個問題,之前也有幾種方式。sIr28資訊網——每日最新資訊28at.com

首先是定時器,添加一點點延時。sIr28資訊網——每日最新資訊28at.com

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

還有一種方式,主動觸發元素的渲染,強制重繪。sIr28資訊網——每日最新資訊28at.com

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

另外,還可以用動畫animation來代替,這樣也能主動觸發動畫。sIr28資訊網——每日最新資訊28at.com

.show{  animation: ...}

現在,使用@starting-style也能實現這樣的效果。sIr28資訊網——每日最新資訊28at.com

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

下面是一個元素出現過渡效果:sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

你也可以訪問以下鏈接查看實際效果(Chrome 117+)sIr28資訊網——每日最新資訊28at.com

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

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

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)}

效果如下,第一次創建的時候也有過渡效果:sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

有興趣的可以回顧之前這篇4年前的文章:css3元素出現動畫實例 。sIr28資訊網——每日最新資訊28at.com

三、讓 display:none 也支持過渡

大家可能知道,當一個元素從display:none變成display:block時,是無法觸發過渡效果的,即便有一些過渡屬性。sIr28資訊網——每日最新資訊28at.com

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

像這種情況下沒有過渡效果的,如下:sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

不過,現在有了@starting-style,也能輕易實現過渡效果,不管你有沒有display:none。sIr28資訊網——每日最新資訊28at.com

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

效果如下:sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

遺憾的是,從display:block變為display:none是無法觸發過渡效果的。sIr28資訊網——每日最新資訊28at.com

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

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

效果如下:sIr28資訊網——每日最新資訊28at.com

sIr28資訊網——每日最新資訊28at.com

你也可以訪問以下鏈接查看實際效果(Chrome 117+)sIr28資訊網——每日最新資訊28at.com

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

四、總結一下

一個可以改變元素初始狀態的新特性,你學到了嗎?sIr28資訊網——每日最新資訊28at.com

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

不過像這樣的 CSS 特性注定是冷門屬性,主要是可替代性太強了,而且不知道什么時候才可以正式投入使用,現在就當提前了解吧。sIr28資訊網——每日最新資訊28at.com

[0]css3元素出現動畫實例: https://segmentfault.com/a/1190000018889396。sIr28資訊網——每日最新資訊28at.com

[1]CSS @style-rule (juejin.cn): https://code.juejin.cn/pen/7299436237318799423。sIr28資訊網——每日最新資訊28at.com

[2]CSS @style-rule (codepen.io): https://codepen.io/xboxyan/pen/ZEwKYpR。sIr28資訊網——每日最新資訊28at.com

[3]CSS @style-rule display (juejin.cn): https://code.juejin.cn/pen/7299479246152400896。sIr28資訊網——每日最新資訊28at.com

[4]CSS @style-rule display (codepen.io): https://code.juejin.cn/pen/7299479246152400896。sIr28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-31550-0.html快速了解 CSS @starting-style 規則

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++中的內聯函數:提高程序效率

下一篇: RabbitMQ工作模式-Routing路由模式

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 泉州市| 绥江县| 桂林市| 姜堰市| 怀宁县| 敦煌市| 望城县| 鄯善县| 丽水市| 沧州市| 会理县| 上蔡县| 莎车县| 枝江市| 通江县| 桦南县| 开远市| 都匀市| 巴里| 涿鹿县| 四子王旗| 奉节县| 汉源县| 台山市| 武功县| 太仆寺旗| 西和县| 舟曲县| 贺州市| 项城市| 桐柏县| 舟山市| 荃湾区| 涟源市| 唐河县| 离岛区| 无锡市| 紫阳县| 沛县| 恩施市| 广汉市|