iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0

img

草莓學習了幾天的 CSS 知識,打算加緊做點練習熟悉一下。

img

「草莓在寫網頁呀?」熊熊拿了兩杯咖啡回來。

「對啊,我在想辦法讓圖片出現在畫面的正中央,好像比想像中還要麻煩耶?」草莓說。

「垂直置中是個很古老的網頁排版問題囉!不過也因為它夠 old-school ,所以也有不少開發者提出對應的解法~」

「熊熊你可以說幾個來聽聽嗎?」

「沒有問題呀,我們先來看看你目前的架構。」

<div class="img_wrapper">
  <img src="https://i.imgur.com/NXvTU56.jpg" alt="">
</div>
.img_wrapper {
  border: 1px solid black;
}

img {
  width: 300px;
}

img

「看起來草莓你現在在畫面的最左側,那我們先來用一招試試看。」

.img_wrapper {
  border: 1px solid black;
}

img {
  width: 300px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -150px;
  margin-top: -150px;
}

「這樣我們就可以得到一隻垂直置中的草莓囉!」

img

「這段 CSS 是什麼意思呢?」草莓問說。

「在 CSS 中有許多種定位方式,這裡我們可以使用絕對定位的特性,給予要置中的圖片左邊和上邊都偏移 50%,最後再藉著盒子模型中學過的 margin,設定成自身一半的高度,就能做到置中的效果了~」

「可是如果圖片寬高不確定的話,不就是要一直去計算嗎?」

「沒錯,所以這個方法的缺點也很明顯,還好我們有第二種方案可以使用。」熊熊說。

.img_wrapper {
  border: 1px solid black;
}

img {
  width: 300px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

「好神奇呀,這個語法好像魔法耶」草莓說。

「沒錯,我們可以善用 CSS 提供的絕對定位,針對圖片的 top 和 left 設定為 50%,最後再透過 translate 位移要置中圖片自身的寬與高 50%,就大功告成囉,這個方法就不必再去自己計算,所以會方便許多喔!」


「最後再講一個,語法上也比前面兩個精簡很多喔!」

.img_wrapper {
  border: 1px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

img {
  width: 300px;
}

「好多沒看過的東西喔!」草莓歪頭。

「這個是 CSS 內建的排版方式,它叫做 Flexbox,最簡單的用法就是先在圖片的父層設定好 display,在預設情況下,justify-content 是水平方向的,align-items 則是垂直方向的,都給他們 center 就能讓圖片放置在畫面的正中央囉!」

「雖然 Flexbox 還不大會使用,可是這個寫法簡單好多喔!」草莓說。

「沒關係,繼續學習前端,你就會發現它有多好用了~」熊熊鼓勵著草莓。

img

明日待續~


上一篇
Day18
下一篇
Day20
系列文
StrawBeary 網頁工程三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言