国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
透視基礎(chǔ)
透視值
透視原點(diǎn)
變換
讓我們看看更有趣的東西
HTML
通用CSS
變換面
動(dòng)畫
接下來(lái)的步驟?
首頁(yè) web前端 css教學(xué) CSS觀點(diǎn)如何工作

CSS觀點(diǎn)如何工作

Apr 02, 2025 pm 02:19 PM

How CSS Perspective Works

CSS動(dòng)畫愛(ài)好者經(jīng)常會(huì)用到透視(perspective)這個(gè)強(qiáng)大的工具。雖然透視屬性本身無(wú)法實(shí)現(xiàn)3D效果(因?yàn)榛拘螤顩](méi)有深度),但您可以使用transform屬性在3D空間(X、Y和Z軸)移動(dòng)和旋轉(zhuǎn)對(duì)象,然後使用透視來(lái)控制深度。

本文將從基礎(chǔ)知識(shí)開始,逐步講解透視的概念,最終創(chuàng)建一個(gè)完整的3D旋轉(zhuǎn)立方體動(dòng)畫。

透視基礎(chǔ)

我們從一個(gè)簡(jiǎn)單的綠色正方形開始,並在三個(gè)軸上移動(dòng)它。

在X和Y軸上移動(dòng)對(duì)象非常簡(jiǎn)單,但如果在Z軸上移動(dòng)它,看起來(lái)正方形保持不變。這是因?yàn)楫?dāng)對(duì)像在Z軸上移動(dòng)時(shí),動(dòng)畫使它靠近我們,然後遠(yuǎn)離我們,但正方形的大?。ê臀恢茫┍3植蛔儭_@就是CSS perspective屬性發(fā)揮作用的地方。

雖然透視在對(duì)像在X或Y軸上移動(dòng)時(shí)沒(méi)有影響,但當(dāng)對(duì)像在Z軸上移動(dòng)時(shí),透視使正方形在靠近我們時(shí)看起來(lái)更大,在遠(yuǎn)離我們時(shí)看起來(lái)更小。是的,就像在現(xiàn)實(shí)生活中一樣。

同樣的效果也發(fā)生在我們旋轉(zhuǎn)對(duì)象時(shí):

在Z軸上旋轉(zhuǎn)正方形看起來(lái)像是我們都熟悉和喜愛(ài)的常規(guī)旋轉(zhuǎn),但是當(dāng)我們?cè)赬或Y軸上旋轉(zhuǎn)正方形(不使用透視)時(shí),它看起來(lái)只是正方形變?。ɑ蜃冋┒皇切D(zhuǎn)。但是當(dāng)我們添加透視時(shí),我們可以看到當(dāng)正方形旋轉(zhuǎn)時(shí),正方形的近側(cè)看起來(lái)更大,遠(yuǎn)側(cè)看起來(lái)更小,旋轉(zhuǎn)看起來(lái)符合預(yù)期。

請(qǐng)注意,當(dāng)對(duì)像在X或Y軸上的旋轉(zhuǎn)角度為90°(或270°、450°、630°等)時(shí),它將“消失”在視野之外。同樣,這是因?yàn)槲覀儫o(wú)法向?qū)ο筇砑由疃?,在這個(gè)位置,正方形的寬度(或高度)實(shí)際上將為0。

透視值

我們需要使用一個(gè)值來(lái)設(shè)置perspective屬性。此值設(shè)置對(duì)象平面的距離,或者換句話說(shuō),透視的強(qiáng)度。值越大,您離對(duì)象越遠(yuǎn);值越小,透視效果越明顯。

透視原點(diǎn)

perspective-origin屬性確定您“觀察”對(duì)象的方位。如果原點(diǎn)居中(這是默認(rèn)值)並且對(duì)象向右移動(dòng),則看起來(lái)您是從左側(cè)觀察它(反之亦然)。

