Transform字面上就是變形,改變的意思。在CSS3中transform主要包括以下幾種:旋轉(zhuǎn)rotate、扭曲skew、縮放scale和移動(dòng)translate以及矩陣變形matrix。下面我們一起來看看CSS3中transform的旋轉(zhuǎn)rotate、扭曲skew、縮放scale和移動(dòng)translate具體如何實(shí)現(xiàn),老樣子,我們就從transform的語法開始吧。
語法:
transform : none | <transform-function> [ <transform-function> ]* 也就是: transform: rotate | scale | skew | translate |matrix;
?
none:表示不進(jìn)么變換;
立即學(xué)習(xí)“前端免費(fèi)學(xué)習(xí)筆記(深入)”;
取值:
transform屬性實(shí)現(xiàn)了一些可用SVG實(shí)現(xiàn)的同樣的功能。它可用于內(nèi)聯(lián)(inline)元素和塊級(jí)(block)元素。它允許我們旋轉(zhuǎn)、縮放和移動(dòng)元素 ,他有幾個(gè)屬性值參數(shù):rotate;translate;scale;skew;matrix。下面我們分別來介紹這幾個(gè)屬性值參數(shù)的具體使用方法:
一、旋轉(zhuǎn)rotate
rotate(
二、移動(dòng)translate
移動(dòng)translate我們分為三種情況:translate(x,y)水平方向和垂直方向同時(shí)移動(dòng)(也就是X軸和Y軸同時(shí)移動(dòng));translateX(x)僅水平方向移動(dòng)(X軸移動(dòng));translateY(Y)僅垂直方向移動(dòng)(Y軸移動(dòng)),具體使用方法如下:
1、translate(
2、translateX(
3、translateY(
三、縮放scale
縮放scale和移動(dòng)translate是極其相似,他也具有三種情況:scale(x,y)使元素水平方向和垂直方向同時(shí)縮放(也就是X軸和Y軸同時(shí)縮放);scaleX(x)元素僅水平方向縮放(X軸縮放);scaleY(y)元素僅垂直方向縮放(Y軸縮放),但它們具有相同的縮放中心點(diǎn)和基數(shù),其中心點(diǎn)就是元素的中心位置,縮放基數(shù)為1,如果其值大于1元素就放大,反之其值小于1,元素縮小。下面我們具體來看看這三種情況具體使用方法:
1、scale(
2、scaleX(
3、scaleY(
四、扭曲skew
扭曲skew和translate、scale一樣同樣具有三種情況:skew(x,y)使元素在水平和垂直方向同時(shí)扭曲(X軸和Y軸同時(shí)按一定的角度值進(jìn)行扭曲變形);skewX(x)僅使元素在水平方向扭曲變形(X軸扭曲變形);skewY(y)僅使元素在垂直方向扭曲變形(Y軸扭曲變形),具體使用如下:
1、skew(
2、skewX(
3、skewY(
五、矩陣matrix
matrix(
改變元素基點(diǎn)transform-origin
前面我們多次提到transform-origin這個(gè)東東,他的主要作用就是讓我們在進(jìn)行transform動(dòng)作之前可以改變元素的基點(diǎn)位置,因?yàn)槲覀冊啬J(rèn)基點(diǎn)就是其中心位置,換句話說我們沒有使用transform-origin改變元素基點(diǎn)位置的情況下,transform進(jìn)行的rotate,translate,scale,skew,matrix等操作都是以元素自己中心位置進(jìn)行變化的。但有時(shí)候我們需要在不同的位置對元素進(jìn)行這些操作,那么我們就可以使用transform-origin來對元素進(jìn)行基點(diǎn)位置改變,使元素基點(diǎn)不在是中心位置,以達(dá)到你需要的基點(diǎn)位置。下面我們主要來看看其使用規(guī)則:
transform-origin(X,Y):用來設(shè)置元素的運(yùn)動(dòng)的基點(diǎn)(參照點(diǎn))。默認(rèn)點(diǎn)是元素的中心點(diǎn)。其中X和Y的值可以是百分值,em,px,其中X也可以是字符參數(shù)值left,center,right;Y和X一樣除了百分值外還可以設(shè)置字符值top,center,bottom,這個(gè)看上去有點(diǎn)像我們background-position設(shè)置一樣;下面我列出他們相對應(yīng)的寫法:
1、top left | left top 等價(jià)于 0 0 | 0% 0%
2、top | top center | center top 等價(jià)于 50% 0
3、right top | top right 等價(jià)于 100% 0
4、left | left center | center left 等價(jià)于 0 50% | 0% 50%
5、center | center center 等價(jià)于 50% 50%(默認(rèn)值)
6、right | right center | center right 等價(jià)于 100% 50%
7、bottom left | left bottom 等價(jià)于 0 100% | 0% 100%
8、bottom | bottom center | center bottom 等價(jià)于 50% 100%
9、bottom right | right bottom 等價(jià)于 100% 100%
其中 left,center right是水平方向取值,對應(yīng)的百分值為left=0%;center=50%;right=100%而top center bottom是垂直方向的取值,其中top=0%;center=50%;bottom=100%;如果只取一個(gè)值,表示垂直方向值不變,我們分別來看看以下幾個(gè)實(shí)例
(1)transform-origin:(left,top):
(2)transform-origin:right
(3)transform-origin(25%,75%)
更多的改變中心基點(diǎn)辦法,大家可以在本地多測試一下,多體會(huì)一下,這里還要提醒大家一點(diǎn)的是,transform-origin并不是transform中的屬性值,他具有自己的語法,前面我也說過了,說簡單一點(diǎn)就是類似于我們的background-position的用法,但又有其不一樣,因?yàn)槲覀僢ackground-position不需要區(qū)別瀏覽器內(nèi)核不同的寫法,但transform-origin跟其他的css3屬性一樣,我們需要在不同的瀏覽內(nèi)核中加上相應(yīng)的前綴,下面列出各種瀏覽器內(nèi)核下的語法規(guī)則:
//Mozilla內(nèi)核瀏覽器:firefox3.5+ -moz-transform-origin: x y; //Webkit內(nèi)核瀏覽器:Safari and Chrome -webkit-transform-origin: x y; //Opera -o-transform-origin: x y ; //IE9 -ms-transform-origin: x y; //W3C標(biāo)準(zhǔn) transform-origin: x y ;
?
transform在不同瀏覽器內(nèi)核下的書寫規(guī)則
//Mozilla內(nèi)核瀏覽器:firefox3.5+ -moz-transform: rotate | scale | skew | translate ; //Webkit內(nèi)核瀏覽器:Safari and Chrome -webkit-transform: rotate | scale | skew | translate ; //Opera -o-transform: rotate | scale | skew | translate ; //IE9 -ms-transform: rotate | scale | skew | translate ; //W3C標(biāo)準(zhǔn) transform: rotate | scale | skew | translate ;
?
上面列出是不同瀏覽內(nèi)核transform的書寫規(guī)則,如果需要兼容各瀏覽器的話,以上寫法都需要調(diào)用。
支持transform瀏覽器
同樣的transform在IE9下版本是無法兼容的,之所以有好多朋友說,IE用不了,搞這個(gè)做什么?個(gè)人認(rèn)為,CSS3推出來了,他是一門相對前沿的技術(shù),做為Web前端的開發(fā)者或者愛好者都有必要了解和掌握的一門新技術(shù),如果要等到所有瀏覽器兼容,那我們只能對css3說NO,我用不你。因?yàn)镮E老大是跟不上了,,,,純屬個(gè)人觀點(diǎn),不代表任何。還是那句話,感興趣的朋友跟我一樣,不去理會(huì)IE,我們繼續(xù)看下去。
在上面我們詳細(xì)介紹了CSS3中transform的各種屬性值的設(shè)置以及其各自的參數(shù),下面我們通過一個(gè)實(shí)例來看看每一種屬性值的使用,為了節(jié)約空間和大家的時(shí)間,我們后面的實(shí)例都是在這個(gè)html基礎(chǔ)上實(shí)現(xiàn),主要是我們在下面的菜單中的a:hover中分別使用不同的transform的設(shè)置,換句話說,當(dāng)你移動(dòng)到鏈接上時(shí),相應(yīng)的每一個(gè)菜單項(xiàng)有不同的變化,因?yàn)槲覀冊诿總€(gè)菜單中使用了transform。具體每一步我們可以看下面的實(shí)例:
HTML Code:
<div class="menu"> <ul class="clearfix"> <li class="item translate"><a href="#">Translate</a></li> <li class="item translate-x"><a href="#">TranslateX</a></li> <li class="item translate-y"><a href="#">TranslateY</a></li> <li class="item rotate"><a href="#">Rotate</a></li> <li class="item scale"><a href="#">Scale</a></li> <li class="item scale-x"><a href="#">ScaleX</a></li> <li class="item scale-y"><a href="#">ScaleY</a></li> <li class="item skew"><a href="#">Skew</a></li> <li class="item skew-x"><a href="#">SkewX</a></li> <li class="item skew-y"><a href="#">SkewY</a></li> <li class="item matrix"><a href="#">Matrix</a></li> </ul> </div>
?
為了效果更好一點(diǎn),我們給上面的導(dǎo)航菜單加上一點(diǎn)CSS樣式:
.menu ul { border-top: 15px solid black; padding: 0 10px; } .menu ul li a{ color: #fff; float: left; margin: 0 5px; font-size: 14px; height: 50px; line-height: 50px; text-align: center; width: 65px; padding: 10px 5px; background: #151515; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; -moz-box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; -webkit-box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; text-shadow: 0 1px 1px #686868; text-decoration: none; } .menu ul li.translate a{ background: #2EC7D2; } .menu ul li.translate-x a { background: #8FDD21; } .menu ul li.translate-y a { background: #F45917; } .menu ul li.rotate a { background: #D50E19; } .menu ul li.scale a { background: #cdddf2; } .menu ul li.scale-x a { background: #0fDD21; } .menu ul li.scale-y a { background: #cd5917; } .menu ul li.skew a { background: #519; } .menu ul li.skew-x a { background: #D50; } .menu ul li.skew-y a { background: #E19; } .menu ul li.matrix a { background: #919; }
?
在這里我們使用了一些前面所進(jìn)的CSS3的屬性制作出來的導(dǎo)航,如果你跟著做的話,在你本地一定能看到一個(gè)非常靚麗的導(dǎo)航菜單,這里由于無法鏈接demo原頁面,只好貼上縮略圖,讓大家有一個(gè)初步效果視覺初步的效果如下:
從效果圖上我們可以清楚的看到菜單上我們分別對應(yīng)的是transform中的Translate、TranslateX、TranslateY、Rotate、Scale、ScaleX、ScaleY、Skew、SkewX、SkewY和Matrix,下面我們就在相應(yīng)的a:hover加上各自的效果:
1、transform:translate(x,y):
.menu ul li.translate a:hover { -moz-transform: translate(-10px,-10px); -webkit-transform: translate(-10px,-10px); -o-transform: translate(-10px,-10px); -ms-transform: translate(-10px, -10px); transform: translate(-10px,-10px); }
?
效果:
2、transform:translateX(x)
.menu ul li.translate-x a:hover { -moz-transform: translateX(-10px); -webkit-transform: translateX(-10px); -o-transform: translateX(-10px); -ms-transform: translateX(-10px); transform: translateX(-10px); }
?
效果:
3、transform:translateY(y)
.menu ul li.translate-y a:hover { -moz-transform: translateY(-10px); -webkit-transform: translateY(-10px); -o-transform: translateY(-10px); -ms-transform: translateY(-10px); transform: translateY(-10px); }
?
效果:
4、transform:rotate(角度值)
.menu ul li.rotate a:hover { -moz-transform: rotate(45deg); -webkit-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); }
?
效果:
5、transform:scale(x,y)
.menu ul li.scale a:hover { -moz-transform: scale(0.8,0.8); -webkit-transform: scale(0.8,0.8); -o-transform: scale(0.8,0.8); -ms-transform: scale(0.8,0.8); transform: scale(0.8,0.8); }
?
效果:
6、transform:scaleX(x)
.menu ul li.scale-x a:hover { -moz-transform: scaleX(0.8); -webkit-transform: scaleX(0.8); -o-transform: scaleX(0.8); -ms-transform: scaleX(0.8); transform: scaleX(0.8); }
?
效果:
7、transform:scaleY(y)
.menu ul li.scale-y a:hover { -moz-transform: scaleY(1.2); -webkit-transform: scaleY(1.2); -o-transform: scaleY(1.2); -ms-transform: scaleY(1.2); transform: scaleY(1.2); }
?
效果:
8、transform:skew(x,y)
.menu ul li.skew a:hover { -moz-transform: skew(45deg,15deg); -webkit-transform: skew(45deg,15deg); -o-transform: skew(45deg,15deg); -ms-transform: skew(45deg,15deg); transform: skew(45deg,15deg); }
?
效果:
9、transform:skewX(x)
.menu ul li.skew-x a:hover { -moz-transform: skewX(-30deg); -webkit-transform: skewX(-30deg); -o-transform: skewX(-30deg); -ms-transform: skewX(-30deg); transform: skewX(-30deg); }
?
效果:
10、transform:skewY(y)
.menu ul li.skew-y a:hover { -moz-transform: skewY(30deg); -webkit-transform: skewY(30deg); -o-transform: skewY(30deg); -ms-transform: skewY(30deg); transform: skewY(30deg); }
?
效果:
11、transform:matrix(a,b,c,d,e,f)
.menu ul li.matrix a:hover { -moz-transform: matrix(1,1,-1,0,0,0); -webkit-transform: matrix(1,1,-1,0,0,0); -o-transform: matrix(1,1,-1,0,0,0); -ms-transform: matrix(1,1,-1,0,0,0); transform: matrix(1,1,-1,0,0,0); }
?
效果:
transform中的matrix是相對的復(fù)雜,如果感興趣的朋友可以點(diǎn)這里進(jìn)去學(xué)民更多有關(guān)于Matrix的用法,我在這里就不多說了,說了也講不清楚。
下面我們來看看最終的效果圖,如果你在本地跟著這個(gè)實(shí)例做了的話,那么你就能看到非常好的效果了。
上面的實(shí)例效果展示了有關(guān)于transform中各種風(fēng)格效果,這里需要提醒大家,我們上面的效果都是以元素自身的中心點(diǎn)為基點(diǎn)的,下面我們來看一個(gè)改變元素基點(diǎn)的實(shí)例
我們在前面的實(shí)例基礎(chǔ)改變一下所有a標(biāo)簽基點(diǎn)位置為left top(前面默認(rèn)是center center)
.menu ul li.transform-origin a { -moz-transform-origin: left top; -webkit-transform-origin: left top; -o-transform-origin: left top; -ms-transform-origin: left top; transform-origin: left top; }
?
大家一起看看改變了a標(biāo)簽基點(diǎn)后transform下各種效果有什么樣的變化:
從效果圖中大家可以明顯的看出,改變元素的基點(diǎn)后。元素進(jìn)行transform任何屬性值的設(shè)置都會(huì)有影響,換句話說,我們transform進(jìn)行任何動(dòng)作變化都是以元素的中心為基點(diǎn),同時(shí)我們可以通過transform-origin來改變?nèi)魏卧氐幕c(diǎn),從而達(dá)到不同的效果。感興趣的朋友可以去了解更多有關(guān)這方面的知識(shí)。
最后我們再來看一個(gè)transform運(yùn)用多個(gè)屬性值的效果實(shí)例
.demo a{ width: 100px; padding: 5px; background: red; display: block; } .demo a:hover { -moz-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg); -webkit-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg); -o-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg); -ms-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg); transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg); }
?
這里需要注意的是使用多個(gè)屬性值時(shí),其之間不能用逗號(hào)(“,”)分隔,必須使用空格分隔,記住了是空格分隔,如上面代碼所示。
那么到這有關(guān)于CSS3的transform就介紹完了。那么到目前為止我們一起學(xué)習(xí)了CSS3中的:漸變CSS3 Gradient、透明色CSS3 RGBA、圓角CSS3 Border-radius、文字陰影CSS3 Text-shadow、邊框陰影CSS3 Box-shadow和今天的變形transform六個(gè)屬性的使用方法。那么下一節(jié)我們將一起學(xué)習(xí)CSS3動(dòng)畫中的另一個(gè)屬性Transition的使用方法,對CSS3感興趣的朋友,請觀注本站的更新。
下面為了大家更方便學(xué)習(xí)本站有關(guān)于CSS3的知識(shí),特把相關(guān)鏈接列出
HTML怎么學(xué)習(xí)?HTML怎么入門?HTML在哪學(xué)?HTML怎么學(xué)才快?不用擔(dān)心,這里為大家提供了HTML速學(xué)教程(入門課程),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)