基本上,背景的使用有兩種方式:
所以,如果你需要背景圖示,那就不要使用漸層,如果用了漸層,就不要想同時擁有背景圖喔! 這個小節會講漸層的使用,關於背景圖示的許多應用,就等下個小節來介紹囉!至於漸層的展示方法主要有兩種,分別是:
實現的方法主要透過『 background: 函數功能』,其中的函數功能為底下兩個函數:
其實漸層這種背景展示的方式還是比較偏向於 Logo 處的使用,或者是標題式的使用,當然,也能夠用在某些美術拼貼的環境中,一般使用情況還是要斟酌~否則容易讓畫面太過花花綠綠,反而容易產生反效果。當然啦,導覽列、某些大標題、特別的按鈕或小圖示,使用漸層色彩也是很不錯的喔!
想一想,能不能將前一章節裡面談到的圓形大頭照外圍再多一個彩虹漸層色呢?其實好像也不難,就是兩個方塊,內層方塊就是大頭照,外層方塊做個彩虹的輻射漸層,只是需要規定幾個項目: (1)最內層的顏色會被大頭照覆蓋,所以要有 8 種顏色,外面七種才是彩虹色;(2)最內層的顏色應該要佔用很大的部份,因為那個部份會被照片所覆蓋的緣故;(3)預設的輻射漸層為對四個角做放射狀,但是我們是圓形,所以需要以四個邊來做漸層才對; (4)最好內部方塊位置可以是絕對值,這樣位置調整比較有可預測性。
當然彩虹可以設定的更薄,只是相關的參數設定,請自行調配了!
我們在 3.3 就已經談過字型與背景的 CSS,也嘗試了數個範例的進行。但是事實上底圖如果做的好,可以達成很多的效果! 甚至於,許多的按鈕特效也可以透過兩張底圖來達成效果!而不去考量 CSS 的按鈕功能哩!同時,如果一個網頁要擺兩張底圖的話, 也能夠輕鬆的完成喔!
如果想要做兩張底圖時,可以使用 background-image: url('1st.jpg'), url('2nd.jpg'); (請注意,兩個底圖中間有逗號隔開喔!) 這樣的模樣來設定,同時,後續包括是否要重複?是否要放置在何處等等, 都需要使用到兩個底圖的參數這樣才行!舉例來說,如果我們想要製作出一個偏向夏天的歌曲畫面,標題可以是兩張底圖,或者是兩個圖示的對角線結合。 我們可以這樣玩一玩:
完成圖示之後,你可以嘗試將 page 這個外層方塊的寬度 (width:1200) 放大看看,你會發現蜜蜂與向日葵的距離被拉長了, 不過向日葵永遠在左下角,蜜蜂永遠在右上角,中間的方塊部份要規劃多大,就可以隨你開心來設計與填充所需要的文字、資料方塊了。
某些情況下,你可能得要將背景整個填滿空間!不是重複,是填滿喔!問題是,你的底圖與方塊的長寬比並不一致,這時該怎麼辦? 基本上,你可以透過 background-size 裡面的屬性值來調整,這個屬性值有幾種設定方式:
這麼講你可能會搞不清楚,我們實際來測試看看就知道了。請使用剛剛上面談到的兩個圖示,就是向日葵與蜜蜂的圖示就好,我們做個圖層, 讓蜜蜂停在向日葵上面吧!
<div class="page1"> <img src="images/ex6_2_a2.png" alt="蜜蜂要停在向日葵上" /> </div> <div class="page2"> <img src="images/ex6_2_a2.png" alt="蜜蜂要停在向日葵上" /> </div>
使用 contain 或 cover 都有一些無法克服的問題,不過,至少你不用去修改圖片,也不用因為得要調整寬高導致長寬比變形的問題!
如果你只有一張底圖想要做成按鈕,其實有很多種實現的方法,不過我們講一種最簡單的!那就是透過透明度來處理!
opacity 其實並不好用,因為整個在該元件裡面的子元件,通通也會變成透明的,所以底下只是一個簡單的範例,正常使用應該不會是這樣的喔!
因為只用到一張圖,所以我們使用的是 opacity,如果有兩張圖,則上面最後的那個滑鼠特效,要改變的就是底圖與文字的特性囉!這樣只要一張圖即可處理全部的按鈕! 無須將所有按鈕通通圖像化!在維護上面會比較方便的!
某些網站會有一些特定的方塊來展示新聞或產品的效果,通常會是一個方塊上半部有照片,下半部有文字說明這樣。 舉例來說,底下這個新聞網站,就會有這樣的方式:
那該如何設計出類似如此的畫面呢?其實也不難,你只要 (1)設計出一個方塊 (2)將圖片與文字寫入方塊內 (3)讓圖示使用類似 width:100% 或 height:100% 之類的方式填滿 (4)最終讓文字緊黏在方塊最下方,並且給予適當的透明度,這樣應該就能夠達成需求了! 如果有需要特效,那是後面章節再來談到的,這裡先來玩一玩基本圖示即可。
上面這個範例中,你可以看到 HTML 的原始碼其實很簡單,比較有幫助的應該就是 mypro 相關的 CSS 設定而已。 如果你規劃出一版自己喜歡的版型之後,加到 overall.css 裡面去,未來就又能夠直接使用這些方塊,並放置到你的產品網頁當中囉! 不過照片特效中,你會發現滑鼠移動進去後,圖片是向右下角放大,有沒有可能變成由中間的部份放大呢?去進行一下習題的實做吧!
你可能會看過許多設計師會將圖片重疊在一起,製作出懷舊或者是一些獨特意含的照片。不過,如果單純使用繪圖軟體去實做出這樣的圖示, 那麼未來如果想要修改 (例如抽換照片),那工程就浩大了!有沒有可能透過 CSS 方塊的圖層效果來達成呢?當然是可以的! 只是,首先就得要了解一下如何將方塊『轉個角度』囉!
要將方塊轉個角度,可以透過 transform 這個屬性來處理。這個屬性有很多的屬性值,先介紹 rotate 這個項目:
最簡單的範本,如果有 12 張圖,分成每 30 度角重疊一張,那會變成怎樣呢?可以這樣玩玩看。不過在此之前得先說, 因為有 12 張圖片,因此很可能會有 12 個不同的 class 需要來處理。通常有順序的類別我們可能會使用類似 class1, class2 之類的模式來處理, 也就是開頭的字串會相同。此時,可以使用底下的方式來設計 CSS 的類別呼叫類型:
還有許多特別的設定方式,不過我們只簡單的介紹這四種,若以剛剛提到的,我們的設定會有 class=mypro1, class=mypro2 (屬性值的關鍵字為 mypro) 時, 就可以使用類似『 div[class*=mypro] 』這樣的方式來疊代喔!
最終你可以將框線拿掉,就可以看到旋轉的樣子了。當然,如果你想要做出在左上角頂點旋轉的模樣,可能就得要搭配 left, top 的設計來思考囉!
有時你會看到某些網站的訊息顯示視窗排列是以方塊顯示,最重要的方塊在正前方,右後方是即將出現的訊息,左後方則是前一個重要訊息。 因為方塊有大有小,那你該如何處理這些方塊呢?其實不用修改數字,也不用去計算位置,可以透過 transform 的 translate 來修改位置,並透過 scale 來修改大小即可!
現在就讓我們來實做一下相關的變化技巧:
你必須要注意,如果 transform 有兩個以上的變形,請依舊使用一個 transform 裡面加上兩個屬性值,屬性值之間使用空白隔開即可。 未來如果加上動畫,就可以讓這個畫面轉動了!
讓我們回到例題 6.3.A 的討論,當時使用的是直接放大的特效,但是這樣一來,圖片是突然的放大,看起來效果不是很好。 能不能模擬網路上的漸變特性,讓圖片緩慢的變大呢?是可以的!透過所謂的 transition 這個屬性來處理即可。 不過這個屬性的值還挺多的~需要注意一下:
transition 不是對任何屬性都會生效喔!例如 display: block 的時候,很多寬高的變化就不會呈現。此時可能得要透過 visibility 的方式來處理, 不要使用 display: none 變成 display:block !否則會失敗!
這個 transition 可以用在很多需要 :hover 的場合喔!會讓你的畫面變得比較多漸變,在使用者角度上,會比較能接受~而不是使用跳動的方式來變化啦!
剛剛上個小節談到的是透過滑鼠去觸發一些漸變特效,那麼,有沒有可能系統自己會跑這些漸變特效?如果會的話,那不就成為動畫了? 對了!這就是 CSS3 的動畫特效囉!但怎麼做動畫特效呢?就跟剛剛前一小節一樣啊,你得要規劃怎麼改變顯示的狀態才行! 所以,就得要有一個特別的項目,稱為 @keyframes 的項目去設計動畫的動作才行!
在上面的 {動作} 中,主要的動作寫法有兩種,一種是僅有開始跟結束兩種動作,一種則是有時間性的帶入不同的動作。先來設計一下只有開始跟結束的動作項目:
@keyframes demo1 {
from { width: 100%; }
to { width: 120%; }
}
完成動作設計後,再來就是要將動畫寫入要動作的那個 div 裡面囉!主要需要的項目有:
因為是動畫,所以紙本上面無法順利的呈現,若使用網頁教材,按下『點我看動畫』就可以有一個簡易的示意圖。 如果一切順利的話,那麼你會發現到企鵝與公牛就持續的跑來跑去囉!那如果需要多個動作變化呢?舉例來說, 我們將 6.4.A 例題當中的圖層拿掉,讓一隻企鵝轉圈圈,該如何進行呢?其實可以使用的是動作的百分比來進行:
@keyframes demo1 {
0% { action1; }
25% { action2; }
50% { action3; }
100% { action4; }
}
上面是只有四個動作時的處理方式,若以例題 6.4.A 而言,每個角度 30 度角,轉一圈就得要有 12~13 個動作 (原本的動作 0 度也算一次動作~)。 所以,讓我們來玩一玩吧!讓企鵝轉圈圈!
所以搭配 tranform 可以完成圖形轉圈圈啊!那另外,我們可以讓背景圖示跑來跑去嘛?這當然也是可以啦!我們就用例題 6.2.A 為例來修改一下好了:
簡單的一個小動作,就可以讓你的背景變得比較活潑!不過,要不要有動畫,還是跟你的網頁內容與實際動作需求有關!千萬不要加入太多莫名其妙的動畫, 反而會失去原本網頁的焦點喔!
讓我們使用 CSS3 的動畫來完成最常見的畫面輪轉功能吧!回到例題 6.4.B 的地方,我們有五張圖需要輪播,目前預設的環境已經做好了, 現在想要做的情況是,做五個小動畫,每個動畫就讓影格自己在五個位置上面輪轉!以動畫 1 的角度來看,它主要針對 mypro1 的方塊, 所以,這個動畫 1 的運作就是讓 mypro1 動到 mypro2 暫停,然後再由 mypro2 移動到 mypro3 暫停,以此類推。以第一個網格來看,它就是會如下的模樣:
@keyframes ani1 {
0% { transform: scale(0.5, 0.5) translate(500px,0);
z-index: 1;
box-shadow: 3px 3px 2px 0px gray;}
15% { transform: scale(0.5, 0.5) translate(500px,0);
z-index: 1;
box-shadow: 3px 3px 2px 0px gray;}
20% { transform: scale(0.75, 0.75) translate(200px,0);
z-index: 5;
box-shadow: 3px 3px 2px 0px gray;}
35% { transform: scale(0.75, 0.75) translate(200px,0);
z-index: 5;
box-shadow: 3px 3px 2px 0px gray;}
40% { transform: none;
z-index: 10;
box-shadow: 0 3px 2px 0px gray; }
55% { transform: none;
z-index: 10;
box-shadow: 0 3px 2px 0px gray; }
60% { transform: scale(0.75, 0.75) translate(-200px,0);
z-index: 5;
box-shadow: -3px 3px 2px 0px gray; }
75% { transform: scale(0.75, 0.75) translate(-200px,0);
z-index: 5;
box-shadow: -3px 3px 2px 0px gray; }
80% { transform: scale(0.5, 0.5) translate(-500px,0);
z-index: 1;
box-shadow: -3px 3px 2px 0px gray; }
95% { transform: scale(0.5, 0.5) translate(-500px,0);
z-index: 1;
box-shadow: -3px 3px 2px 0px gray; }
100% { transform: scale(0.5, 0.5) translate(500px,0);
z-index: 1;
box-shadow: 3px 3px 2px 0px gray;}
}
你會發現 0~15, 20~35, 40~55, 60~75, 80~95 這段時間都是靜止不動的,也代表五個網格的位置上面稍微停頓。而停頓完之後再以 5% 的時間去漸變轉換。 這個範例完全沒有動到 javascript 以及其他技術,就是很單純的 CSS 動畫而已。同理,製作第二個動畫時,只要將裡面的網格點取代掉即可! 最終就會有可以輪播的圖示了!
你會發現到整個畫面都在動了!只是,如果不想要讓畫面動了怎麼辦?就用滑鼠特效吧!當 .page:hover 時,所有底下的 div 動畫都暫停! 動畫暫停可以考慮使用『 animation-play-state: paused; 』來實施即可!