或者,您可以將對(duì)象居中並移動(dòng)perspective-origin 。當(dāng)原點(diǎn)設(shè)置為側(cè)面時(shí),就像您從該側(cè)面“觀察”對(duì)像一樣。值越大,看起來(lái)越偏離中心。

變換

雖然perspectiveperspective-origin都設(shè)置在元素的父容器上,並確定消失點(diǎn)的位置(即從您“觀察”對(duì)象的位置到對(duì)象平面的距離),但對(duì)象的位移和旋轉(zhuǎn)是使用transform屬性設(shè)置的,該屬性在對(duì)象本身上聲明。

如果您查看前面示例的代碼,我將正方形從一側(cè)移動(dòng)到另一側(cè),您會(huì)看到我使用了translateX()函數(shù)——這是有道理的,因?yàn)槲蚁胱屗豖軸移動(dòng)。但是請(qǐng)注意,它被分配給transform屬性。該函數(shù)是一種直接應(yīng)用於我們要轉(zhuǎn)換的元素的變換類型,但其行為符合分配給父元素的透視規(guī)則。

我們可以將多個(gè)函數(shù)“鏈接”到transform屬性。但是當(dāng)使用多個(gè)變換時(shí),需要考慮三件非常重要的事情:

  1. 旋轉(zhuǎn)對(duì)象時(shí),其坐標(biāo)系會(huì)隨著對(duì)像一起變換。
  2. 平移對(duì)象時(shí),它相對(duì)於自身的坐標(biāo)系移動(dòng)(而不是其父坐標(biāo))。
  3. 這些值的書寫順序會(huì)(並且會(huì))改變最終結(jié)果。

為了獲得我在前面演示中想要的效果,我首先需要在X軸上平移正方形。只有這樣我才能旋轉(zhuǎn)它。如果這樣做順序顛倒(先旋轉(zhuǎn),然後平移),則結(jié)果將完全不同。

為了強(qiáng)調(diào)值順序?qū)?code>transform屬性的重要性,讓我們來(lái)看幾個(gè)簡(jiǎn)單的例子。首先,是對(duì)兩個(gè)正方形的簡(jiǎn)單二維(2D)變換,這兩個(gè)正方形都具有相同的變換值,但聲明順序不同:

即使我們?cè)赮軸上旋轉(zhuǎn)正方形,情況也是一樣的:

需要注意的是,雖然值的順序很重要,但我們可以簡(jiǎn)單地更改值本身來(lái)獲得所需的結(jié)果,而不是更改值的順序。例如……

 <code>transform: translateX(100px) rotateY(90deg);</code>

……與以下效果相同:

 <code>transform: rotateY(90deg) translateZ(100px);</code>

這是因?yàn)樵诘谝恍兄?,我們?cè)谛D(zhuǎn)對(duì)象之前在X軸上移動(dòng)了對(duì)象,但在第二行中,我們旋轉(zhuǎn)了對(duì)象,更改了其坐標(biāo),然後在Z軸上移動(dòng)了它。相同的結(jié)果,不同的值。

讓我們看看更有趣的東西

當(dāng)然,正方形是解釋透視一般概念的好方法,但是當(dāng)我們分解成三維(3D)形狀時(shí),我們才能真正看到透視是如何工作的。

讓我們使用到目前為止我們已經(jīng)介紹的所有內(nèi)容來(lái)構(gòu)建一個(gè)3D立方體。

HTML

我們將創(chuàng)建一個(gè).container元素,它圍繞一個(gè).cube元素,而.cube元素又包含六個(gè)元素,代表立方體的六個(gè)面。

<div class="container">
  <div class="cube">
    <div class="side front"></div>
    <div class="side back"></div>
    <div class="side left"></div>
    <div class="side right"></div>
    <div class="side top"></div>
    <div class="side bottom"></div>
  </div>
</div>

通用CSS

