欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

CSS3之2D與3D變換的實(shí)現(xiàn)方法

  發(fā)布時(shí)間:2019-01-28 15:31:47   作者:黃琦雲(yún)   我要評(píng)論
css3實(shí)現(xiàn)了對(duì)元素執(zhí)行2D平面變換,以及視覺上的3D空間變換,2D變換平時(shí)可能用的較多,3D效果也能錦上添花,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

css3實(shí)現(xiàn)了對(duì)元素執(zhí)行2D平面變換,以及視覺上的3D空間變換,2D變換平時(shí)可能用的較多,3D效果也能錦上添花;

關(guān)于坐標(biāo)軸

初中數(shù)學(xué)的幾何學(xué)里我們便開始接觸坐標(biāo)軸,最基本的是平面直角坐標(biāo)系 XoY ,然后延伸出空間直角坐標(biāo)系 XYZ ,現(xiàn)在我們來說一下css中的坐標(biāo)系;

css甚至一下設(shè)備相關(guān)的開發(fā)中,基本都遵循這樣一套坐標(biāo)系:以手機(jī)屏幕為例,坐標(biāo)系 圓點(diǎn) 位于屏幕最左上角; x軸 水平,向右為正方向; y軸 垂直,向下為正方向; z軸 垂直于整個(gè)屏幕平面,向外為正方向,就是屏幕光線射向你眼睛的方向;

如圖:

2D變換

包括平移 translate() ,旋轉(zhuǎn) rotate() ,縮放 scale() ,傾斜 skew() ,矩陣 matrix() ;

translate(x,y)

平移操作,包括 translateX(x) , translateY(y) ,括號(hào)內(nèi)填平移參數(shù)值,可以是負(fù)值,即反方向;

例如:

div {
    /*元素向右平移50px,向下移60px*/
    transform: translateX(50px);
    transform: translateY(60px);
}
/*簡(jiǎn)寫形式,效果相同*/
div {
    transform: translate(50px, 60px);
}

注意 translate() 只指定一個(gè)值則默認(rèn)是 x軸 位移,即水平移動(dòng);

rotate(deg)

元素旋轉(zhuǎn),括號(hào)中參數(shù)為旋轉(zhuǎn)角度, 順時(shí)針 為正值, 逆時(shí)針 為負(fù)值,單位為 deg ,即多少度;

例如:

div {
    /* 順時(shí)針旋轉(zhuǎn)30° */
    transform: rotate(30deg);
}

scale(x,y)

縮放元素,參數(shù)分別為x軸,y軸縮放倍數(shù),包括 scaleX(x)scaleY(y) ,提供一個(gè)參數(shù)表示 按比例 縮放;

例如:

div {
    /* 橫向縮小一半,縱向放大一倍 */
    transform: scale(.5, 2);
}

div {
    /* 按比例放大3倍 */
    transform: scale(3);
}

skew(xdeg,ydeg)

包含 skewX(deg) , skewY(deg) ,表示在水平和垂直方向傾斜的角度;

例如:

div {
    transform: skewX(30deg);
    transform: skewY(45deg);
}
/* 簡(jiǎn)寫 */
div {
    transform: skew(30deg, 45deg);
}

需要 注意 ,如果元素為一個(gè)矩形,那么 skewX(30deg) 表示矩形 頂邊固定 ,底邊 向右 傾斜 30deg ; skewY(30deg) 表示矩形 左邊框固定 ,右邊框 向下 傾斜 30deg ;

可以根據(jù)上面講的屏幕坐標(biāo)系來記憶,x軸位于屏幕頂部,方向向右;y軸位于屏幕左部,方向向下;

如果 skew() 只指定一個(gè)值,默認(rèn)是 水平傾斜 ;

skewX(30deg)的效果:

skewY(30deg)的效果:

matrix(a,b,c,d,e)

這是一個(gè)綜合屬性,之前的平移,縮放,旋轉(zhuǎn),傾斜都能通過這個(gè)矩陣函數(shù)實(shí)現(xiàn),對(duì),大學(xué)里 線性代數(shù) 中的矩陣 T_T;

