iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
佛心分享-IT 人自學之術

CSS破冰突圍:自學挑戰前端設計系列 第 21

Day21 : 拉Bar輕輕一滑精準評分,還能隨意設定評分範圍

  • 分享至 

  • xImage
  •  

靈活自定義隨意設定評分範圍,從滑塊到評分,全都隨心

##為什麼要有這功能
評分拉 Bar 功能能讓使用者透過拖動滑塊的方式,輕鬆選擇評分數值,這在許多互動式網站中非常實用。相比傳統的數字輸入框,拉 Bar 讓用戶更直觀地感受評分範圍,並可以迅速進行微調。無論是在產品評價、問卷調查,還是遊戲中的技能調整,這個功能都提供了便捷的用戶體驗。

##核心結構
評分拉 Bar 的主要結構是 元素,配合 type="range" 屬性來實現滑塊功能。它通常還會搭配 CSS 來設計滑塊的外觀、寬度、高度、以及不同狀態下的效果,如 hover、active 等。

##基本結構

<!-- HTML -->
<input class="slidecontainer" type="range" min="0" max="100" value="0">

min: 定義滑塊的最小值。
max: 定義滑塊的最大值。
value: 定義滑塊的初始值。

##主要功能
直觀評分體驗: 用戶可以拖動滑塊選擇評分,無需手動輸入數值。
即時反饋: 滑塊值可以即時顯示,讓用戶能看到即時的選擇結果。
靈活設定範圍: 通過 min 和 max 自定義評分範圍,適用於不同場景。
美觀設計: 滑塊外觀可以通過 CSS 進行高度自定義,與網站風格統一。

##注意事項
兼容性: 滑塊樣式可能會在不同瀏覽器中略有差異,需測試兼容性。
可訪問性: 確保拉 Bar 能被鍵盤和讀屏器等輔助工具正常使用,增加可訪問性。
數值顯示: 考慮在滑塊旁邊或下方顯示當前選擇的數值,讓用戶更加精確地知道自己的選擇。

##簡單範例應用

/* CSS */
<Style>
.slidecontainer {
    width: 100%; /* 滑塊寬度 */
}

input[type=range] {
    width: 100%; /* 設定滑塊本身的寬度為 100%,讓滑塊的範圍寬度與容器一致 */
    -webkit-appearance: none; /* 移除 Safari 等瀏覽器的預設滑塊外觀 */
    appearance: none; /* 移除所有瀏覽器的預設滑塊外觀 */
    height: 10px; /* 設定滑塊軌道的高度為 10px */
    background: #ddd; /* 設定滑塊軌道的背景顏色為淺灰色 (#ddd) */
    outline: none; /* 移除滑塊的預設外邊框,當點擊或聚焦時不顯示 */
    opacity: 0.7; /* 設定滑塊的透明度為 70%,讓它稍微透明 */
    transition: opacity .15s; /* 當透明度改變時,設定 0.15 秒的過渡效果 */
}

input[type=range]:hover {
    opacity: 1;/* 當滑鼠懸停在滑塊上時,將透明度變為 100%,顯示更清楚 */
}

input[type=range]::-webkit-slider-thumb {
    -webkit-appearance: none; /* 移除滑塊手柄的預設外觀 */
    appearance: none; /* 移除所有瀏覽器的預設手柄外觀 */
    width: 20px; /* 設定滑塊手柄的寬度為 20px */
    height: 20px; /* 設定滑塊手柄的高度為 20px */
    background: #4CAF50; /* 設定滑塊手柄的背景顏色為綠色 */
    cursor: pointer; /* 當滑鼠懸停在手柄上時,顯示為手型圖標,表示可拖動 */
    border-radius: 50%; /* 將滑塊手柄設為圓形 */
}
</Style>

<!-- HTML -->
<div class="slidecontainer">
  <input type="range" min="0" max="100" value="0" class="slider">
  /*min="0" 和 max="100" 定義滑塊的範圍,value="0" 是滑塊的初始值。*/
  <p>當前值: <span id="valueDisplay">0</span></p>
  /*顯示當前滑塊的值,並使用 <span id="valueDisplay"> 來動態更新數值顯示*/
</div>

<script>
  const slider = document.querySelector('.slider');
  const valueDisplay = document.getElementById('valueDisplay');
  
  slider.oninput = function() {
  /* slider.oninput:每當滑塊的值改變時觸發這個事件。*/
    valueDisplay.textContent = this.value;/* 每當滑塊被拖動時,動態更新顯示的值 */
  }
</script>

上一篇
Day20 : 滾動不設限:用 overflow 掌控想要的內容展現
下一篇
Day22 : Margin的相對佈局輕鬆擁有白邊與留白
系列文
CSS破冰突圍:自學挑戰前端設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言