首先,我們將向父.container元素添加一些透視。然後,我們將確保.cube元素具有200px的邊長(zhǎng)並遵守3D變換。我在這裡添加了一些表現(xiàn)性樣式,但關(guān)鍵屬性已突出顯示。

 /* 父容器,具有透視*/
.container {
  width: 400px;
  height: 400px;
  border: 2px solid white;
  border-radius: 4px;
  display: flex;
  justify-content: center;
  align-items: center;
  perspective: 800px;
  perspective-origin: top right;
}

/* 子元素,保留3D變換*/
.cube {
  position: relative;
  width: 200px;
  height: 200px;
  transform-style: preserve-3d;
}

/* 立方體的面,絕對(duì)定位*/
.side {
  position: absolute;
  width: 100%;
  height: 100%;
  opacity: 0.9;
  border: 2px solid white;
}

/* 立方體面的背景顏色,有助於可視化工作*/
.front { background-color: #d50000; }
.back { background-color: #aa00ff; }

.left { background-color: #304ffe; }
.right { background-color: #0091ea; }

.top { background-color: #00bfa5; }
.bottom { background-color: #64dd17; }

變換面

正面是最簡(jiǎn)單的。我們將它向前移動(dòng)100px:

 .front {
  background-color: #d50000;
  transform: translateZ(100px);
}

我們可以通過(guò)添加translateZ(-100px)將立方體的背面向後移動(dòng)。另一種方法是旋轉(zhuǎn)側(cè)面180deg,然後向前移動(dòng):

 .back {
  background-color: #aa00ff;
  transform: translateZ(-100px);

  /* or */
  /* transform: rotateY(180deg) translateZ(100px); */
}

像背面一樣,我們可以通過(guò)幾種方法來(lái)變換左右側(cè):

 .left {
  background-color: #304ffe;
  transform: rotateY(90deg) translateZ(100px);

  /* or */
  /* transform: translateX(100px) rotateY(90deg); */
}

.right {
  background-color: #0091ea;
  transform: rotateY(-90deg) translateZ(100px);

  /* or */
  /* transform: translateX(-100px) rotateY(90deg); */
}

頂部和底部略有不同。我們不需要在Y軸上旋轉(zhuǎn)它們,而需要在X軸上旋轉(zhuǎn)它們。同樣,它可以通過(guò)幾種不同的方式完成:

 .top {
  background-color: #00Bfa5;
  transform: rotateX(90deg) translateZ(100px);

  /* or */
  /* transform: translateY(-100px) rotateX(90deg); */
}

.bottom {
  background-color: #64dd17;
  transform: rotateX(-90deg) translateZ(100px);

  /* or */
  /* transform: translateY(100px) rotateX(90deg); */
}

這就得到了一個(gè)3D立方體!

隨意嘗試不同的perspectiveperspective-origin選項(xiàng),看看它們?nèi)绾斡绊懥⒎襟w。沒(méi)有一個(gè)“正確”的值,這些值因項(xiàng)目而異,因?yàn)樗鼈內(nèi)Q於動(dòng)畫、對(duì)象的大小以及您想要實(shí)現(xiàn)的效果。

讓我們談?wù)?code>transform-style

我們將向立方體添加一些精美的動(dòng)畫,但是讓我們首先討論transform-style屬性。我之前在通用CSS中添加了它,但並沒(méi)有真正解釋它是什麼或它做什麼。

transform-style屬性有兩個(gè)值:

  • flat (默認(rèn)值)
  • preserve-3d

當(dāng)我們將屬性設(shè)置為preserve-3d時(shí),它會(huì)做兩件重要的事情:

  1. 它告訴立方體的面(子元素)與立方體位於相同的3D空間中。如果未將其設(shè)置為preserve-3d ,則默認(rèn)值為flat ,並且面在立方體的平面上被展平。 preserve-3d將立方體的透視“複製”到其子元素(面),並允許我們僅旋轉(zhuǎn)立方體,因此我們不需要分別為每個(gè)面設(shè)置動(dòng)畫。
  2. 它根據(jù)子元素在3D空間中的位置顯示它們,而不管它們?cè)贒OM中的位置如何。

此示例中有三個(gè)正方形——綠色、紅色和藍(lán)色。綠色正方形的translateZ值為100px,這意味著它位於其他正方形的前面。藍(lán)色正方形的translateZ值為-100px,這意味著它位於其他正方形的後面。

但在DOM中,正方形的順序是:綠色、紅色、藍(lán)色。因此,當(dāng)transform-style設(shè)置為flat (或根本未設(shè)置)時(shí),藍(lán)色正方形將顯示在頂部,綠色正方形將在後面,因?yàn)檫@是DOM的順序。但是,如果我們將transform-style設(shè)置為preserve-3d ,它將根據(jù)其在3D空間中的位置進(jìn)行渲染。結(jié)果,綠色正方形將在前面,藍(lán)色正方形將在後面。

動(dòng)畫

現(xiàn)在,讓我們?yōu)榱⒎襟w設(shè)置動(dòng)畫!為了使事情更有趣,我們將動(dòng)畫添加到所有三個(gè)軸。首先,我們將animation屬性添加到.cube 。它現(xiàn)在還不會(huì)做任何事情,因?yàn)槲覀冞€沒(méi)有定義動(dòng)畫關(guān)鍵幀,但是當(dāng)我們這樣做時(shí),它已經(jīng)到位了。

 animation: cubeRotate 10s linear infinite;