其實(shí)這個(gè)函數(shù)就是前面四種操作的 原理 ,函數(shù)共有六個(gè)參數(shù),四種操作都對(duì)應(yīng)不同的參數(shù)改變方式,像我們這種非數(shù)學(xué)專業(yè)的就不贅述原理了,前面的操作基本夠用了(想尋找刺激就去百度“css matrix”吧)~~;

3D變換

所謂3D就是在前面2D平面上多了一個(gè) z軸 ,方法名也差不多,然后能以分別以三根軸位基準(zhǔn)進(jìn)行變換,實(shí)現(xiàn)立體效果;

看一下所有3D操作方法:

translate3d(x,y,z)

結(jié)合前面講的空間坐標(biāo)系和 x, y, z軸的位置,三個(gè)參數(shù)分別對(duì)應(yīng)元素在三個(gè)坐標(biāo)軸方向的平移值,也包含三個(gè)方法 translateX(x) , translateY(y) , translateZ(z) ;

舉例:

div {
    transform: translateX(50px);
    transform: translateY(60px);
    transform: translateZ(70px);
}
/* 簡(jiǎn)寫 */
div {
    transform: translate3d(50px, 60px, 70px);
}

注意:關(guān)于設(shè)置 translateZ(z) 看不出效果的問題,后面說到設(shè)置 persoective 時(shí)會(huì)解釋;

rotate3d(x,y,z,deg)

參數(shù) x, y, z 為空間坐標(biāo)系的一個(gè)坐標(biāo)位置,然后由原點(diǎn) (0, 0, 0) 指向這個(gè)點(diǎn)形成一個(gè)有方向的新軸,數(shù)學(xué)中稱矢量,最后一個(gè)參數(shù)就是元素圍繞剛才所形成的新軸旋轉(zhuǎn)的度數(shù);

也包括 rotateX(deg) , rotateY(deg) , rotateZ(deg) ,之前2D的 rotate() 便是這里的 rotateZ() ;

至于旋轉(zhuǎn)的方向,判斷方法類似于物理中的 左手定則 :角度指定為正的話,左手拇指與四指垂直,拇指指向元素圍繞旋轉(zhuǎn)的坐標(biāo)軸或自定義軸,四指彎曲圍繞方向就是旋轉(zhuǎn)方向;

舉例:

div {
    transform: rotateX(30deg);
    transform: rotateY(30deg);
    transform: rotataZ(30deg);
}
/* 自定義軸旋轉(zhuǎn) */
div {
    transform: rotate3d(10, 10, 10, 30deg);
}

rotateX(30deg)的效果:

rotateY(30deg)的效果:

關(guān)于為什么這里的旋轉(zhuǎn)不是想象中的效果,而是縮小,主要是沒有設(shè)置視點(diǎn),后面會(huì)講;

scale3d(x,y,z)

元素關(guān)于三個(gè)軸的縮放比例,包括 scaleX(x) , scaleY(y) , scaleZ(z) ,舉例:

div {
    transform: scaleX(2);
    transform: scaleY(2);
    transform: scaleZ(2);
}
/* 簡(jiǎn)寫 */
div {
    transform: scale3d(2, 2, 2);
}

需要 注意 這里的 scaleZ() ,正常情況下,擴(kuò)大z軸會(huì)是物體 變厚 ,但是css里面呈現(xiàn)的平面元素并沒有 厚度 ,所以這里的縮放z軸其實(shí)是縮放元素在z軸的 坐標(biāo) ,所以要有效果必須要指定 translateZ() 的值;

舉例:

body {
    perspective: 500;
}
div {
    /* 必須這個(gè)順序,先縮放后平移,不然無效果 */
    transform: scaleZ(2) translateZ(100px);
}

按照上面樣式才能看到 scaleZ(2) 的效果,因?yàn)楹竺嬖趜軸上移動(dòng)了 100px ,縮放比例為2,最終會(huì)移動(dòng) 200px ,屏幕上則表現(xiàn)為元素放大了一下,這是透視效果,就是那個(gè) perspective 值,下面會(huì)講到;

matrix3d()

和前面2D的 matrix() 相似,只不過這里括號(hào)里的參數(shù)有 16個(gè) ,矩陣更加復(fù)雜,跳過吧﹋o﹋,有興趣可以自行百度~~;

perspective

