[CSS]一起來畫立方體: CSS perspective屬性

[CSS]一起來畫立方體: CSS transform屬性

  • transform
  • translate
  • rotate
  • perspective
  • perspective-origin

在畫立方體的例子中叨恨,CSS代碼中有以下兩個(gè)屬性致稀,它們有什么作用呢钱烟?

 .pers {
    perspective: 350px;
  }
  .cube {
    perspective-origin: 150% 150%;
  }

MDN上有下面的描述:

CSS屬性 perspective指定了觀察者與 z=0 平面的距離派阱,使具有三維位置變換的元素產(chǎn)生透視效果抹沪。 z>0 的三維元素比正常大递惋,而 z<0 時(shí)則比正常>
小硝拧,大小程度由該屬性的值決定椿疗。

perspective-origin 指定了觀察者的位置橱鹏,用作perspective屬性的消失點(diǎn)

在W3C膜蠢,perspective屬性則包含在css-transform文檔中:

Perspective can be used to add a feeling of depth to a scene by making elements higher on the Z axis (closer to the viewer) appear larger, and those further away to appear smaller. The scaling is proportional to d/(d ? Z) where d, the value of perspective, is the distance from the drawing plane to the assumed position of the viewer’s eye.

Normally the assumed position of the viewer’s eye is centered on a drawing. This position can be moved if desired by setting perspective-origin.

perspective_origin.png (圖源:w3.org)
perspective_origin.png (圖源:w3.org)

在上面的圖中,d就是perspective的值(觀察點(diǎn)到z=0的平面的距離)莉兰,想像一下挑围,在z=0的位置放一個(gè)屏幕,人站在屏幕前糖荒,一個(gè)物體從屏幕前慢慢移動(dòng)到屏幕后杉辙。

IMG_09E015049534-1.jpeg

物體從Z1 > Z2 > Z3過程中,在z=0處的投影逐漸變小了寂嘉∽嗨玻縮放的比例是多少呢枫绅?
根據(jù)數(shù)學(xué)模型,假設(shè)物體的高度為s硼端,投影的高度為ss并淋,那么 ss / s = d / (d - Z),即:perspective=12, 元素在z=6時(shí)珍昨,我們最后看到的效果是元素被放大兩倍后的大小县耽,如果元素在z=-12時(shí),我們最后看到的是元素被縮小到1/2镣典。

以上是perspective的理解兔毙,那么perspective-origin呢?我們一直都是假設(shè)觀察點(diǎn)在z軸上兄春,試想如果觀察占往上或往下偏移澎剥,整個(gè)元素是不是會(huì)被扭曲呢?

再看回立方體的例子赶舆,先把perspective設(shè)成100哑姚,perspective-origin設(shè)成none,每個(gè)面都是100*100的正方形芜茵。

<div class="container">
  <div class="cube pers">
    <div class="face front">1</div>
    <div class="face back">2</div>
    <div class="face right">3</div>
    <div class="face left">4</div>
    <div class="face top">5</div>
    <div class="face bottom">6</div>
  </div>
</div>
<style>
  .pers {
    perspective: 100px;
  }
  .container {
    width: 200px;
    height: 200px;
    margin: 100px 0 0 100px;
    border: none;
  }
  .cube {
    width: 100%;
    height: 100%;
    backface-visibility: visible;
    /* 把觀察點(diǎn)設(shè)置在中心 */
    perspective-origin: none;
    transform-style: preserve-3d;
  }
  .face {
    display: block;
    position: absolute;
    width: 100px;
    height: 100px;
    border: none;
    line-height: 100px;
    font-family: sans-serif;
    font-size: 60px;
    color: pink;
    background-color: thistle;
    text-align: center;
  }
  /* Define each face based on direction */
  .front {
    background: rgba(0, 0, 0, 0.3);
    transform: translateZ(50px);
  }
  .back {
    background: rgba(0, 255, 0, 1);
    color: black;
    transform: rotateY(180deg) translateZ(50px);
  }
  .right {
    background: rgba(196, 0, 0, 0.7);
    transform: rotateY(90deg) translateZ(50px);
  }
  .left {
    background: rgba(0, 0, 196, 0.7);
    transform: rotateY(-90deg) translateZ(50px);
  }
  .top {
    background: rgba(196, 196, 0, 0.7);
    transform: rotateX(90deg) translateZ(50px);
  }
  .bottom {
    background: rgba(196, 0, 196, 0.7);
    transform: rotateX(-90deg) translateZ(50px);
  }