現(xiàn)在是關(guān)鍵幀。我們基本上要沿每個(gè)軸旋轉(zhuǎn)立方體,使其看起來(lái)像在空間中滾動(dòng)。

 @keyframes cubeRotate {
  from { transform: rotateY(0deg) rotateX(720deg) rotateZ(0deg); }
  to { transform: rotateY(360deg) rotateX(0deg) rotateZ(360deg); }
}

perspective屬性實(shí)際上是賦予動(dòng)畫深度的屬性,就像我們看到立方體向左和向右滾動(dòng),以及向前和向後滾動(dòng)一樣。

但是在此之前, perspective屬性的值是一致的, perspective-origin也是如此。讓我們看看更改這些值如何影響立方體的外觀。

我已在此示例中添加了三個(gè)滑塊,以幫助查看不同的值如何影響立方體的透視:

  • 左側(cè)滑塊設(shè)置perspective屬性的值。記住,此值設(shè)置對(duì)象平面的距離,因此值越小,透視效果越明顯。
  • 另外兩個(gè)滑塊指的是perspective-origin屬性。右側(cè)滑塊在垂直軸上設(shè)置原點(diǎn),從上到下,底部滑塊在水平軸上設(shè)置原點(diǎn),從右到左。

請(qǐng)注意,在動(dòng)畫運(yùn)行時(shí),這些變化可能不太明顯,因?yàn)榱⒎襟w本身在旋轉(zhuǎn),但是您可以通過(guò)單擊“運(yùn)行動(dòng)畫”按鈕輕鬆關(guān)閉動(dòng)畫。

隨意嘗試這些值,並了解它們?nèi)绾斡绊懥⒎襟w的外觀。沒(méi)有一個(gè)“正確”的值,這些值因項(xiàng)目而異,因?yàn)樗鼈內(nèi)Q於動(dòng)畫、對(duì)象的大小以及您想要實(shí)現(xiàn)的效果。

接下來(lái)的步驟?

既然您已經(jīng)掌握了CSS中perspective屬性的基礎(chǔ)知識(shí),您可以發(fā)揮您的想像力和創(chuàng)造力,在您自己的項(xiàng)目中創(chuàng)建3D對(duì)象,為您的按鈕、菜單、輸入和其他任何您想要“賦予生命”的東西添加深度和趣味。

