iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
4
自我挑戰組

從門外漢到前端新手系列 第 30

Day30 CSS:Transform: translate

Transform是CSS中,用來改變視覺格式化模型(visual formatting model)的各種型態,且它具有三維的概念,可以聲明元素的三維視覺效果。它有多種function(功能),像是rotate(旋轉)、scale(改變比例)、translate(平移)、perspective(三維視角的景深)等功能。

我們這篇只會介紹transform中的translate,它又可以在元素的對齊上,與marginposition相互應用。

translate功能介紹

語法:
transform: translate(單位或百分比, 單位或百分比);
transform: translateX(單位或百分比);
transform: translateY(單位或百分比);

第一種語法可以同時聲明X軸、Y軸的平移數值 ; 第二、三種語法可以單純聲明X軸或Y軸的平移數值。

  • 單位平移
    以單位平移的方式很單純,單位值為多少就平移多少,然後transform支援負值(負值會往normal flow反方向平移):

    .translate {
      background-color: pink;
      transform: translate(100px, -50px);
    }
    

  • %百分比平移
    translate的百分比基準跟position或是margin以block container為基準不一樣 ; translate的百分比基準是自己的widthheight

    .translate {
      background-color: pink;
      transform: translate(100%, -50%);
    }
    

  • marginposition相互應用
    我們在Day19 CSS基本樣式-Background(下)有提到background-position,在背景圖片大於元素框時,可以設定center值,在背景圖片想要對齊正中間時很方便。

    可是marginposition都是以block container為基準,它們的50%是block container的50%而不是元素本身的50%,很難做到background-position
    如果我們今天在一個block container內放一個比它大很多的圖片,而我們希望圖片的中心點對block container的中心點:

    .outer {
      width: 500px;
      height: 200px;
      border: 5px solid;
      overflow: hidden;
    }
    
    img {
      width: 900px;
      background-color: pink;
    
    }
    

    先用margin或是position推50%,先把圖片對好block container的中心點:

    img {
      margin-top: 50%;
      margin-left: 50%;
    }
    
    .outer  {
      position: relative;
    }
    
    img {
      position: absolute;
      top:50%;
      left: 50%;
    }
    

    再用translate來讓圖片的中心點對齊:

    img {
      transform: translate(-50%, -50%);
    }
    

    可愛豬的臉部特寫就會出現在大家面前:

    Try it on codepen.

*目前translate也有單獨聲明的語法:

translate: X軸, Y軸;

可是各家瀏覽器的支援率很低,可以到 Can I use 輸入HTML的element或是CSS的property,查看各家瀏覽器的支援情形:

translate屬性的支援度不太樂觀。

transform是幾乎每家瀏覽器都支援,除了少數版本較舊的不支援外。

所以在語法上還是以transform: (function)來聲明,支援度比較好。如一開始所說transform屬性還有很多function,可以到MDNCSS規範認識更多。

最後一篇就到這了,雖然此系列的內容很有限。因為幾個月前剛自學的自己,也是依靠許多前人的分享,才能走到現在。希望這篇對於從零開始學習的人能有一些幫助,至少可以知道一些基本觀念,也知道有哪些學習資源,這樣自學時,就能更看得懂那些專有名詞。

那就繼續加油啦,要不停的學習才能進步啊!

Run Forrest, run!!!!!

/images/emoticon/emoticon29.gif


上一篇
Day25 CSS:Position
系列文
從門外漢到前端新手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
ccutmis
iT邦高手 2 級 ‧ 2019-10-15 11:58:56

謝謝分享~加油!

一個最近看到覺得不錯的css transform效果,提供您學習參考:
http://www.web3d.url.tw/demo/USER/css_demo/html-css-3d-movie-cube/

JinWen iT邦新手 5 級 ‧ 2019-10-15 14:26:33 檢舉

感謝分享!/images/emoticon/emoticon41.gif

0
Chris
iT邦新手 4 級 ‧ 2019-10-15 14:45:30

恭喜完賽,你已經和 30 天前的你,不一樣囉。對於 CSS 也變得很熟練了吧?

JinWen iT邦新手 5 級 ‧ 2019-10-15 19:20:31 檢舉

對啊,為了寫文章,得逼自己看懂MDN、CSS規範的原文,某些章節現在看已經可以相互呼應了,還有找問題時更知道下什麼關鍵字,寫鐵人對這些能力的幫助很大~

0
CSScoke
iT邦新手 3 級 ‧ 2019-10-15 16:07:08

恭喜完賽

JinWen iT邦新手 5 級 ‧ 2019-10-15 19:21:34 檢舉

謝謝,從你的頻道學到很多!/images/emoticon/emoticon41.gif

CSScoke iT邦新手 3 級 ‧ 2019-10-15 19:22:30 檢舉

太客氣了

0
tsuifei
iT邦新手 4 級 ‧ 2019-10-15 16:20:47

恭喜完賽!直得留下來好好讀~收穫一定會很多!

JinWen iT邦新手 5 級 ‧ 2019-10-15 19:22:04 檢舉

耶~謝謝/images/emoticon/emoticon41.gif

0
RURU Tseng
iT邦新手 2 級 ‧ 2019-10-15 21:56:18

恭喜完賽啊~~~真的過程都超仔細,一定要找個時間整個讀過

0
letter liu
iT邦新手 5 級 ‧ 2019-10-15 22:08:06

終於可以好好聽鬼故事! 還有嗎?誤

0
yachen
iT邦新手 4 級 ‧ 2019-10-15 22:30:06

恭喜完賽!!非常實用的文章!!
可以一起玩桌遊和傳說對決了XD

0
Titangene
iT邦新手 4 級 ‧ 2019-10-15 23:25:53

恭喜完賽!每天都有精美又直觀的圖,秒懂!

0
PH
iT邦研究生 5 級 ‧ 2019-10-16 09:46:47

恭喜完賽~沒想到最後一篇依然還是技術文,真的太強大了!!

0
tsuifei
iT邦新手 4 級 ‧ 2019-10-16 11:56:03

恭喜完賽~
每次看你的配圖都覺得好用心!
絕對是要存下來好好回味的!

0
Howard
iT邦新手 4 級 ‧ 2019-10-16 22:03:24

賀完賽/images/emoticon/emoticon64.gif

0
Askie Lin
iT邦新手 5 級 ‧ 2019-10-19 00:17:09

賀完賽!!!!以一篇技術文做結尾,讚

0
阿展展展
iT邦好手 1 級 ‧ 2020-03-04 06:33:52

恭喜完賽 \0.0/

我要留言

立即登入留言