iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0

學習目標

  • 理解 float 的用途與限制
  • 學會使用 clear 避免元素被浮動影響
  • 練習用浮動製作簡單的圖文排版
  • 知道浮動在現代已漸被 flexbox 取代,但仍需理解舊專案的用法

範例程式碼

index.html

<body>
  <h1>CSS 浮動與清除示範</h1>

  <div class="container">
    <img src="https://picsum.photos/200/150" alt="範例圖片" class="float-left">
    <p>
      這段文字會環繞在圖片的右側。利用 float 可以實現圖文混排的效果。
      不過要注意,浮動會讓後續的元素脫離正常的文流。
    </p>
  </div>

  <div class="box">這是一個受浮動影響的區塊,會跑上來。</div>
  <div class="clearfix"></div>
  <div class="box">這是一個加了 clear 後的區塊,恢復正常位置。</div>
</body>
body {
  font-family: "Microsoft JhengHei", sans-serif;
  margin: 0;
  padding: 20px;
}

h1 {
  text-align: center;
  margin-bottom: 30px;
}

.box {
  width: 200px;
  padding: 20px;
  margin: 20px;
  background: #3498db;
  color: white;
  border-radius: 6px;
}

.static {
  position: static; 

.relative {
  position: relative;
  left: 30px;
  top: 10px;
  background: #2ecc71;
}

.container {
  position: relative;
  height: 150px;
  background: #ecf0f1;
  margin: 20px 0;
}

.absolute {
  position: absolute;
  top: 20px;
  right: 20px;
  background: #e67e22;
}

.fixed {
  position: fixed;
  bottom: 20px;
  right: 20px;
  background: #9b59b6;
}

.sticky {
  position: sticky;
  top: 10px;
  background: #f39c12;
  padding: 15px;
  margin: 30px 0;
}

.content {
  height: 200px;
  border: 1px solid #ccc;
  margin-bottom: 20px;
}

常見錯誤與修正

  • ❌ 忘記清除浮動 → ✅ 使用 clear: both;clearfix
  • ❌ 濫用 float 當排版工具 → ✅ 建議用 flexgrid 取代
  • ❌ 浮動元素寬度不設 → ✅ 給圖片或區塊設定寬度,避免版面跑掉
  • ❌ 沒有考慮響應式 → ✅ 用浮動時,需搭配百分比或媒體查詢

今日小挑戰(可交付)

  • [ ] 嘗試建立一個圖文混排區塊,圖片靠左浮動
  • [ ] 在圖片下方放兩個方塊,測試未清除與已清除的差異
  • [ ] 製作一個左右並排的版面,使用 float: left/right
  • [ ] 嘗試用 clearfix 修正父層高度塌陷問題
  • [ ] 思考如何用 flex 重寫浮動版面

DAY25 心得

今天練習了 CSS 的浮動,終於理解為什麼很多舊專案的排版都靠 float 完成。雖然它的確能實現圖文混排或左右並排,但也常常帶來高度塌陷或版面跑掉的問題。

我覺得最關鍵的就是 清除浮動,不管是用 clear 還是 .clearfix,都能讓後續元素回到正常文流。這讓我體會到,CSS 的世界裡很多 bug 其實是因為沒有掌握元素的「流動方式」。

雖然現在有 flexboxgrid,大部分需求已經不需要再用 float,但學會它能幫助我看懂舊的程式碼,也能在一些特殊情境下派上用場。


上一篇
Day 23 - CSS 背景進階
系列文
程式煉金術:Bug退散!前端驅魔記24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言