如何使用 CSS3 Transition
前言
我們之前曾經介紹過 如何使用 CSS3 Animation,也不小心在該篇文章中說要另文跟大家介紹如何使用 CSS3 Transition,拖稿了近一年,今天終於要來實現諾言了~雖然大家可能根本就不在意,但哥就是真性情的人他媽的當真了啊!
在這個浮誇的時代,如果網頁上沒有酷炫的功能或特效,似乎就遜掉了(幹!開場跟如何使用 CSS3 Animation 這篇文章一模一樣,可以再混一點啊),好啦,不說廢話,總之就是網頁有使用到 CSS3 Transition 馬上就會讓你的網站帥十倍啦!很爽吧!(請注意:本人並不會因此帥十倍)
就讓我們一起來看看 CSS3 Transition 大法怎麼練吧!
CSS3 Transition 第一級
第一級讓我們先由簡單的範例從做中學,現在讓我們想像一個情境,我們希望滑鼠 hover 至某個 div 元素時,讓這個 div 元素改變背景色,若沒有用轉場(Transition)效果,我們就會看到 div 元素硬生生的改變顏色,一點都不溫柔,這樣橫衝直撞會讓 TA 很不舒服,所以我們才會需要 CSS3 Transition 來讓 TA 舒服一點。
div.example-no-transition {
width: 580px;
padding: 9px 15px;
background-color: #FF5050;
color: white;
margin-bottom: 20px;
margin-top: 20px;
border-radius: 5px;
}
div.example-no-transition:hover {
background-color: #6666FF;
}
這段 CSS 語法就是代表當滑鼠 hover 至 div.example-no-transition 元素時,背景顏色會變成 #6666FF
,但就是很生硬的變過去,但當我們加入 transition 那就不一樣了。
div.example-with-transition {
width: 580px;
padding: 9px 15px;
background-color: #FF5050;
color: white;
border-radius: 5px;
-webkit-transition: background-color 1s;
-moz-transition: background-color 1s;
-o-transition: background-color 1s;
-ms-transition: background-color 1s;
transition: background-color 1s;
}
div.example-with-transition:hover {
background-color: #6666FF;
}
這段 CSS 語法 transition 的部分就是說 div 元素要如何轉場,background-color 1s
的意思就是說 background-color 會在 1 秒的時間變化成 hover 所指定的背景色。
就是這麼簡單!
特別注意有 -webkit-
這個前綴的 CSS 語法是為了支援 webkit 核心的瀏覽器,例如:Chrome、Safari、Opera 等等。
CSS3 Transition 第一級展示
CSS3 Transition 第二級
CSS3 Transition 第一級使用的只是預設的轉場效果,總感覺缺少了點什麼,通常龜毛的人不會滿足於預設的效果,所以在 CSS3 Transition 第二級我們會學到如何調整 CSS3 Transition 的轉場效果。
<div id="example-transition">
<div class="ease">ease</div>
<div class="linear">linear</div>
<div class="easein">ease-in</div>
<div class="easeout">ease-out</div>
<div class="easeinout">ease-in-out</div>
</div>
#example-transition {
width: 520px;
}
#example-transition div {
width: 100px;
margin: 5px 0;
padding: 5px;
color: white;
background-color: #FF5050;
text-align: right;
border-radius: 5px;
}
#example-transition:hover div {
width: 500px;
}
#example-transition div.ease {
-webkit-transition: 3s ease;
-moz-transition: 3s ease;
-o-transition: 3s ease;
-ms-transition: 3s ease;
transition: 3s ease;
}
#example-transition div.linear {
-webkit-transition: 3s linear;
-moz-transition: 3s linear;
-o-transition: 3s linear;
-ms-transition: 3s linear;
transition: 3s linear;
}
#example-transition div.easein {
-webkit-transition: 3s ease-in;
-moz-transition: 3s ease-in;
-o-transition: 3s ease-in;
-ms-transition: 3s ease-in;
transition: 3s ease-in;
}
#example-transition div.easeout {
-webkit-transition: 3s ease-out;
-moz-transition: 3s ease-out;
-o-transition: 3s ease-out;
-ms-transition: 3s ease-out;
transition: 3s ease-out;
}
#example-transition div.easeinout {
-webkit-transition: 3s ease-in-out;
-moz-transition: 3s ease-in-out;
-o-transition: 3s ease-in-out;
-ms-transition: 3s ease-in-out;
transition: 3s ease-in-out;
}
CSS3 Transition 讓我們可以使用 timing function 這個參數來調整轉場效果,我們在例子中將所以的 timing function ease
、linear
、ease-in
、ease-out
、ease-in-out
一字排開,讓大家可以看清楚各種 timing function 有何異同,至於要使用哪個 timing function 就要看各位施主的 sense 了~
其中請特別注意,我們在這個例子中並沒有在 transition 裡說明哪個 CSS property 要做轉場效果,所以會使用預設模式來做轉場效果,預設模式其實就是 all,也就是說所有可以做轉場效果的 property 都會一起做變化,很方便吧!
CSS3 Transition 第二級展示
CSS3 Transition 第三級
CSS3 Transition 還有一個 delay 的參數可以調整,第三級裡面我們將介紹如何使用 CSS3 Transition 的 delay,這樣可以讓我們的轉場效果有更多的變化。
<div id="example-transition">
<div class="ease">ease</div>
<div class="linear">linear</div>
<div class="easein">ease-in</div>
<div class="easeout">ease-out</div>
<div class="easeinout">ease-in-out</div>
</div>
#example-transition {
width: 520px;
}
#example-transition div {
width: 100px;
margin: 5px 0;
padding: 5px;
color: white;
background-color: #FF5050;
text-align: right;
border-radius: 5px;
}
#example-transition:hover div {
width: 500px;
}
#example-transition div.ease {
-webkit-transition: 1s ease;
-moz-transition: 1s ease;
-o-transition: 1s ease;
-ms-transition: 1s ease;
transition: 1s ease;
}
#example-transition div.linear {
-webkit-transition: 1s linear 1s;
-moz-transition: 1s linear 1s;
-o-transition: 1s linear 1s;
-ms-transition: 1s linear 1s;
transition: 1s linear 1s;
}
#example-transition div.easein {
-webkit-transition: 1s ease-in 2s;
-moz-transition: 1s ease-in 2s;
-o-transition: 1s ease-in 2s;
-ms-transition: 1s ease-in 2s;
transition: 1s ease-in 2s;
}
#example-transition div.easeout {
-webkit-transition: 1s ease-out 3s;
-moz-transition: 1s ease-out 3s;
-o-transition: 1s ease-out 3s;
-ms-transition: 1s ease-out 3s;
transition: 1s ease-out 3s;
}
#example-transition div.easeinout {
-webkit-transition: 1s ease-in-out 4s;
-moz-transition: 1s ease-in-out 4s;
-o-transition: 1s ease-in-out 4s;
-ms-transition: 1s ease-in-out 4s;
transition: 1s ease-in-out 4s;
}
其實我們就只是在 timing function 後面加了一個 delay 秒數而已,就可以做到一層一層的轉場變化效果,學會 CSS3 Transition 第三級之後我們就可以隱約看出 CSS3 Transition 的語法:
transition: property duration timing-function delay;
第一個值是指定哪個 property 要變化,可以使用 all,第二個值 duration 是說轉場效果會多久完成,第三個值 timing-function 是說要使用什麼轉場效果有 ease
、linear
、ease-in
、ease-out
、ease-in-out
五種,第四個值 delay 是說明要延遲多久才開始轉場效果。
CSS3 Transition 第三級展示
CSS3 Transition 第四級
剛剛有說到 CSS3 Transition 可以指定 all property 進行轉場變化,其實並不是所有的 property 都可以進行轉場變化,可以進行轉場變化的 property 我們列成下表供大家參考。
Property Name | Type |
---|---|
background-color |
color |
background-image |
only gradients |
background-position |
percentage, length |
border-bottom-color |
color |
border-bottom-width |
length |
border-color |
color |
border-left-color |
color |
border-left-width |
length |
border-right-color |
color |
border-right-width |
length |
border-spacing |
length |
border-top-color |
color |
border-top-width |
length |
border-width |
length |
bottom |
length, percentage |
color |
color |
crop |
rectangle |
font-size |
length, percentage |
font-weight |
number |
grid-* |
various |
height |
length, percentage |
left |
length, percentage |
letter-spacing |
length |
line-height |
number, length, percentage |
margin-bottom |
length |
margin-left |
length |
margin-right |
length |
margin-top |
length |
max-height |
length, percentage |
max-width |
length, percentage |
min-height |
length, percentage |
min-width |
length, percentage |
opacity |
number |
outline-color |
color |
outline-offset |
integer |
outline-width |
length |
padding-bottom |
length |
padding-left |
length |
padding-right |
length |
padding-top |
length |
right |
length, percentage |
text-indent |
length, percentage |
text-shadow |
shadow |
top |
length, percentage |
vertical-align |
keywords, length, percentage |
visibility |
visibility |
width |
length, percentage |
word-spacing |
length, percentage |
z-index |
integer |
zoom |
number |
比如我們現在希望 width 跟 backgournd-color 都可以進行轉場變化,就可以這樣寫:
<div id="example-transition">
<div class="ease">ease</div>
<div class="linear">linear</div>
<div class="easein">ease-in</div>
<div class="easeout">ease-out</div>
<div class="easeinout">ease-in-out</div>
</div>
#example-transition {
width: 520px;
}
#example-transition div {
width: 100px;
margin: 5px 0;
padding: 5px;
color: white;
background-color: #FF5050;
text-align: right;
border-radius: 5px;
}
#example-transition:hover div {
width: 500px;
background-color: #000000;
}
#example-transition div.ease {
-webkit-transition: 3s ease;
-moz-transition: 3s ease;
-o-transition: 3s ease;
-ms-transition: 3s ease;
transition: 3s ease;
}
#example-transition div.linear {
-webkit-transition: 3s linear;
-moz-transition: 3s linear;
-o-transition: 3s linear;
-ms-transition: 3s linear;
transition: 3s linear;
}
#example-transition div.easein {
-webkit-transition: 3s ease-in;
-moz-transition: 3s ease-in;
-o-transition: 3s ease-in;
-ms-transition: 3s ease-in;
transition: 3s ease-in;
}
#example-transition div.easeout {
-webkit-transition: 3s ease-out;
-moz-transition: 3s ease-out;
-o-transition: 3s ease-out;
-ms-transition: 3s ease-out;
transition: 3s ease-out;
}
#example-transition div.easeinout {
-webkit-transition: 3s ease-in-out;
-moz-transition: 3s ease-in-out;
-o-transition: 3s ease-in-out;
-ms-transition: 3s ease-in-out;
transition: 3s ease-in-out;
}
我們在 hover 時有兩個 property 不一樣,一個是 width: 500px;
、一個是 background-color: #000000;
,這兩個 property 都是屬於可以進行轉場效果的,因此這樣寫就會一起變化,很簡單吧!
CSS3 Transition 第四級展示
結語
我們已經練完了 CSS3 Transition 大法的前四級,其實只要學會這些技巧,大概就能做出不錯的特效,只是動畫如何安排才會吸引人就要看個人的 Sense 了,像我就沒有什麼 Sense~
或許可以去請教對動畫最有 Sense 的 Rice Tseng 公主!
結果跟 CSS3 Animation 那篇文章完全一模一樣!真的好混啊!哈哈哈!!!