同時(shí),您可以嘗試創(chuàng)建一些複雜的結(jié)構(gòu)和基於透視的動(dòng)畫來(lái)練習(xí)和提高您的技能,例如這個(gè)、這個(gè)、這個(gè),甚至這個(gè)。

我希望您喜歡閱讀這篇文章並在過(guò)程中學(xué)習(xí)到一些新東西!隨意留下評(píng)論,讓我知道您的想法,或者如果您對(duì)本文中的透視或任何其他主題有任何疑問(wèn),請(qǐng)?jiān)赥witter上給我留言。

以上是CSS觀點(diǎn)如何工作的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

什麼是'渲染障礙CSS”? 什麼是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會(huì)阻塞頁(yè)面渲染是因?yàn)闉g覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量?jī)?nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。 1.提取關(guān)鍵CSS並內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過(guò)JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合併CSS減少請(qǐng)求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過(guò)度拆分與復(fù)雜腳本控制。

外部與內(nèi)部CSS:最好的方法是什麼? 外部與內(nèi)部CSS:最好的方法是什麼? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個(gè)根據(jù)目標(biāo)瀏覽器範(fàn)圍自動(dòng)為CSS屬性添加廠商前綴的工具。 1.它解決了手動(dòng)維護(hù)前綴易出錯(cuò)的問(wèn)題;2.通過(guò)PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項(xiàng)有不手動(dòng)加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

CSS案例靈敏度:了解重要的 CSS案例靈敏度:了解重要的 Jun 20, 2025 am 12:09 AM

cssismostlycaseminemintiment,buturlsandfontfamilynamesarecase敏感。 1)屬性和valueslikeColor:紅色; prenotcase-sensive.2)urlsmustmustmatchtheserver'server'scase,例如

什麼是圓錐級(jí)函數(shù)? 什麼是圓錐級(jí)函數(shù)? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

CSS教程,用於創(chuàng)建粘性標(biāo)頭或頁(yè)腳 CSS教程,用於創(chuàng)建粘性標(biāo)頭或頁(yè)腳 Jul 02, 2025 am 01:04 AM

TocreatestickyheadersandfooterswithCSS,useposition:stickyforheaderswithtopvalueandz-index,ensuringparentcontainersdon’trestrictit.1.Forstickyheaders:setposition:sticky,top:0,z-index,andbackgroundcolor.2.Forstickyfooters,betteruseposition:fixedwithbot

CSS自定義屬性的範(fàn)圍是什麼? CSS自定義屬性的範(fàn)圍是什麼? Jun 25, 2025 am 12:16 AM

CSS自定義屬性的作用域取決於其聲明的上下文,全局變量通常定義在:root中,而局部變量則定義在特定選擇器內(nèi),以便組件化和隔離樣式。例如,定義在.card類中的變量?jī)H對(duì)匹配該類的元素及其子元素可用。最佳實(shí)踐包括:1.使用:root定義全局變量如主題色;2.在組件內(nèi)部定義局部變量以實(shí)現(xiàn)封裝;3.避免重複聲明同一變量;4.注意選擇器特異性可能引發(fā)的覆蓋問(wèn)題。此外,CSS變量區(qū)分大小寫,且應(yīng)在使用前定義以避免錯(cuò)誤。若變量未定義或引用失敗,則會(huì)採(cǎi)用回退值或默認(rèn)值initial。調(diào)試時(shí)可通過(guò)瀏覽器開發(fā)者工

解鎖CSS動(dòng)畫的潛力:深度潛水 解鎖CSS動(dòng)畫的潛力:深度潛水 Jun 20, 2025 am 12:14 AM

cssanimationsenhancewebpagesbyimprovinguserexperienceandsiteFunctionallity.1)usetransitionsforsmoothstylechanges,asinthebuttoncolorexample.2)losplyKeyKeyframesforeSfordEteTailEdAnimations.3)

See all articles