在上面的示例中,有關(guān)z軸的平移和縮放通常情況下是看不出效果的,正是缺少這項(xiàng)屬性值,叫做 透視 ,美術(shù)或設(shè)計(jì)中會(huì)出現(xiàn)這個(gè)詞匯,就是實(shí)現(xiàn)物體近大遠(yuǎn)小的效果,遠(yuǎn)小最終會(huì)小到一個(gè)點(diǎn),那就是 透視點(diǎn)perspective 就是用來設(shè)置那個(gè)點(diǎn)距離元素有多遠(yuǎn),一般300~600很體現(xiàn)很好的透視效果, 值越小元素透視變形越嚴(yán)重 ;

需要 注意 的是,這項(xiàng)屬性設(shè)置在應(yīng)用透視效果元素的 父元素 的樣式中,才能看出效果,例如:

body {
    perspective: 500;
    /* 考慮瀏覽器兼容 */
    -webkit-perspective: 500;
}

也可以設(shè)置在元素本身,格式為:

div {
    transform: perspective(500);
    -webkit-transform: perspective(500);
}

rotateX(45deg)的更真實(shí)的效果:

rotateY(45deg)的效果:

perspective-origin

此項(xiàng)設(shè)置透視點(diǎn)的位置,默認(rèn)在元素幾何中心,需要設(shè)置的話,格式如下:

body {
    /* 默認(rèn)中心 */
    perspective-origin: center center;
    /* 左上角 */
    perspective-origin: left top;
    /* 右邊中心 */
    perspective-origin: right center;
    /* 底部中心 */
    perspective-origin: bottom center;
    /* 也可以是長(zhǎng)度 */
    perspective-origin: 30px 40px;
    /*最后記得加 -webkit- 兼容 */
}

perspective-origin: left center的效果:

perspective-origin: right center的效果:

backface-visibility

翻譯過來叫背面是否可見,可以設(shè)置 visiblehidden ,默認(rèn)可見,比如元素正面有文字,設(shè)置背面可見,則關(guān)于y軸旋轉(zhuǎn)180°后元素內(nèi)文字變成鏡像,否則不會(huì)出現(xiàn);

backface-visibility: visible的效果:

backface-visibility: hidden的效果(有旋轉(zhuǎn),只是背面不可見,則看不見了):

其他屬性

transform-origin

設(shè)置2D/3D變化的基準(zhǔn),可以是長(zhǎng)度值,也可以是 left, right, top, bottom ,例如:

div {
    /* 關(guān)于元素左上角旋轉(zhuǎn) */
    transform-origin: left top;
    transform: rotate(30deg);
}

transform-style

設(shè)置元素如何在3D空間呈現(xiàn)被嵌套的元素,選擇是 flatpreserve-3d ,默認(rèn) flat ;

這里這么來理解,之前我們對(duì)一個(gè)元素執(zhí)行變換時(shí),都是以屏幕所在平面的坐標(biāo)系在變換,但是元素如果存在子元素的話, transform-style 就是用來確定在哪套坐標(biāo)系上進(jìn)行變換, flat 表示任然以屏幕坐標(biāo)系為基準(zhǔn), preserve-3d 表示以 變換后的父元素所在平面的坐標(biāo)系 為基準(zhǔn);

#parent {
    transform-style: preserve-3d;
    -webkit-transform-style: preserve-3d;
    transform: perspective(500) rotateY(45deg);
    -webkit-transform: perspective(500) rotateY(45deg);
}
#child {
    transform: perspective(500) rotateX(45deg);
    -webkit-transform: perspective(500) rotateX(45deg);
}

flat的效果:

preserve-3d的效果:

例如,父元素繞x軸旋轉(zhuǎn)了45度,并且設(shè)置 transform-style: preserve-3d ,而嵌套的子元素只繞y軸旋轉(zhuǎn)45度,那么最終效果就是子元素繞父元素平面的y軸旋轉(zhuǎn)了45度,看起來就像先x軸轉(zhuǎn)45度后y軸轉(zhuǎn)45度的效果;

最后,別忘了為以上所有特性添加瀏覽器兼容前綴;

順便附上一個(gè)以上功能綜合效果的演示頁(yè)面,請(qǐng)戳下面:CSS 3D

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論