</style>

效果:


正面(200*200)
背面(66.67*66.67)

我們只來研究一下正面和背面叙量,還記得學(xué)習(xí)transform的時(shí)候,正面是沿z軸平移50px九串,而背面是平移50px且旋轉(zhuǎn)180度绞佩,所以
front: z = 50px
back: z = -50px

根據(jù)上面 ss / s = d / (d - Z),來看看:
front:ss / 100 = 100 / (100 - 50) px -> ss = 200px
back: ss / 100 = 100 / (100 - (-50)) px -> ss = 66.67px

參考文檔:
[W3C] https://drafts.csswg.org/css-transforms-2/#perspective-property
[MDN] https://developer.mozilla.org/zh-CN/docs/Web/CSS/perspective
[MDN] https://developer.mozilla.org/zh-CN/docs/Web/CSS/perspective-origin

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猪钮,一起剝皮案震驚了整個(gè)濱河市品山,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烤低,老刑警劉巖谆奥,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拂玻,居然都是意外死亡酸些,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門檐蚜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魄懂,“玉大人,你說我怎么就攤上這事闯第∈欣酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)填帽。 經(jīng)常有香客問我蛛淋,道長(zhǎng),這世上最難降的妖魔是什么篡腌? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任褐荷,我火速辦了婚禮,結(jié)果婚禮上嘹悼,老公的妹妹穿的比我還像新娘叛甫。我一直安慰自己,他們只是感情好杨伙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布其监。 她就那樣靜靜地躺著,像睡著了一般限匣。 火紅的嫁衣襯著肌膚如雪抖苦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天米死,我揣著相機(jī)與錄音睛约,去河邊找鬼。 笑死哲身,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贸伐。 我是一名探鬼主播勘天,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捉邢!你這毒婦竟也來了脯丝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤伏伐,失蹤者是張志新(化名)和其女友劉穎宠进,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藐翎,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡材蹬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吝镣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堤器。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖末贾,靈堂內(nèi)的尸體忽然破棺而出闸溃,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布辉川,位于F島的核電站表蝙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乓旗。R本人自食惡果不足惜府蛇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寸齐。 院中可真熱鬧欲诺,春花似錦、人聲如沸渺鹦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅厚。三九已至塞颁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吸耿,已是汗流浹背祠锣。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咽安,地道東北人伴网。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像妆棒,于是被迫代替她去往敵國(guó)和親澡腾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在學(xué)習(xí)transition, transform和translate這三個(gè)屬性的時(shí)候糕珊,發(fā)現(xiàn)了一個(gè)例子包括了以下幾個(gè)...
    iamsharleen閱讀 520評(píng)論 0 0
  • CSS選擇器 基本選擇器 /*通配符選擇器*/ * { margin: 0; padding: 0; b...
    小樓夜聽風(fēng)雨閱讀 351評(píng)論 0 0
  • transform介紹 可控制css元素的位移及旋轉(zhuǎn)狀態(tài)动分,可單獨(dú)使用,也可與perspective透視一起使用红选。以...
    Shaw007閱讀 5,201評(píng)論 0 0
  • 引用CSS方式 內(nèi)部引用 html文件中寫一個(gè) 標(biāo)簽澜公,并將樣式寫入到里面,舉例: 外部引用 通過 標(biāo)簽實(shí)現(xiàn)喇肋,里面有...
    dawsonenjoy閱讀 444評(píng)論 0 0
  • transform介紹 可控制css元素的位移及旋轉(zhuǎn)狀態(tài)坟乾,可單獨(dú)使用,也可與perspective透視一起使用蝶防。 ...
    亞哲閱讀 3,512評(píng)論 0 0